Плагин Comlist
Популярные запросы: тема Omnis, плагин Pagelist, Cotonti 0.9.24.2, ЧПУ, Font Face
- 530 просмотров
- 13 июня, 2023
- Обновлено: 16 октября, 2023
- admin
- Время чтения: 4 минуты
- 3 (Подробно)
Плагин предназначен для создания списков (виджетов) комментариев и их глобального вывода на сайте. Виджеты генерятся с помощью функции sedby_comlist:
sedby_comlist ( $tpl, // 01. имя шаблона (по умолчанию comlist) $items, // 02. количество записей (0 – вывести все) $order, // 03. сортировка в формате MySQL (по умолчанию "пусто" – com_id DESC) $extra, // 04. дополнительные MySQL-запросы $group, // 05. сгруппировать комментарии по страницам (по умолчанию "пусто" – без группировки) $offset, // 06. сдвиг на указанное количество записей $pagination, // 07. код паджинации для URL'ов $ajax_block, // 08. ID блока для AJAX-паджинации $cache_name, // 09. имя записи в таблице кэша $cache_ttl // 10. срок жизни кэша в секундах )
Установка плагина стандартная, для работы требуется наличие предустановленных плагинов Comments и Cotlib
Примеры использования
// Вывести 3 последних комментария {PHP|sedby_comlist('comlist', 3)} // Вывести 3 случайных комментария {PHP|sedby_comlist('comlist', 3, 'RAND()')} // Вывести 3 последних комментария, сгруппированных по страницам {PHP|sedby_comlist('comlist', 3, '', '', 1)} // Вывести последние комментарии, сгруппированные по страницам // и с паджинацией по 8 записей на страницу {PHP|sedby_comlist('comlist', 8, '', '', 1, 'compage')} // Вывести последние комментарии, сгруппированные по страницам // и с ajax-паджинацией по 8 записей на страницу {PHP|sedby_comlist('comlist', 8, '', '', 1, 'compage', 'comments_ajax')} // Вывести 5 последних комментариев к опросам {PHP|sedby_comlist('comlist', 5, '', 'com_area = "polls"')} // Вывести 5 последних комментариев к разделу docs {PHP|sedby_comlist(‘comlist’, 5, '', 'com_area = "page" and com_code = "docs"')}
Список тегов в шаблоне
Блок PAGE_ROW_:
- {PAGE_ROW_NUM} – порядковый номер
- {PAGE_ROW_ODDEVEN} – класс чет/нечет
- {PAGE_ROW_CODE_IS_NUMERIC} – выведет TRUE если поле com_code имеет числовое значение
- {PAGE_ROW_ID} – значение поля com_id
- {PAGE_ROW_CODE} – значение поля com_code
- {PAGE_ROW_AREA} – значение поля com_area
- {PAGE_ROW_AUTHORNAME} – имя автора комментария
- {PAGE_ROW_AUTHORID} – id автора комментария
- {PAGE_ROW_AUTHORIP} – ip автора комментария
- {PAGE_ROW_AUTHOR} – ссылка на профиль автора комментария для зарегистрированного автора или имя для незарегистрированного
- {PAGE_ROW_TEXT} – значение поля com_text с разметкой
- {PAGE_ROW_TEXT_PLAIN} – значение поля com_text без разметки
- {PAGE_ROW_DATE} – дата публикации комментария
- {PAGE_ROW_DATE_STAMP} – дата публикации комментария в формате timestamp
- {PAGE_ROW_NEW} – метка нового комментария (для зарегистрированного пользователя, с момента последнего входа)
Блок MAIN:
- {PAGE_TOP_NEW_COMMENTS} -- количество новых комментариев (для зарегистрированного пользователя, с момента последнего входа)
Стандартные теги паджинации:
- {PAGE_TOP_PAGINATION} – сгенеренная паджинация
- {PAGE_TOP_PAGEPREV} – ссылка на предыдущую страницу паджинации
- {PAGE_TOP_PAGENEXT} – ссылка на следующую страницу паджинации
- {PAGE_TOP_FIRST} – ссылка на первую страницу паджинации
- {PAGE_TOP_LAST} – ссылка на последнюю страницу паджинации
- {PAGE_TOP_CURRENTPAGE} – ссылка на текущую страницу паджинации
- {PAGE_TOP_TOTALLINES} – всего элементов паджинации
- {PAGE_TOP_MAXPERPAGE} – элементов на страницу паджинации
- {PAGE_TOP_TOTALPAGES} – всего страниц паджинации
Если в поле com_area указано page, присутствуют два варианта:
- если это раздел, генерятся теги {PAGE_ROW_CAT_TITLE} и {PAGE_ROW_CAT_URL} для формирования ссылки на раздел
- если это страница, генерится весь набор полей и экстраполей для данной страницы (теги PAGE_ROW_PAGE_)
Если в настройках плагина активировать опцию "Создавать теги для модуля Users", будет сформирован весьнабор полей и экстраполей для профиля автора комментария (теги PAGE_ROW_USER_)
Почему удалены аргументы black / white lists
- Это нечастое требование
- Традиционно эти опции не учитывают вложенных подразделов
- Реализация возможна без дополнительного функционала и перегрузки количества аргументов функции
Вариант 1
- Убедимся, что части first.black_white и query.black_white плагина подключены и активны
- Используем вызов функции cot_comlist с такими аргументами:
// Белый список, разделы cat1 и cat2, без вложенных подразделов {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '+0cat1;cat2')} // Белый список, разделы cat1 и cat2, с вложенными подразделами {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '+1cat1;cat2')} // Черный список, разделы cat1 и cat2, без вложенных подразделов {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '-0cat1;cat2')} // Черный список, разделы cat1 и cat2, с вложенными подразделами {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '-1cat1;cat2')} // Белый список, раздел cat1, с вложенными подразделами {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '+1cat1;')} // Белый список, раздел cat1, без вложенных подразделов {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '+0cat1;')} // Черный список, раздел cat1, с вложенными подразделами {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '-1cat1;')} // Черный список, раздел cat1, без вложенных подразделов {PHP|sedby_comlist('comlist', '5', 'com_date DESC', '-0cat1;')}
Понятно, что первый символ (+ / -) означает белый или черный список соответственно. Второй символ (0 / 1) означает включение в запрос вложенных подразделов. Далее через символ ";" перечисляем необходимые разделы.
Как сказано выше, данный функционал работает при подключении частей first.black_white и query.black_white и успешной проверке на наличие в аргументе "нештатного" символа ";".
Вариант 2
Иногда проще создавать список страниц или разделов отдельным плагином или указывать его в ресурсном файле, после чего кэшировать и отдавать функции cot_comlist() в виде аргумента. Пример использования:
// Создаем черный список страниц категории system if (Cot::$cache && Cot::$cache->db->exists('comments_blacklist', 'comlist')) $comments_blacklist = Cot::$cache->db->get('comments_blacklist', 'comlist'); else { $query = "SELECT page_id FROM " . Cot::$db->pages . " WHERE page_cat = 'system'"; $comments_blacklist = Cot::$db->query($query)->fetch(); $comments_blacklist = '(' . implode(',', $comments_blacklist) . ')'; Cot::$cache && Cot::$cache->db->store('comments_blacklist', $comments_blacklist, 'comlist', 604800); }
Созданную переменную отдаем функции cot_comlist() в шаблоне:
{PHP.comments_blacklist|sedby_comlist('comlist', '5', 'com_date DESC', 'com_code NOT IN $this')}
Приятного использования. Свои отзывы, пожелания и багрепорты отставляйте в комментариях на нашем сайте (не требуют регистрации) или в Issues на Github.
Как указать плагину - функции, чтобы формировался список с учётом номера группы того, от кого поступил запрос - просматривающего страницу ?
Чтобы можно было передать в вызов функции группу {PHP.usr.maingrp} в качестве аргумента. И функция сформировала SQL запрос соответствующим образом , с учётом группы - решение моего вопроса
Исходя из того, что ты не хочешь, никак) Откуда плагину знать что ты хочешь выводить для конкретной группы? И как множественные условия с адекватным усложнением можно реализовать в функции? Попробуй дополнительным плагином через хук определять доступ пользователя к комментируемой странице и исключать такие комментарии из выборки. Но это уже не про группы будет.
как сделать фильтрацию в зависимости от {PHP.usr.maingrp} прямо в вызове функции ?
Я не хочу плодить
<!-- IF {PHP.usr.maingrp} > 1 -->
<!-- IF {PHP.usr.maingrp} > 2 -->
и т.д.
т.е. чтобы отображаемый список формировался в зависимости от уровня смотрящего на страницу.
Проверить {PAGE_ROW_NUM}
Как правильно проверить в TPL наличие хоть одного комментария ?
Да, только надо правильно указать имя функции и указать имя шаблона:
{PHP|sedby_comlist('comlist', '4', 'RAND()', '-0regusers;for_admin;government;documents;articles;system', '1')}
{PHP|sedby_('', '4', 'RAND()', '-0regusers;for_admin;government;documents;articles;system', '1')}
Это правильная конструкция для черного списка?
for_admin, government, documents, articles, system - не должны выводиться
{PHP|sedby_comlist(‘comlist’, 3, 'RAND()'}
Как выборку random запустить?
Новый комментарий