Создание сайта в Нижнем Новгороде дешево — принесет ли миллионную прибыль посредственный сайт?
+7(910)140-50-90 (Кэп)

Как поставить галку в MODx, чтобы не отображать ресурс в списке

Довелось дорабатывать сайт http://biosfere.ru, и одна из задачек была связана с тем, чтобы с помощью checkbox отменить анонс страницы на главной странице.

На первый взгляд, а также на второй, третий и четвертый, задача тривиальная для любого, кто более-менее знаком с MODx.

Проиллюстрируем на примере конкретных страниц.

Вот главная страница сайта с прокручивающимся списком заболеваний.

Иллюстрация с главной страницы

В админке MODx Revolution 2.5.1 имеем вот такой checkbox:

Галка Показывать на главной

Задача: чтобы при стоящей галке этот пункт не отображался на главной.

А вот так выглядит чанк на главной с вызовом сниппета pdoResources, выводящего список:

Исходный код MODx Revolution. pdoResources

Флажок на странице каждого заболевания представляет собой булевый tv-параметр:

TV-параметр

Казалось бы, нет ничего проще: выставить фильтр по tv-параметру и всего делов.

Например, так:

&sortbyTVType=`integer`
&tvFilters=`desease_noshow<>1`

Почему это не сработало?

Все очень просто: tv-параметр был добавлен уже тогда, когда было забито порядка 150 страниц с видами заболеваний.

Чтобы в таблице modx_site_tmplvar_contentvalues прописалось значение tv-параметра 0, нужно зайти на каждую из 150 страниц и сохранить ее, либо написать для этого некий скрипт (если знаете другой вариант – пишите на capweb@bk.ru.

Когда мы зашли на 2 страницы из 150 и поставили там галки, в базе появилоcь две единички у tv с id=82.

Больше в базе записей о значениях этого tv нет!

Поэтому решение задачи "в лоб" предполагает, например, такую конструкцию

&where=`{
"id:IN":[ [ [getnomenuid3 ] ] ]
}`

Т. е., нужен второй сниппет, который будет собирать id документов, не содержащих tv-параметр desease_noshow со значением 1.

Также для этого в pdoResources предусмотрена минусация:

&resources=`-2, -5`

В результате приходим к конструкции

Исходный код MODx Revolution. pdoResources

Остается лишь сделать пару xPDO-запросов для того, чтобы вытащить из базы эти id и оформить сниппет так, чтобы он выдавал их в виде '-2, -5'

Кто не знает, как это сделать, пишите, ответим почти всем.

Кстати, нужно вкладывать именно некэшируемый сниппет в кэшируемый, а не наоборот. Еще более правильным решением будет вызов сниппета pdoResources из другого сниппета конструкцией вида

$query = $modx->sanitizeString($_GET['resSearch']);
$searchFilter = '["
published = 1 AND
deleted = 0 AND
(
pagetitle LIKE \"%'.$query.'%\" OR
description LIKE \"%'.$query.'%\" OR
longtitle LIKE \"%'.$query.'%\"
)
"]';
return $modx->runSnippet('pdoResources', array(
parents' => 0,
showLog' => 1,
where' => $searchFilter
));

Следующая статья: MODx. Вопросительные знаки вместо текста. Решение проблемы https://capweb.ru/modx-voprositelnyie-znaki-vmesto-teksta.html

Предыдущая статья: Зарабатывайте с помощью сайта Avon! https://capweb.ru/zarabatyivajte-s-pomoshhyu-sajta.html

Позиции сайта ООО Дека-НН на начало 2015 года
Позиции сайта veragold.ru на декабрь 2014 г.
reative
nalytics
romotion

Оставьте Вашу контактную информацию, и мы свяжемся с Вами!

Получайте горячие новости интернет-маркетинга и вечную скидку 5%!