Главная страница новостного сайта?

Здравствуйте, уважаемое сообщество!
Подскажите, как решить задачу.

Решил сделать главную страницу по типу новостной, как у Яндекс новостей.
На главной есть тематические виджеты (Экономика, Спорт, Культура и т. д.) и вверху виджет “Главные новости“.
Задача, нужно сделать так, если новость находится в виджете “Главные новости“, то она исключается из тематического виджета.

Подходящего готового решения в интернете не нашел.

Решил определиться с алгоритмом, мой вариант такой.
Сделать отдельную табличку, куда буду записывать id ресурсов, которые будут попадать в виджет “Главные новости”.
Сделать плагин, который перед сохранением, будет дописывать туда id нового ресурса и один старый удалять.

Каждый виджет выводит отдельный pdoResources, где настраиваю &where таким образом, что бы он обращался к данной табличке. В “Главных новостях”, pdoResources выводит те ресурсы id которых содержатся в табличке, а в тематических виджетах, наоборот не выводит ресурсы id которых записаны в таблицу.

Скажите, правильно ли я мыслю, и вообще можно в &where написать условие, что бы оно анализировало стороннюю таблицу?
Александр Наумов
16 марта 2016, 08:03
modx.pro
1 703
0

Комментарии: 6

Дмитрий Кондаков
16 марта 2016, 11:43
+1
Можно сделать так: продублировать вывод сниппета вывода главных новостей, но с параметром returnids=`1` и toPlaceholder=`excludeIDs`, а в остальные виджеты добавить where условие id:not in[ [[+excludeIDs]] ]
Іван Клімчук
16 марта 2016, 12:52
+2
Как-то переусложнено. Делаете TV «Главная новость» в виде чекбокса, в вызовах где есть виджеты используете TV фильтр tvFilters, которые исключает все заметки, где Главная новость == true.
    Александр Наумов
    16 марта 2016, 13:27
    0
    Иван, спасибо за идею! Единственное, что меня настораживает в таком варианте, — это скорость, ведь плагину нужно будет не только поставить галочку к новым ресурсам, но и отключить ее у старых (отживших), и чем ресурсов будет больше, тем скорость ниже. Если не делать плагин, то тогда помимо сохранения нового ресурса, нужно еще будет пересохранять отживший ресурс, что бы убрать галочку, а иначе он не попадет в тематический виджет.
      Іван Клімчук
      16 марта 2016, 13:37
      +1
      Количество галочек на скорости практически не отобразится, так как таблица со значениями TV компактная и с проставленными индексами, плюс у вас же будет limit + сортировка по дате. Если сомневайтесь, по получите итоговый SQL, включив showLog=1 и прогоните через explain в phpmyadmin или еще где либо. Т.е. в главные новости будет попадать только N последних новостей, хотя отмечено может быть много.
      Если мусор хочется почистить иногда, то можете создать скрипт, который будет выбирать новости старше N дней и убирать с них галку Главная новость и запускать такой скрипт в cron раз в сутки.
      Парится по поводу того, что не попадет в тематический виджет, не стоит. Потому что в них тоже будут новости и количество их будет лимитировано. Допустим была главная новость в экономике, она больше не главная, но за это время добавилось 5 новостей в раздел Экономика, а виджет показывает только 5 штук. Следовательно она и так не попадет в виджет. Т.е. временные отрезки и там и там одинаковы, а учитывая, что главные новости добавляются реже, то к моменту потери актуальности они будут далеко в конце ленты. А если какую-то новость нужно таки снять с главной прямо сейчас, то это уже будет в ручном режиме происходить.
      Вариант с пересохранением отживших новостей через плагин не самый подходходящий, так как вы не знаете точное количество главных новостей сегодня (их может вообще не быть).
        Александр Наумов
        16 марта 2016, 14:21
        0
        Для себя я почему-то решил, что после главных новостей, они должны попадать в тематические. Если этого не делать, то такой вариант, конечно, самый простой и быстрый в реализации. Спасибо, взял на заметку!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6