Обязательное поле Имя для анонимного комментария

Главные вкладки

Аватар пользователя Ledniy Ledniy 11 февраля 2012 в 19:19

Как сделать поле Имя(Автор) в комментариях обязательным, для заполнения, анонимным пользователям? Смотрел в типах материалов, там поле автор нельзя изменить или удалить, что делать?

Комментарии

Аватар пользователя DenisVS DenisVS 4 ноября 2012 в 0:26

Аналогичный вопрос. Нужно сделать обязательным поле Title в комментариях.
Ну, хотя бы, поставить звёздочку.
Через comment-wrapper.tpl.php не получилось.
Строка <?php print render($content['comment_form']); ?> весь блок.

Аватар пользователя sg85 sg85 4 ноября 2012 в 4:02

для меня самое простое - через hook_form_alter при необходимых условиях ставите required для нужного поля, пример от балды
<?php
function НАЗВАНИЕ_МОДУЛЯ_form_alter(&$form, &$form_state, $form_id){
if($form_id == "НАЗВАНИЕ_ФОРМЫ"){
global $user;
$form['ИМЯ_НЕОБХОДИМОГО_ЭЛЕМЕНТА_ФОРМЫ']['#required'] = ($user->uid === 0);//И не забывайте про филдсеты(если есть)
}
}
?>
Если необходимо более интересное извращение, например, поле обязательно только при определенном значении другого поля, то нужно через этот хук добавить свой валидатор к форме и сделать уже в нем все необходимые проверки.

Что бы узнать названия форм, полей и прочего, имеет смысл поставить модуль devel, станут доступны функции dsm() dprint_r(), с ними просто гораздо удобнее, если кодинг этим куском не ограничится.

Аватар пользователя Photoshopper Photoshopper 13 апреля 2013 в 20:32

Подставляю id формы добавления комментариев comment-form, вставляют название поля Имя (name), но изменений никаких. Что не так делаю?

function module_form_alter(&$form, &$form_state, $form_id){
  if($form_id == "comment-form"){
    global $user;
    $form['name']['#required'] = ($user->uid === 0);
  }
}
Аватар пользователя sg85 sg85 14 апреля 2013 в 5:29

module - это так называется Ваш модуль?(вообще довольно странное название, прямо как автомобиль марки машина)
если да, то проверьте form_id

ах да, еще бывает полезно чистить кэш после введения(или наоборот) различных хуков.

Аватар пользователя sg85 sg85 14 апреля 2013 в 16:47

Сразу не заметил, но есть один тонкий момент: "$user->uid (String, 1 characters )", так происходит из-за того, что данные из БД возвращаются обычно в виде строк, т.е. Вы выполняете жесткое сравнение является ли строка "0" равна цифре 0(как бы 0x30 === 0), в этом случае логическое выражение всегда будет возвращать false, используйте относительное сравнение "==" вместо жесткого "===", тогда будут сравниваться только сами значения, без учета типов переменных, а можно вообще использовать логическое !$user->uid вместо сравнения.

Аватар пользователя sg85 sg85 14 апреля 2013 в 21:35

функция с хуком вообще срабатывает? как называется модуль? как называется файл, в котором находится эта функция?

Аватар пользователя Photoshopper Photoshopper 15 апреля 2013 в 14:24

я хочу сделать поле "Ваше имя" в комментариях обязательным к заполнению. Модуль правильно называется. Не первый раз кастомные модули использую

Аватар пользователя Megajack Megajack 18 июня 2013 в 16:49

Чтоб поле Имя для анонимного комментария стало обязательным, нужно:
Structure -> Content types -> Edit на нужном типе контента -> Comment settings
В поле Anonymous commenting ставим значение Anonymous must leave their contact information

Аватар пользователя dobrocode dobrocode 23 июля 2014 в 16:27
<?php
function НАЗВАНИЕ_МОДУЛЯ_form_alter(&$form, &$form_state$form_id){
  if(
$form_id == "НАЗВАНИЕ_ФОРМЫ"){//для статей comment_node_article_form
    
global $user;
    
$form['author']['name']['#required'] = ($user->uid === 0);
  }
}
?>