pdoMenu мультикатегории minishop2

Задался очередным вопросом — как научить pdoMenu понимать мультикатегории MS2?
Поясню для чего это нужно — зачастую необходимо вывести «древовидную структуру» магазина, с присоединением превьюшек первого товара из категории. Зачастую менеджеры создают категории, в которых содержатся товары только из других родительских категорий, в этом случае pdoMenu не сможет присоединить превьюшку для категории.
Быть может кто-то уже сталкивался с подобной задачей?
Я сталкивался, около полугода назад, для этого написал вот такой сниппет (под катом):

if(!isset($pdo)) $pdo = $modx->getService('pdoTools');
$q = $modx->newQuery('msCategory');

$q->leftJoin('msCategoryMember', 'msCategoryMember', array(	'`msCategory`.`id` = `msCategoryMember`.`category_id`'));

$q->innerJoin('msProduct', 'msProduct', 'msProduct.parent = msCategory.id OR msCategoryMember.product_id = msProduct.id');
$q->innerJoin('msCategory', 'parentCategory', 'msCategory.parent = parentCategory.id');
$q->innerJoin('msProductFile', 'img', 'img.product_id = msProduct.id AND img.rank = 0 AND img.parent != 0 AND img.path LIKE "%/360x270/"');

$q->where(array('class_key' => 'msCategory','published' => 1,'deleted' => 0));

$q->sortby('parentCategory.menuindex','ASC');
$q->sortby('msCategory.menuindex','ASC');
$q->groupby('msCategory.id');
$q->select(array(
	'parentCategory.id as parentID',
	'parentCategory.pagetitle as parentPagetitle',
	'msCategory.id as catID',
	'msCategory.pagetitle as catPagetitle',
	'img.url as img'
	));
//$q->where('`msCategoryMember`.`product_id` = '.$rid.' OR `id` = '.$pid);

$results = [];
$q->prepare();
//echo $q->toSQL();
$parentID = 0;
if ($q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		if ($parentID != $row['parentID']){
			$parentID = $row['parentID'];
			$results[$row['parentID']]['title'] = $row['parentPagetitle'];
			$results[$row['parentID']]['url'] = $modx->makeUrl($row['parentID'],'web','','abs');
			}
		$results[$row['parentID']]['childs'][$row['catID']]['title'] = $row['catPagetitle'];
		$results[$row['parentID']]['childs'][$row['catID']]['url'] = $modx->makeUrl($row['catID'],'web','','abs');
		$results[$row['parentID']]['childs'][$row['catID']]['img'] = $row['img'];
	}
}
//$tplCat = '@INLINE {{+title}}';
//$tplRow = '@INLINE {{+title}}';
$output = '';
foreach($results as $parentID => $parentCats){
	$pls['total'] = count($parentCats['childs']);
	$pls['title'] = $parentCats['title'];
	$pls['url'] = $parentCats['url'];
	$rows = '';
	foreach($parentCats['childs'] as $idCat => $cat){
		$rows .= $pdo->getChunk($tplRow, $cat);
	}
	$pls['rows'] = $rows;
	$output .= $pdo->getChunk($tplCat, $pls);
	//var_dump($rows);
}
return $output;
И вызов сниппета:
{$_modx->runSnippet('pdoMenuMS2', [
		'tplCat' => '@INLINE <a href="{$url}"> {$title}</a> <ul> {$rows}</ul>',
		'tplRow' => '@INLINE <li><a href="{$url}"><img src="{$img}"> {$title}</a></li>`
	])}
Вся эта писанина теперь, спустя время, мне кажется черезчур надуманной.
Нет ли способа расширить класс pdoMenu и заставить его принимать мультикатегории minishop2?

PS: написал в «вопросы» но после публикации понял что пойдет для «готовых решений» -)

UPD: наткнулся на подобную тему с иллюстрациями modx.pro/help/3886/
Алексей
29 марта 2016, 10:49
modx.pro
8
3 366
+2

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0