[ЧАСТИЧНО РЕШЕНО] Как скрыть форму комментирования в зависимости от условия
Прислано: Stutzer
ср, 15/04/2009 - 19:55
Добрый вечер!
Подскажите, пожалуйста, в какую сторону смотреть. Я пишу модуль, который определяет новый тип контента. При создании ноды данного типа, автор может определить пользователей, которые имеют право комментировать данную запись. Для остальных данная нода и комментарии к ней доступны в режиме «ридонли».
Для решения этой задачи я набросал следующий todo-лист:
1. Удалить ссылку «Добавить комментарий» и «Ответить» для пользователей вне списка [РЕШЕНО]
2. Закрыть доступ к отдельной странице с формой комментирования в случае, если расположение формы отправки комментария переключено в режим «Показывать на отдельной странице» [РЕШЕНО ЧАСТИЧНО]
3. Не выводить форму комментирования на страницу ноды (в случае, если расположение формы отправки комментария переключено в режим «Показывать ниже сообщения или комментариев» [НЕ РЕШЕНО]
4. Реализовать повторную проверку прав на размещение комментария при валидации формы комментирования [РЕШЕНО]
Итак, возникает вопрос, как справится с третьим пунктом? Желательно не прибегая к темизации.
- Stutzer's blog
- Для комментирования войдите или зарегистрируйтесь
а как решены пункты 1 и 4? Правкой comment.module?
- Для комментирования войдите или зарегистрируйтесь
Простым решением было бы обнуление формы на hook_form_alter, но в таком случае все-равно останется заголовок Post new comment.
Более сложное решение:
Определить hook_nodeapi, в нем на $op == alter написать такое:
global $conf; if (!user_access('post comments to my node type')) { $conf['comment_form_location_'. $node->type] = COMMENT_FORM_SEPARATE_PAGE; }
См. comment_render() и variable_get().
- Для комментирования войдите или зарегистрируйтесь
2 neochief:
Спасибо, будем пробовать. Через hook_form_alter я уже пробовал и, все верно, — остается заголовок «Отправить комментарий»
Ещё попутный вопрос: я не разобрался пока как модуль комментариев интегрируется в ноду? Вроде как логично, если бы это делалось через hook_nodeapi, но похоже это как-то по другому сделано.
2 elia:
Нет, пытаюсь делать все в стиле «Drupal way» через хуки.
- Для комментирования войдите или зарегистрируйтесь
Комменты добавляются к ноде уже после того как она оттемлена в node_show() и никакого способа на них повлиять в том месте нету — выше в цепочке коллбек меню. Соответственно, кроме как извращаться предложенным мною методом, ничего не остается. Но, по крайней мере, это хоть и раскорчившись, но реализуемо. Если надо, я могу объяснить, что мой код делает и на что это влияет.
- Для комментирования войдите или зарегистрируйтесь
Спасибо, на сколько я понял, он в случае отсутствия прав на комментирования «переносит» форму комментирования на отдельную страницу. Вавиант, хотя конечно и не совсем изящный )
- Для комментирования войдите или зарегистрируйтесь
neochief, спасибо, ваше решение работает. Хотя мне не понятно, в таком случае, почему не работает мое (см код, 7-я закомментированная строка)
<?php
function consult_nodeapi(&$node, $op) {
global $user, $conf;
switch ($op) {
case 'alter':
if ( $user->uid != 1 ) {
$conf['comment_form_location_'. $node->type] = COMMENT_FORM_SEPARATE_PAGE;
//$conf['comment_'. $node->type] = COMMENT_NODE_READ_ONLY;
}
break;
}
}
?>- Для комментирования войдите или зарегистрируйтесь
Думаю потому, что вы не уловили где происходит вся магия :)
Она происходит в конце функции comment_render(). Обратите внимание на то, какие условия я убиваю своим кодом, и на то, чем в сущности определяется READ_ONLY для конкретной ноды. Переменные 'comment_'. $node->type определяют значения по-умолчанию для соответствующего селекта в форме ноды, не больше.
- Для комментирования войдите или зарегистрируйтесь




Комментарии