Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость

Плагин Comlist

  • 353 просмотра
  • 13 июня, 2023
  • Обновлено: 16 октября, 2023
  • admin
  • Время чтения: 4 минуты
  • 2 (Подробно)

Плагин предназначен для создания списков (виджетов) комментариев и их глобального вывода на сайте. Виджеты генерятся с помощью функции 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. Это нечастое требование
  2. Традиционно эти опции не учитывают вложенных подразделов
  3. Реализация возможна без дополнительного функционала и перегрузки количества аргументов функции

Вариант 1

  1. Убедимся, что части first.black_white и query.black_white плагина подключены и активны
  2. Используем вызов функции 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.

Аватар

6. admin

  • 02.03.2024 21:53

Проверить {PAGE_ROW_NUM}

Аватар

5. Kabak

  • 16.01.2024 19:14

Как правильно проверить в TPL наличие хоть одного комментария ?

Аватар

4. admin

  • 15.11.2023 15:42

Да, только надо правильно указать имя функции и указать имя шаблона:

{PHP|sedby_comlist('comlist', '4', 'RAND()', '-0regusers;for_admin;government;documents;articles;system', '1')}

Аватар

3. Алексей

  • 15.11.2023 15:33

{PHP|sedby_('', '4', 'RAND()', '-0regusers;for_admin;government;documents;articles;system', '1')}

Это правильная конструкция для черного списка?

for_admin, government, documents, articles, system - не должны выводиться

Аватар

2. admin

  • 19.09.2023 20:18

{PHP|sedby_comlist(‘comlist’, 3, 'RAND()'}

Аватар

1. Алексей

  • 19.09.2023 18:50

Как выборку random запустить?

Новый комментарий

Имя:
Для редактирования комментария осталось 10 минут