Здравствуйте. Скажите, как запретить пользователям отвечать на комментарий?
Я думаю можно было бы просто убрать ссылку, но это решение не будет достаточно хорошим. Как совсем запретить отвечать на комментарии?
Причем просто писать комментарий любой желающий может.
Комментарии
Что значит "отвечать на комментарии" ?
Вы имеете в виду древовидную структуру с наличием описанной вами ссылки в каждом комментарии ?
Да. Имею ввиду именно это. Возможность "Ответить" должна быть только у администратора.
Но просто написать комментарий может любой.
Я могу скрыть ссылку. Но также нужно запретить вообще отвечать. (Иначе кто-либо сможет прописать ссылку и всё-таки ответить).
Есть такая идея: перекрыть путь к форме ответа на комментарий через views. Не знаю, получится это или нет. Но если и получится - тоже не очень хорошее решение. Подскажите пожалуйста, как всё таки запретить доступ к этому разделу (ответ на комментарий) для анонимов?
А отменить формирование ссылки не пробовали ?
Имеете ввиду "unset"? На данный момент часть реализована через него. Но страница по адресу (если ввести руками) всё равно отображается.
Накидал условие , посмотрите еще варианты .
global $user; //================Добавлено=====================
// Set the breadcrumb trail.
drupal_set_breadcrumb(array(l(t('Home'), NULL), l($node->title, 'node/' . $node->nid)));
$op = isset($_POST['op']) ? $_POST['op'] : '';
$build = array();
// The user is previewing a comment prior to submitting it.
if ($op == t('Preview')) {
if (user_access('post comments')) {
$build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) array('pid' => $pid, 'nid' => $node->nid));
}
else {
drupal_set_message(t('You are not authorized to post comments.'), 'error');
drupal_goto("node/$node->nid");
}
}
else {
// $pid indicates that this is a reply to a comment.
if ($pid) {
//if (user_access('access comments')) { //==================Было==================
if (in_array('administrator', $user->roles)) { //============Стало=================
// Load the comment whose cid = $pid
$comment = db_query('SELECT c.*, u.uid, u.name AS registered_name, u.signature, u.signature_format, u.picture, u.data FROM {comment} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = :cid AND c.status = :status', array(
':cid' => $pid,
':status' => COMMENT_PUBLISHED,
))->fetchObject();
if ($comment) {
// If that comment exists, make sure that the current comment and the
// parent comment both belong to the same parent node.
if ($comment->nid != $node->nid) {
// Attempting to reply to a comment not belonging to the current nid.
drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
drupal_goto("node/$node->nid");
}
// Display the parent comment
$comment->node_type = 'comment_node_' . $node->type;
field_attach_load('comment', array($comment->cid => $comment));
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$build['comment_parent'] = comment_view($comment, $node);
}
else {
drupal_set_message(t('The comment you are replying to does not exist.'), 'error');
drupal_goto("node/$node->nid");
}
}
else {
drupal_set_message(t('You are not authorized to view comments.'), 'error');
drupal_goto("node/$node->nid");
}
}
// This is the case where the comment is in response to a node. Display the node.
elseif (user_access('access content')) {
$build['comment_node'] = node_view($node);
}
// Should we show the reply box?
if ($node->comment != COMMENT_NODE_OPEN) {
drupal_set_message(t("This discussion is closed: you can't post new comments."), 'error');
drupal_goto("node/$node->nid");
}
elseif (user_access('post comments')) {
$edit = array('nid' => $node->nid, 'pid' => $pid);
$build['comment_form'] = drupal_get_form("comment_node_{$node->type}_form", (object) $edit);
}
else {
drupal_set_message(t('You are not authorized to post comments.'), 'error');
drupal_goto("node/$node->nid");
}
}
return $build;
}
Большое спасибо HydroBlast. Не подскажете, где это нужно изменить/куда вставить?
Это часть comment.pages.inc , модуль comment в ядре.
И это не конечный результат , но работать будет .
Я бы не советовал использовать это на постоянной основе .
Да, ядро править не хочется... Как-то нужно это сделать через модуль.