Задача: Вывести в блок самые популярные статьи
Создадим 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):
<a href="/file.html?id=[[*id]]" class="pre-link" target="_blank">Скачать файл</a> <script> $("a.pre-link").click(function(e){ e.preventDefault(); var t = $(this); var link = t.attr("href"); $.ajax({ type: "GET", url:link, dataType:'json', success: function(data){ console.log(data); //Вывод в консоль полученных данных (для отладки) if(data.error == false){ t.attr("href",data.linkdl); window.location = data.linkdl; } }, error: function (xhr, ajaxOptions, thrownError){ console.log(xhr.responseText); //Вывод в консоль полученных данных в случае ошибки (для отладки) } }); }); </script>
Комментарии (1)
Не писать ответ