Добро пожаловать на сайт SEDBY

[Plugin] Comlist

Главная / Форумы / Форумы сообщества / Расширения / [Plugin] Comlist

Плагин вывода комментариев через функцию по условиям (аргументам)

Автор Сообщение
admin
Аватар

Администратор
Сообщения: 77

[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 реализуются не на уровне конечных объектов (страниц), а на уровне разделов, в которых они размещаются.

Вывод следующий: для того, чтобы реализовать возможность выводить комментарии в зависимости от группы пользователя, необходимом через хук comlist.query модифицировать запрос (а конкретно переменную $sql_cond) таким образом, чтобы исключить из него комментарии к страницам, к разделам которых у группы данного пользователя нет доступа.

Надо ли это делать?

При большом желании можно натянуть сову на глобус. Вопрос лишь в том, стоит ли оно того. Комментарии в данном случае (или для данной задачи) не самый лучший функционал. Логичнее было бы воспользоваться форумами и ограничивать доступ на уровне веток.

В любом случае, указание группы пользователя – не лучший вариант. Скорее в расширении необходимо реализовывать функционал, ограничивающий любому пользователю доступ к любой выводимой информации в соответствии с его правами в системе. А это, к слову, сразу же убьет возможность кэширования.

В данном конкретном случае проще будет все же использовать логику в шаблоне типа:

<!-- IF {PHP.usr.maingrp} == 1 -->
...
<!-- ENDIF  -->

<!-- IF {PHP.usr.maingrp} == 2 -->
...
<!-- ENDIF  -->

И добавить функционал по использованию черного и белого списка, поскольку уже понятно в чем необходимо ограничивать пользователей.

Если не хочется все это конструировать в шаблоне, можно выводить переменную или даже TPL-тег, который будет сформирован по той же логике, но уже через PHP-код из проектного плагина.

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