Minishop2 вывод свойств как категорий в разделе

Здравствуйте!
Есть такой вопрос. У меня есть товары, которые соотносятся с автомобилями: марка, модель, кузов.
Марку автомобиля я сделал категориями, т/к их немного (самих товаров около 6к).
У каждого товара в свойствах я прописал модель и кузов (повторюсь, что марка это категория).
Теперь я хочу чтобы в категории (т/е в марке автомобиля) не происходил сразу вывод товаров, а сначала вышли все модели, под моделями кузова.
Т/е мне нужно что-то вроде фильтра по свойствам, но внутри категории. Пока хочу просто их выводить хотя бы.
Готового ничего не нашел, поэтому стал писать сниппет:
$table = 'modx_ms2_products';

$sql = "SELECT * FROM $table GROUP BY model";
$q = $modx->prepare($sql);
$q->execute(array(0));
$arr = $q->fetchAll(PDO::FETCH_ASSOC);
Но в этой таблице нет понятия кто кого наследует по разделам. И тут еще нужно использовать modx_site_content таблицу, т/к там взаимосвязи по разделам лежат (т/к марка это раздел/категория).
Делать отдельно категории/разделы для марок и кузовов не удобно. Нужно сделать именно так как я описал.
Надеюсь на вашу помощь.
Роман
12 июня 2017, 09:30
modx.pro
1
1 066
0

Комментарии: 6

Роман
12 июня 2017, 14:13
0
Сделал таким образом. Мне кажется кривовато, если кто-то поймет мою задачу и предложит более правильный код, я буду очень благодарен.
Может быть и это кому-то понадобится:
<?php
$return = '';

$tableProducts = 'modx_ms2_products';
$tableContent = 'modx_site_content';

$sql = " SELECT DISTINCT $tableProducts.model
FROM $tableProducts INNER JOIN $tableContent
ON $tableProducts.id = $tableContent.id
WHERE $tableContent.parent = $pageid
GROUP BY model ORDER BY model ASC";
$query = new xPDOCriteria($modx, $sql);

if ($query->prepare() && $query->stmt->execute()) {
$res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($res as $row) {
$nameModel = $row['model'];

$return .= '';
$return .= ''.$nameModel.'';

// Query for YEAR
$sql2 = «SELECT year
FROM $tableProducts
WHERE model = '$nameModel'
GROUP BY year ORDER BY year ASC»;
$query2 = new xPDOCriteria($modx, $sql2);

if ($query2->prepare() && $query2->stmt->execute()) {
$res2 = $query2->stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($res2 as $row) {
$nameYear = $row['year'];

$return .= ''.$nameYear.'';
}
}

$return .= '';
}
}

return $return;
    Роман
    12 июня 2017, 14:24
    0
    Не успел отредактировать.
    Дублирую тут.
    <?php
    $return = '';
    
    $tableProducts = 'modx_ms2_products';
    $tableContent  = 'modx_site_content';
    
    $sql = " SELECT DISTINCT $tableProducts.model 
    FROM $tableProducts INNER JOIN $tableContent 
    ON $tableProducts.id = $tableContent.id 
    WHERE $tableContent.parent = $pageid 
    GROUP BY model ORDER BY model ASC";
    $query = new xPDOCriteria($modx, $sql);
    
    if ($query->prepare() && $query->stmt->execute()) {
        $res = $query->stmt->fetchAll(PDO::FETCH_ASSOC);
    
        foreach ($res as $row) {
            $nameModel = $row['model'];
            
            $return .= '<li>';
            $return .= '<div class="model-list__name">'.$nameModel.'</div>';
            
            // Query for YEAR
            $sql2 = "SELECT year 
            FROM $tableProducts 
            WHERE model = '$nameModel'
            GROUP BY year ORDER BY year ASC";
            $query2 = new xPDOCriteria($modx, $sql2); 
            
            if ($query2->prepare() && $query2->stmt->execute()) {
                $res2 = $query2->stmt->fetchAll(PDO::FETCH_ASSOC);
                
                foreach ($res2 as $row) {
                    $nameYear = $row['year']; 
                 
                    $return .= '<div class="model-list__year">'.$nameYear.'</div>';
                }
            }
            
            $return .= '</li>';
        }
    }
    
    return $return;
Андрей
12 июня 2017, 15:03
0


Мне кажется что с помощью mSearch2 можно сделать.
    start.exe
    20 октября 2017, 15:46
    0
    Напиши здесь или скинь в ЛС ссылку на сайт. У меня подобная задача, интересно посмотреть, как выглядит решение в реальности.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      6