Minishop2 вывод свойств как категорий в разделе
        Здравствуйте!
Есть такой вопрос. У меня есть товары, которые соотносятся с автомобилями: марка, модель, кузов.
Марку автомобиля я сделал категориями, т/к их немного (самих товаров около 6к).
У каждого товара в свойствах я прописал модель и кузов (повторюсь, что марка это категория).
Теперь я хочу чтобы в категории (т/е в марке автомобиля) не происходил сразу вывод товаров, а сначала вышли все модели, под моделями кузова.
Т/е мне нужно что-то вроде фильтра по свойствам, но внутри категории. Пока хочу просто их выводить хотя бы.
Готового ничего не нашел, поэтому стал писать сниппет:
Делать отдельно категории/разделы для марок и кузовов не удобно. Нужно сделать именно так как я описал.
Надеюсь на вашу помощь.     
    
    
                                                                                
            Есть такой вопрос. У меня есть товары, которые соотносятся с автомобилями: марка, модель, кузов.
Марку автомобиля я сделал категориями, т/к их немного (самих товаров около 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 таблицу, т/к там взаимосвязи по разделам лежат (т/к марка это раздел/категория).Надеюсь на вашу помощь.
Комментарии: 6
                Сделал таким образом. Мне кажется кривовато, если кто-то поймет мою задачу и предложит более правильный код, я буду очень благодарен.
Может быть и это кому-то понадобится:
<?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;
                    Может быть и это кому-то понадобится:
<?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;
                Не успел отредактировать.
Дублирую тут.
                    Дублирую тут.
<?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;            
                Жестко…            
                    
                Т/е?            
                    
Мне кажется что с помощью mSearch2 можно сделать.
                Напиши здесь или скинь в ЛС ссылку на сайт. У меня подобная задача, интересно посмотреть, как выглядит решение в реальности.            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.