Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 145 комментариев

Василий Наумкин
Василий Наумкин
$tpls = explode(',', $modx->getOption('minishop.goods_tpl'));
Нет в MS2 такого параметра, тут другой сниппет нужен.

Сниппет getCatIds, возвращает id товаров, через запятую:
<?php
if (!empty($_REQUEST['query'])) {
	$modx->setPlaceholder('parents', @$_REQUEST['parents']);
	return;
}

if (!isset($parents) || empty($parents)) {
	$parents = $modx->resource->id;
}
	
if (empty($depth)) {$depth = 1;}
$pids = array_map('trim', explode(',', $parents));
$parents = $pids;
foreach ($pids as $v) {
	if (!is_numeric($v)) {continue;}
	$parents = array_merge($parents, $modx->getChildIds($v, $depth));
}

$ids = array();
$q = $modx->newQuery('msProduct', array('parent:IN' => $parents, 'class_key' => 'msProduct', 'published' => 1, 'deleted' => 0));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}

$q = $modx->newQuery('msCategoryMember', array('category_id:IN' => $parents));
$q->select('product_id');
if ($q->prepare() && $q->stmt->execute()) {
	$members = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
}

if (!empty($members)) {$ids = array_merge($ids, $members);}
return implode(',', $ids);
Нужно указать параметр parents, с родителями, еще есть depth — глубина вложенности запроса.

Сниппет нужно указать в вызове mFilter.
[[!mFilter?
	&resources=`[[!getCatIds?parents=`21`]]`
	&includeTVs=`0`
	&includeMS=`1`
	&includeMSList=`price,new,favorite,popular,size,color`
	&sortFilters=`ms_new,ms_favorite,ms_popular,ms_size,ms_color,ms_price`
	&tpl=`tpl.msProducts.row`
]]
Деньги отправляй через личный кабинет, я спишу за консультацию =)
Wassi Wassinen
Wassi Wassinen
Василий, что-то я уже перепробовал всякого разного, но выводить товары по родителям не получилось. По категории — тоже. Какой-то он хитрый слишком. :) Понятно, что можно искать вставкой в значение части названия товара. Но это не совсем комильфо. Завтра попробую со свежей головой.

Если у тебя будет время — подскажи примером. Сниппет, который приведен в теме mFilter(для подстановки дочерних ресурсов):
if (!empty($_REQUEST['query'])) {return;}
$parent = $modx->resource->id;

$tmp = $modx->getChildIds($parent);
if (empty($tmp)) {return 0;}
$tpls = explode(',', $modx->getOption('minishop.goods_tpl'));
$q = $modx->newQuery('modResource', array('id:IN' => $tmp, 'template:IN' => $tpls, 'deleted:!=' => 1, 'published' => 1));
$q->select('id');
if ($q->prepare() && $q->stmt->execute()) {
    $ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN, 0);
    return implode(',', $ids);
не работает. То ли таблица старая, то ли еще что — пока не понял. Возвращает пустое значение. Возвращаясь к началу разговора — покажи куда денег переводить за пример :)) Ты помог, хочется отблагодарить. «Спасибами» интернет не оплатишь и жене конфет не купишь :) И если запал еще тлеет — расскажи как по родителям можно фильтровать.

Заранее благодарен.
Wassi Wassinen
Wassi Wassinen
<div class="row">
	<div class="span3">
		<div class="filter">
			<form action="[[~[[*id]]]]" method="post" id="mFilter">
				[[!mFilter?
					&resources=`2082,2083,2084,2085`
					&includeTVs=`0`
					&includeMS=`1`
					&includeMSList=`price,new,favorite,popular`
					&sortFilters=`ms_new,ms_favorite,ms_popular,ms_price`
					&tpl=`tpl.msProducts.row`
				]]
				<input type="hidden" name="query" value="[[+mse.query]]">
				<input type="hidden" name="page" value="1">
				<input type="hidden" name="sort" value="ms_price,asc">
				<input type="hidden" name="limit" value="10">
				<input type="hidden" name="parents" value="[[+parents]]">
				<input type="hidden" name="action" value="filter" />
			</form>
		</div><!-- end_filter -->
	</div>
	<div class="span9" id="mItems"></div>
</div>
<link href="http://yandex.st/jquery-ui/1.10.3/themes/smoothness/jquery-ui.min.css" rel="stylesheet" />
<script src="http://yandex.st/jquery-ui/1.10.3/jquery-ui.min.js" type="text/javascript"></script>
<script src="/assets/components/msearch/js/mfilter.js" type="text/javascript"></script>
При таком вызове теперь не выдает ошибок, отображает слайдер с корректными ценами, но товары не выводит. Ему нужен пост запрос?
Wassi Wassinen
Wassi Wassinen
Василий, пц :)) Ты оказывается умеешь тонко троллить :)) Нашел я её, функцию эту, в отдельном js блоке объявлена. :))
<script type="text/javascript">
	miniShop2Config = {
		cssUrl: "/assets/components/minishop2/css/web/"
		,jsUrl: "/assets/components/minishop2/js/web/"
		,imagesUrl: "/assets/components/minishop2/images/web/"
		,actionUrl: "/assets/components/minishop2/action.php"
		,ctx: "web"
		,close_all_message: "закрыть все"
		,price_format: [2, ".", " "]
		,price_format_no_zeros: 0
		,weight_format: [3, ".", " "]
		,weight_format_no_zeros: 1
	};
	</script>