msProducts fenom в параметре where. И баг со связями

Задача вывести рекомендованные товары.

Сделал связь Рекомендованные (это уже вторая связь, первая — фасовка, товары с одинаковыми названиями, но разными весами). И тут оказывается, что на кнопку Создать связь на странице товара нельзя нажать — ничего не происходит. И ошибки в логах нет. Как понять что это и пофиксить?

Когда верстал сайт, это работало, я прописывал тестовые связи много-к-много и выводилось как надо. Делал я так:

Вызов сниппета на странице товара:
{$_modx->runSnippet('msProducts',[
	'link' => '2',
	'master' => $_modx->resource.id,
	'parents' => '2',
	'limit'=> '10',
	'sortBy'=>'Rand()',
	'tpl' => 'tpl.msProducts.row.my',
	'tplWrapper' => 'tpl.wrapper.linked',
	'includeThumbs' => '520x390',
])}
В чанке tpl.wrapper.linked:

{if $output!=''}
	<h3 class="text-center mb-3">С этим товаром смотрят:</h3>
	<div class="row mb-3 adjacent owl-carousel">
		{$output}
	</div>
{else}
	{$_modx->runSnippet('msProducts', [
		'parents'   => $_modx->resource.parent,
		'limit' => '10',
		'sortBy'=>'Rand()',
		'tpl' => 'tpl.msProducts.row.my',
		'includeThumbs' => '520x390',
		'tplWrapper' => 'tpl.wrapper.adjacent'
	])}
{/if}
Последний чанк выглядит как вывод при true в .linked.

А теперь возникла мысль убрать из выборки открытый ресурс. Делаю через параметр where:
'where'=>'{"id:!=":66}'
— это работает, но исключается только ресурс с id 66.
Если вместо 66 поставить $id, то это ожидаемо не парсится никак.
Стал думать как сделать через переменную:
{set $wher = [
    'id:!=' => $id,
]}
{$wher = $wher|json_encode:$.const.JSON_PRETTY_PRINT} или {$wher = json_encode($wher)}

'where'=>$wher,
При этом перед выборкой выводится на странице { «id:!=»: null }, но ничего в выборке не меняется. Получается, что $id в этом чанке не парсится и отдельно тоже не выводится, хотя в конечном выводился.

Подскажите, как правильно сделать.
Eiry
27 июня 2018, 18:02
modx.pro
2 862
0

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

Eiry
28 июня 2018, 15:18
0
Удалось решить проблему, только переведя на обычный MODX. Как сделать на чистом феноме, по-прежнему, не представляю…
{set $topId = $_modx->runSnippet('pdoField', [
	'id' => $_modx->resource.id,
	'field' => 'id',
	'topLevel' => 2
])}
[[!msProducts?
&parents=`{$topId}`
&limit=`10`
&sortBy=`Rand()`
&tpl=`tpl.msProducts.row.my`
&tplWrapper=`tpl.wrapper.adjacent`
&includeThumbs=`520x390`
&where=`{ignore}{"id:!=":[[*id]]}{/ignore}`
]]
И что делать с багом со связями, не знаю.

Попробовал подобавлять связи непосредственно в базу:
INSERT INTO `modx_ms2_product_links` (`link`, `master`, `slave`) VALUES ('2', '58', '59');
и т.п.
Добавились, но выскакивала ошибка 1062 Дублирующаяся запись (2,58,59) с ключом PRIMARY (как-то так) — хз, что это значит, я только начинаю осваивать php с работой с базой данных…

В админке тоже связи у товаров появились, сниппет работает как надо, но кнопка Создать всё равно не нажимается.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1