Что делать, если категория не удаляется из цикла как ожидалось?

Как исключить определенную категорию из результата выполнения цикла с использованием pdoMenu в MODX, если применение параметра where с ID категории не дает результата? Вот мой текущий код:

```html
<div class="filter-prod__list">
	[[pdoMenu? &parents=`15` &level=`1` &rowClass=`filter-prod__item` &where=`{"id:!190","class_key:msCategory"}`
	&tplOuter=`@INLINE [[+wrapper]]`
	&tpl=`@INLINE <button onclick="document.location='[[+link]]'" [[+classes]] [[+attributes]]><span>[[+menutitle]]</span></button>`
	&tplHere=`@INLINE <button [[+classes]] [[+attributes]]><span>[[+menutitle]]</span></button>`
	]]
</div>
```

Предпринимаемые мной попытки исключить категорию, даже с использованием разных ID, не увенчиваются успехом. В чем может быть проблема?
  • 5 декабря 2023 г. 17:49
Ответы на вопрос 3
Основная проблема в вашем коде заключается в синтаксисе параметра `&where`. Параметр `&where` требует, чтобы строка была валидным JSON-объектом, поэтому каждый ключ и значение должны быть заключены в двойные кавычки. Кроме того, для сравнения по нескольким условиям используются запятые внутри JSON-объекта. Ваш код также включает символ двоеточия в строке категории, который не соответствует синтаксису SQL-запроса.

Чтобы исправить параметр `where` для исключения категории с ID 190 из результата выполнения цикла, его следует написать примерно следующим образом:

```html
&where=`{"id:!=":"190","class_key":"msCategory"}`
```

Здесь мы используем `id:!=` для указания, что мы хотим получить результаты, где ID не равен 190, а `class_key` установлен на `msCategory`.

Весь исправленный вызов pdoMenu будет выглядеть следующим образом:

```html
<div class="filter-prod__list">
	[[pdoMenu? 
		&parents=`15` 
		&level=`1` 
		&rowClass=`filter-prod__item` 
		&where=`{"id:!=":"190","class_key":"msCategory"}`
		&tplOuter=`@INLINE [[+wrapper]]`
		&tpl=`@INLINE <button onclick="document.location='[[+link]]'" [[+classes]] [[+attributes]]><span>[[+menutitle]]</span></button>`
		&tplHere=`@INLINE <button [[+classes]] [[+attributes]]><span>[[+menutitle]]</span></button>`
	]]
</div>
```

После внесения этих изменений категория с ID 190 должна быть исключена из результатов вашего цикла. Убедитесь, что очистили кэш МОДХ после изменения параметров вызова сниппета, чтобы увидеть изменения на сайте.
Во первых, у вас неверный синтаксисwhere, нужно указывать в форме JSON, то бишь:&where=`{"id:!=":"190","class_key":"msCategory"}`Во вторых, вы таким образом хотите исключить ресурс из выборки или родителя? Зачем использовать where, если можно сделать проще:&parents=`15, -190` //если нужно исключить ресурс с ID 190 и его дочерние
&resources=`-190` //если нужно исключить ресурс с ID 190
У вас&where=`{"id:!190"неравенство неверно указано, попробуйте&where=`{"id:!=":190"
Похожие вопросы