Сортировка ресурсов по просмотрам и скачиванием файла в MODx

Задача: Вывести в блок самые популярные статьи

Создадим 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)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

[MODx] Генератор настроек MIGX

[MODx, MIGx] Документация на русском по MIGX

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[MODx] minishop2 tips

[JS] Маска для ввода телефона +7(___)___-__-__

[MODx, miniShop2] Генерация YML для выгрузки в маркет

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODx] Подсказки по API

[OpenCart] Вывести на главную все категории с картинками

[MODx, MIGX] Примеры использования

[MODx] Сайт на обслуживании (выключить сайт)

Универсальная форма обратной связи — feedBackForm

[PHP, JSON] Пример перевода с помощью Yandex Translate API

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

Расширение свойств товаров minishop2

[Opencart] Вернуть английский язык, если вы его удалили

[OpenCart] Вывести модуль напрямую через контроллер

[MODx, Quip] Более рабочий вариант.

[MODX, MIGX] Вывести getImageList только если он не пустой

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

Красивое адаптивное меню под pdoMenu

[MODx] Создать источник файлов

[MODx] Вывод tv-параметров в формате [название TV] - [значение TV]

[PHP] Простое логирование

[MODX] Вывести список всех опций MiniShop2

Все записи