Главная страница новостного сайта?
Здравствуйте, уважаемое сообщество!
Подскажите, как решить задачу.
Решил сделать главную страницу по типу новостной, как у Яндекс новостей.
На главной есть тематические виджеты (Экономика, Спорт, Культура и т. д.) и вверху виджет “Главные новости“.
Задача, нужно сделать так, если новость находится в виджете “Главные новости“, то она исключается из тематического виджета.
Подходящего готового решения в интернете не нашел.
Решил определиться с алгоритмом, мой вариант такой.
Сделать отдельную табличку, куда буду записывать id ресурсов, которые будут попадать в виджет “Главные новости”.
Сделать плагин, который перед сохранением, будет дописывать туда id нового ресурса и один старый удалять.
Каждый виджет выводит отдельный pdoResources, где настраиваю &where таким образом, что бы он обращался к данной табличке. В “Главных новостях”, pdoResources выводит те ресурсы id которых содержатся в табличке, а в тематических виджетах, наоборот не выводит ресурсы id которых записаны в таблицу.
Скажите, правильно ли я мыслю, и вообще можно в &where написать условие, что бы оно анализировало стороннюю таблицу?
Подскажите, как решить задачу.
Решил сделать главную страницу по типу новостной, как у Яндекс новостей.
На главной есть тематические виджеты (Экономика, Спорт, Культура и т. д.) и вверху виджет “Главные новости“.
Задача, нужно сделать так, если новость находится в виджете “Главные новости“, то она исключается из тематического виджета.
Подходящего готового решения в интернете не нашел.
Решил определиться с алгоритмом, мой вариант такой.
Сделать отдельную табличку, куда буду записывать id ресурсов, которые будут попадать в виджет “Главные новости”.
Сделать плагин, который перед сохранением, будет дописывать туда id нового ресурса и один старый удалять.
Каждый виджет выводит отдельный pdoResources, где настраиваю &where таким образом, что бы он обращался к данной табличке. В “Главных новостях”, pdoResources выводит те ресурсы id которых содержатся в табличке, а в тематических виджетах, наоборот не выводит ресурсы id которых записаны в таблицу.
Скажите, правильно ли я мыслю, и вообще можно в &where написать условие, что бы оно анализировало стороннюю таблицу?
Комментарии: 6
Можно сделать так: продублировать вывод сниппета вывода главных новостей, но с параметром returnids=`1` и toPlaceholder=`excludeIDs`, а в остальные виджеты добавить where условие id:not in[ [[+excludeIDs]] ]
Дмитрий, спасибо! Попробую сделать, как вы говорите.
Как-то переусложнено. Делаете TV «Главная новость» в виде чекбокса, в вызовах где есть виджеты используете TV фильтр tvFilters, которые исключает все заметки, где Главная новость == true.
Иван, спасибо за идею! Единственное, что меня настораживает в таком варианте, — это скорость, ведь плагину нужно будет не только поставить галочку к новым ресурсам, но и отключить ее у старых (отживших), и чем ресурсов будет больше, тем скорость ниже. Если не делать плагин, то тогда помимо сохранения нового ресурса, нужно еще будет пересохранять отживший ресурс, что бы убрать галочку, а иначе он не попадет в тематический виджет.
Количество галочек на скорости практически не отобразится, так как таблица со значениями TV компактная и с проставленными индексами, плюс у вас же будет limit + сортировка по дате. Если сомневайтесь, по получите итоговый SQL, включив showLog=1 и прогоните через explain в phpmyadmin или еще где либо. Т.е. в главные новости будет попадать только N последних новостей, хотя отмечено может быть много.
Если мусор хочется почистить иногда, то можете создать скрипт, который будет выбирать новости старше N дней и убирать с них галку Главная новость и запускать такой скрипт в cron раз в сутки.
Парится по поводу того, что не попадет в тематический виджет, не стоит. Потому что в них тоже будут новости и количество их будет лимитировано. Допустим была главная новость в экономике, она больше не главная, но за это время добавилось 5 новостей в раздел Экономика, а виджет показывает только 5 штук. Следовательно она и так не попадет в виджет. Т.е. временные отрезки и там и там одинаковы, а учитывая, что главные новости добавляются реже, то к моменту потери актуальности они будут далеко в конце ленты. А если какую-то новость нужно таки снять с главной прямо сейчас, то это уже будет в ручном режиме происходить.
Вариант с пересохранением отживших новостей через плагин не самый подходходящий, так как вы не знаете точное количество главных новостей сегодня (их может вообще не быть).
Если мусор хочется почистить иногда, то можете создать скрипт, который будет выбирать новости старше N дней и убирать с них галку Главная новость и запускать такой скрипт в cron раз в сутки.
Парится по поводу того, что не попадет в тематический виджет, не стоит. Потому что в них тоже будут новости и количество их будет лимитировано. Допустим была главная новость в экономике, она больше не главная, но за это время добавилось 5 новостей в раздел Экономика, а виджет показывает только 5 штук. Следовательно она и так не попадет в виджет. Т.е. временные отрезки и там и там одинаковы, а учитывая, что главные новости добавляются реже, то к моменту потери актуальности они будут далеко в конце ленты. А если какую-то новость нужно таки снять с главной прямо сейчас, то это уже будет в ручном режиме происходить.
Вариант с пересохранением отживших новостей через плагин не самый подходходящий, так как вы не знаете точное количество главных новостей сегодня (их может вообще не быть).
Для себя я почему-то решил, что после главных новостей, они должны попадать в тематические. Если этого не делать, то такой вариант, конечно, самый простой и быстрый в реализации. Спасибо, взял на заметку!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.