[Plugin] Comlist
Главная / Форумы / Форумы сообщества / Расширения / [Plugin] ComlistПлагин вывода комментариев через функцию по условиям (аргументам)
Автор | Сообщение |
---|---|
admin Администратор | [Plugin] Comlist
Плагин вывода комментариев по условиям. Фактически создан вокруг функции sedby_comlist(). |
Благодарности отсутствуют | |
Крамер Участник | Re: [Plugin] Comlist
Добрый вечер. Интересный плагин. Расскажите как в нем реализовано кэширование. |
Благодарности отсутствуют | |
admin Администратор | Re: [Plugin] Comlist Добрый день. Кэширование включается присваиванием переменной $enableCache значения true. Это происходит при выполнении всех следующих условий:
Далее при включенном кэше и присутствии в таблице cot_cache базы данных записи с именем $cache_name содержимое данной записи будет возвращено функцией sedby_comlist() в точку ее вызова. Если в таблице cot_cache данной записи не найдено, функция полностью отработает. Если кэш включен, аргумент $pagination имеет пустое значение, и количество выведенных в основном цикле элементов больше нуля, будет сформирована запись в таблицу cot_cache. |
Поблагодарили: 1 | |
Крамер Участник | Re: [Plugin] Comlist
Понятно. А для чего поиск пробелов в имени записи кэша? |
Благодарности отсутствуют | |
admin Администратор | Re: [Plugin] Comlist #19 Крамер: А это на случай вызова типа: {PAGE_SOME_EXTRAFIELD|sedby_comlist('comlist', '5', 'com_date DESC', '', '1', '0', '', '', $this, '86400')} Если в таком экстраполе присутствует пробел, то имя кэша будет тоже с пробелом. В принципе, проверял, работает. Но для уверенности лучше от пробелов избавляться. |
Поблагодарили: 1 | |
Джанго Участник | Re: [Plugin] Comlist Спасибо за плагин, все замечательно работает. Один главный вопрос: если включаю аякс, пропадает разметка паджинатора. Я изначально переопределяю ее через ресурсы, и при формировании страницы она выводится нормально. Но при аякс-переходе моя разметка теряется, и используется дефолт. Как это исправить? |
Поблагодарили: 1 | |
admin Администратор | Re: [Plugin] Comlist
#22 Джанго: Если коротко, то алгоритм следующий: Выносим кастомную разметку паджинатора в отдельный ресурс-файл и подключаем его в теме require_once cot_incfile('ottawa', 'theme', 'rc.pagination'); В ajax-части плагина comlist присутствует хук comlist.ajax.first. Через него аналогичным образом подключаем нашу паджинацию для ajax-ответа: require_once cot_incfile('ottawa', 'theme', 'rc.pagination'); Подробно расписал здесь. Отредактировано: admin (26.09.2023 17:45, 1 год назад) |
Благодарности отсутствуют | |
admin Администратор | Re: [Plugin] Comlist К вопросу о реализации вывода в зависимости от группы пользователя. Как это можно сделатьПрежде всего, структура таблицы cot_com: /* Comments schema */ -- Main comments table CREATE TABLE IF NOT EXISTS `cot_com` ( `com_id` int UNSIGNED NOT NULL auto_increment, `com_code` varchar(255) NOT NULL, `com_area` varchar(64) NOT NULL, `com_author` varchar(100) NOT NULL DEFAULT '', `com_authorid` int UNSIGNED NOT NULL, `com_authorip` varchar(64) NOT NULL DEFAULT '', `com_text` text NOT NULL, `com_date` int UNSIGNED NOT NULL DEFAULT '0', `com_count` mediumint UNSIGNED NOT NULL DEFAULT '0', -- Not using anywhere `com_isspecial` tinyint UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`com_id`), KEY (`com_area`, `com_code`) ); Как видим, привязка к объекту идет через условную зону (com_area) и код / ID объекта (com_code). Это означает, что для страницы, например, это может, например, быть page и 20 соответственно, т. е. страница с ID 20. Даже привязка к разделу не предусматривается (я этот вопрос обсуждал с Алексом, но решили что это излишняя информация). И не забываем о том, что комментарии могут привязываться не только к страницам, но и к разделам и любым другим объектам. Также не забываем и то, что групп у пользователя может быть несколько. И права доступа в Cotonti реализуются не на уровне конечных объектов (страниц), а на уровне разделов, в которых они размещаются. Вывод следующий: для того, чтобы реализовать возможность выводить комментарии в зависимости от группы пользователя, необходимом через хук Надо ли это делать?При большом желании можно натянуть сову на глобус. Вопрос лишь в том, стоит ли оно того. Комментарии в данном случае (или для данной задачи) не самый лучший функционал. Логичнее было бы воспользоваться форумами и ограничивать доступ на уровне веток. В любом случае, указание группы пользователя – не лучший вариант. Скорее в расширении необходимо реализовывать функционал, ограничивающий любому пользователю доступ к любой выводимой информации в соответствии с его правами в системе. А это, к слову, сразу же убьет возможность кэширования. В данном конкретном случае проще будет все же использовать логику в шаблоне типа: <!-- IF {PHP.usr.maingrp} == 1 --> ... <!-- ENDIF --> <!-- IF {PHP.usr.maingrp} == 2 --> ... <!-- ENDIF --> И добавить функционал по использованию черного и белого списка, поскольку уже понятно в чем необходимо ограничивать пользователей. Если не хочется все это конструировать в шаблоне, можно выводить переменную или даже TPL-тег, который будет сформирован по той же логике, но уже через PHP-код из проектного плагина. |
Поблагодарили: 1 | |
Kabak Участник | Re: [Plugin] Comlist
Я убеждён, что это делать нужно. 1) Если существует единая система достука к информации в движке, то все плагины претендующие на качество обязаны формировать данные отображаемые пользователю в соответствии с его правами. 2) Разделов форума, разделов страниц и различных групп пользоватлей на сайте может быть очень много и перечислять вариации - сочетания ( которых может быть совсем много ) в TPL - это и есть громоздкий костыль. Плагин классный, но это - косяк. - Нет возможности формировать список отдаваемых данных в соответствии с правилами по информации самого движка. Это должно быть по умолччанию в пободных функциях - отдача данных в соответствии с уровнем доступа к данным в движке. Это не сова на глобус, простите.
Я понимаю, что сложно внутри функции получить уровень смотрящего страницу. Но нужно сделать возможность передать тег {PHP.usr.maingrp} в вызов функции в TPL и на базе этой цифры сформировать список отдаваемых данных
Если нет желания реализовывать, то да- едиственный выход IF в TPL Добавлено 8 часов спустя:
Да, так вот былобы здорово, чтобы плагины использовали эти права и создавали списки исходя из этих прав доступа, а не через костыли.
Это один из огромных косяков разработчиков движка - не использование прав доступа Cotonti при генерации списков информации. Городить ещё одну систему с правами доступа в TPL Отредактировано: Kabak (17.09.2024 21:00, 2 недели назад) |
Благодарности отсутствуют | |
admin Администратор | Re: [Plugin] Comlist Если я правильно понимаю, твоя задача состоит в том, чтобы:
Небольшим плагином можно сформировать волшебную переменную <!-- IF {PHP.viewAllComments} === true --> // Стандартный вызов sedby_comlist() <!-- ELSE --> // Вызов в режиме черного списка <!-- ENDIF --> Просто и доступно. И никаких последствий. Я видал конструкции и похлеще. В качестве альтернативы хуком В самой функции Есть еще пара более сложных вариантов, но и трех уже достаточно для того, чтобы за 15 минут или чуть более решить твой вопрос. На оставшиеся деньги – вместо рефлексирования – можно сделать что-то полезное для коммьюнити или для своего сайта. Но мы делаем то, что привыкли делать. К сожалению. Если в плагине [на твой взгляд] косяк, а его автор не спешит его исправлять, удаляй P.S. P.P.S. Одна ветка – одна истерика. Больше здесь нельзя. |
Поблагодарили: 1 | |
Kabak Участник | Re: [Plugin] Comlist
Нет, как раз моя задача чтобы без дополнительных танцев, всё выводилось в соответствии с правами пользователя и чтобы я не правил TPL при создании ещё одной группы пользователей. Да, пока групп мало всё как бы работает, но такой метод фильтрации комментариев выгладит костылём учитывая, что в движке интегрирована система привилегий. Вероятно, её изначально не предусмотрели для комментариев. Если всё привязывается к разделам, то и комментарии должен хранить в каком разделе он доступен для показа.
Конструктивненько. Собственно, все так и сделали. Вы к этому шли все эти долгие годы вашего творчества ? ( риторический )
Я может резковато высказываюсь... |
Благодарности отсутствуют | |
admin Администратор | Re: [Plugin] Comlist Твоя задача состоит в том, чтобы решать проблемы быстро и просто, а не возбуждаться на якобы “возрастающее количество групп”. Костыль был во времена LDU, когда для каждой страницы настраивалась система доступов. Возможно и для комментариев. Почему от этого ушли? Потому, что нерационально: предположу, что конфиги в БД раздувались сверх меры для многостраничных сайтов. Система прав для разделов компактнее, проще и – поэтому – эффективнее. Хочешь реализовать свой вариант – никто за уши не держит. Пиши плагин и делись им с коммьюнити. Еще раз: в виде расширений возможно все. Но если для тебя Котонти должен быть швейцарским ножом для любых хотелок, подтянутся еще пятеро, и он перестанет быть компактным и быстрым. По поводу всех ушедших всепропальщиков: не видел я ни одного сообщения о том, что на WP или J! люди добились чего-то большего, чем на Cotonti. Так что вывод простой: да, народ ушел, но не на другие движки, а в менеджеры среднего звена продавать автопокрышки. И дело здесь далеко не в Котонти. Больше всего сайтов я сделал именно во время исхода, когда “ковыряльщики” сыпали проклятия в адрес девтима за отсутствие обновлений. И вообще, по поводу альтернатив: в самом-то деле, ты проверь что у них там с комментариями. И, хотя бы теоретически, можно ли на том же WP сделать то, что мы без каких-либо проблем вообще сделали на Котонти? А может там есть хоть один плагин с разделением прав на просмотр комментариев? Тогда или везде косяки или гранаты не той системы. И по существу снова: неразумно нагибать какой-либо функционал под свои нужны. И в ядре и в плагинах есть все необходимое для модификаций. А если упорно не подходит, думай и делай то, что подойдет. Последнее:
Дальше все удаляю. |
Поблагодарили: 1 |