[ЧАСТИЧНО РЕШЕНО] Как скрыть форму комментирования в зависимости от условия

Прислано: Stutzer

ср, 15/04/2009 - 19:55

Другие статьи по теме:

Добрый вечер!

Подскажите, пожалуйста, в какую сторону смотреть. Я пишу модуль, который определяет новый тип контента. При создании ноды данного типа, автор может определить пользователей, которые имеют право комментировать данную запись. Для остальных данная нода и комментарии к ней доступны в режиме «ридонли».

Для решения этой задачи я набросал следующий todo-лист:
1. Удалить ссылку «Добавить комментарий» и «Ответить» для пользователей вне списка [РЕШЕНО]
2. Закрыть доступ к отдельной странице с формой комментирования в случае, если расположение формы отправки комментария переключено в режим «Показывать на отдельной странице» [РЕШЕНО ЧАСТИЧНО]
3. Не выводить форму комментирования на страницу ноды (в случае, если расположение формы отправки комментария переключено в режим «Показывать ниже сообщения или комментариев» [НЕ РЕШЕНО]
4. Реализовать повторную проверку прав на размещение комментария при валидации формы комментирования [РЕШЕНО]

Итак, возникает вопрос, как справится с третьим пунктом? Желательно не прибегая к темизации.

Комментарии


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

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано elia в чт, 16/04/2009 - 11:17.

а как решены пункты 1 и 4? Правкой comment.module?


Опубликовано neochief в чт, 16/04/2009 - 15:39.

Простым решением было бы обнуление формы на 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().


Опубликовано Stutzer в чт, 16/04/2009 - 18:24.

2 neochief:
Спасибо, будем пробовать. Через hook_form_alter я уже пробовал и, все верно, — остается заголовок «Отправить комментарий»
Ещё попутный вопрос: я не разобрался пока как модуль комментариев интегрируется в ноду? Вроде как логично, если бы это делалось через hook_nodeapi, но похоже это как-то по другому сделано.

2 elia:
Нет, пытаюсь делать все в стиле «Drupal way» через хуки.


Опубликовано neochief в чт, 16/04/2009 - 20:43.

Комменты добавляются к ноде уже после того как она оттемлена в node_show() и никакого способа на них повлиять в том месте нету — выше в цепочке коллбек меню. Соответственно, кроме как извращаться предложенным мною методом, ничего не остается. Но, по крайней мере, это хоть и раскорчившись, но реализуемо. Если надо, я могу объяснить, что мой код делает и на что это влияет.


Опубликовано Stutzer в чт, 16/04/2009 - 21:05.

Спасибо, на сколько я понял, он в случае отсутствия прав на комментирования «переносит» форму комментирования на отдельную страницу. Вавиант, хотя конечно и не совсем изящный )


Опубликовано Stutzer в чт, 16/04/2009 - 23:02.

neochief, спасибо, ваше решение работает. Хотя мне не понятно, в таком случае, почему не работает мое (см код, 7-я закомментированная строка)

<?php
function consult_nodeapi(&$node$op) {
  global 
$user$conf;
  switch (
$op) {
    case 
'alter':
      if ( 
$user->uid != ) {
        
$conf['comment_form_location_'$node->type] = COMMENT_FORM_SEPARATE_PAGE;
        
//$conf['comment_'. $node->type] = COMMENT_NODE_READ_ONLY;
      
}
      break;
  }
}
?>


Опубликовано neochief в пт, 17/04/2009 - 00:59.

Думаю потому, что вы не уловили где происходит вся магия :)

Она происходит в конце функции comment_render(). Обратите внимание на то, какие условия я убиваю своим кодом, и на то, чем в сущности определяется READ_ONLY для конкретной ноды. Переменные 'comment_'. $node->type определяют значения по-умолчанию для соответствующего селекта в форме ноды, не больше.


Новое на сайте

Ссылки партнёров