Задача: Вывести в блок самые популярные статьи
Создадим TV-параметр, назовем его interesting
. Тип ввода — число, точность: 2, минимальное значение: 0.
Создадим сниппет interestingCount
с кодом:
if($modx->user->isAuthenticated('mgr')){ // Проверка на админа (Не хочется портить статитику) return false; } $page = $modx->getObject('modResource', $modx->resource->get('id')); //получаем ID текущего ресурса $page->setTVValue('interesting', $page->getTVValue('interesting')+1); // Изменяем TV-параметр
Оффтоп: Проверить на админа можно и без сниппета. Можно указать в шаблоне:
[[!+modx.user.id:memberof=`Administrator`:then=`<span>Вот эту надпись увидет только админ!</span>`]]
Размещаем его в шаблоне:
[[!interestingCount]]
Выводим ресурсы через getResources (извеняюсь за тавтологию):
[[!getResources? &parents=`19` &tpl=`side-list-tpl` &sortbyTV=`interesting` &sortbyTVType=`integer` &sortdirTV=`DESC` &limit=`7` &depth=`0` &where=`{"template:=":3}` ]]
Напомню что есть что в getResources
parents
— id родителя ресурсов, которые нужно вывести.tpl
— чанк-шаблон, по которому будут выведены ресурсыsortbyTV
— TV-параметр, по котрому будет производиться сортировкаsortbyTVType
— тип данных, по которому будет производиться сортировкаsortdirTV
— Метод сортировки (по убыванию)limit
— лимитdepth
— насколько в глубь по дереву ресурсов будет заходить цикл.0
- значит только непосредственно в этом паренте.where
— условие для фильтрации. не обязательный параметр. В данном случае выводим только ресурсы, у которых шаблон имеет id 3
Сортировка ресурсов по количеству скачиваний файла
А как насчет того чтобы посчитать кол-во загрузок файла на странице ресурса и отсортировать уже по этому параметру?
Алгоритм действий:
Создадим TV-параметр, назовем его dlcount
. Тип ввода — число, точность: 2, минимальное значение: 0.
Создадим TV-параметр, назовем его dllink
. Тип ввода — файл.
Создадим сниппет dlfile
с кодом:
$result = array("dllink" => false, "error" => true); if(!empty($_GET["id"]) AND (int)$_GET["id"] == $_GET["id"]){ $page = $modx->getObject('modResource', $_GET["id"]); if($page){ $dllink = $page->getTVValue('dllink'); $dlcount = $page->getTVValue('dlcount'); if(strlen($dllink) && $page->setTVValue('dlcount', $dlcount+1)){ $result = array( "dllink" => $page->getTVValue('dllink') ,"error" => false ); } } } echo json_encode($result);
Создаем страницу с пустым шаблоном, убеждаемся что она открывается по адресу ваш-сайт.ру/file.html
, отключаем там визуальный редактор и вставляем сниппет [[!dlfile]]
В шаблоне размещаем подобную структуру (для работы скрипта нужна очень редкая библиотека jQuery):
Скачать файл
Ну а про вывод статьи вы уже знаете из предыдущей части статьи.
Комментарии (0)
Не писать ответ