Сортировка ресурсов по просмотрам и скачиваниям файла в 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):

<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)

  1. Robin 05 февраля 2023, 14:51 # 0
    нерабочая херня
    *Комментарий будет опубликован после проверки модератором

    Похожие статьи

    Генератор настроек MIGX

    Документация на русском по MODX MIGX

    Подсказки по работе и заготовки для MiniShop2

    pdoPage и getImageList - Постраничная навигация MIGX

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

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

    Генерация YML для выгрузки в маркет

    Примеры работы с API MODX

    Примеры выборки where, optionFilters, innerJoin

    pThumb - ресайз изображений. Примеры использования.

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

    Примеры использования

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

    Добавить в письмо контактную информацию

    Вывести getImageList только если он не пустой

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

    Оформление и настройка easyComm. Комментарии и отзывы на сайте.

    Поиск на сайте с пакетом SimpleSearch

    Простая и симпатичная галерея fancybox

    Подсчет и вывод количества потомков ресурса в MODX

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

    Вывод tv-параметров в формате -

    Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

    Quip для MODX. Более рабочий вариант

    pdoResources Заготовки для работы

    Сниппет для вывода размера и расширения файла

    Простой аудио-плеер HTML5

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

    Слайдер Slick slider в контенте ресурса

    Как контролировать кэш CSS и скриптов

    Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

    Подключить MODX в стороннем PHP файле

    Простейшая авторизация

    Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

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

    Массово обновить ТВ, или другое поле через базу

    Создать свою страницу в админке

    Изменить формат номера заказа

    Сообщение о том, что сайт использует Cookie

    Получить grandparent. Вывести родитель родителя

    Симпатичный список файлов, загружаемых к ресурсу через MIGX

    Установить шаблон по-умолчанию для новых, создаваемых ресурсов

    Вывести все доступные плейсхолдеры

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

    Отредактировать шаблон письма

    Добавить скрипт перед тегом body

    Общая сумма по каждому товару в корзине Minishop2

    Создать раздел с паролем на сайте MODX

    Что делать если ее приходит почта администратору

    Фильтрация по TV параметрам в msProducts

    Дата на русском

    FontAwesome - часто используемые иконки для шаблонов MODX

    Создать пакет с пользовательской таблицей

    Заготовки для работы

    Курсы валют с cbr.ru на PHP

    Загрузка сниппета после загрузки страницы через AjaxSnippet

    getResources заготовки

    Обязательный чекбокс при оформлении заказа

    Обработка остатков заказа в miniShop2

    Соответствие названия классов с названиями таблиц в MySQL

    Разбить вывод pdoResources на несколько колонок (блоков)

    Баннеры с использованием BannerY

    Обновить alias (псевдоним) у всех ресурсов

    CSS для постраничной навигации pdoPage

    Вывести время загрузки (формирования) страницы

    Расширить таблицу site_content (объект modResource) за 5 минут

    Вырезать кавычки — фильтр-сниппет MODX

    Счетчик посещений и скачиваний для сортировки ресурсов

    Бесплатная доставка от 5000 рублей в MiniShop2

    Динамическое поле emailSubject в FormIt

    Скрыть информацию о том, что сайт работает на MODX

    Отсортировать ресурсы по количеству комментариев Quip MODx

    Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

    Создать редирект через autoRedirector API

    Ответ для сервиса moneta.ru

    Cортировать по списку id в pdoResources и pdoTools

    Вывести 404 ошибку по настройке TV MODX

    Email сделать не обязательным полем

    Как разместить исходный код сниппета на сайте, в документации

    Ускорить установку MODX revo до пары кликов

    Постраничная навигация — набор параметров и CSS PdoPage

    Сделать все элементы статичными для Git и IDE

    Не работает подгрузка товаров ajax mfilter2 на мобильном

    Сделать поле размер обязательным

    Настройка стилей для комментариев Tickets

    Подключить текстовой редактор к доп. полям ресурса

    Кастомный чанк для AdminPanel

    Динамическая замена шаблона ресурса - плагин

    Разместить корзину внутри блока с оформлением заказа

    Плагин для формирования замороженных URL с редиректом

    xPDO Выборка из одной таблицы с зацепкой значения из другой

    Приветственный экран / заглушка на сайт

    Вложенные условия в xPDO MODX

    Вывести список всех родителей в ТВ поле ресурса

    Как получить данные пользователя сразу после авторизации через API

    Вывести список всех емэйлов miniShop2

    Если getParentIds не работает в плагине

    Контролировать кэширование файлов CSS и JS MiniShop2

    Не приходят / не отправляются письма - в чем причина?

    Кэширование в MODX: использование $modx->cacheManager

    Наш сайт использует куки, нажмите «ОК» если вы не против
    OK