Делаю сайт на Drupal 7. В процессе создания сайта возникла такая задача: нужно, чтобы пользователи могли оставлять отзывы о товарах, представленных на сайте.
Комментарии выглядят наиболее подходящим кандидатом для использования в качестве отзывов: они отличаются от отзывов только названием, все остальное поведение совпадает практически один в один. А если где и не совпадает, то это можно исправить изменением настроек.

Итак, будем переименовывать комментарии в отзывы. Самый простой путь — заменить в переводах разные формы слова «коментарий» на аналогичные формы слова «отзыв». Но к сожалению на сайте кроме товаров есть так же другие типы материалов, например статьи, к котором пользователи уже могут оставлять именно комментарии, а не отзывы. То есть для одного типа материала эта сущность должна называться «Отзывы», а для остальных «Комментарии». Поэтому придется прибегнуть к более сложному способу.
Я буду показывать превращение комментариев в отзывы на примере Drupal 7, но этот способ должен подойти и для шестерки.
Для того, чтобы изменять комментарии описываемым здесь способом, нужно модифицировать тему оформления. То есть тема вами уже должна быть выбрана и установлена. Если вы используете стороннюю тему (а не собственного изготовления), то изменения лучше всего вносить не в саму тему, а создать ее подтему. В этом случае, если авторы темы выпустят обновление вам проще будет объединить изменения от авторов с вашими.
Дальше по тексту предполагается, что машинное имя типа материала товара — «product». Если у вас этот материал называется по другому, то в примерах кода замените название «product» на ваше.

Шаг 1: Обертка вокруг комментариев.

Открываем страницу с описанием товара и смотрим:



Видим надпись «Комментарии» крупным шрифтом обозначающую собственно начало радела с комментариями на странице. Заголовок комментариев на странице формируется в файле темы comment-wrapper.tpl.php. Чтобы заменить его, в нашей теме создаем папку templates, и из папки templates родительской темы копируем файл comment-wrapper.tpl.php в нашу. (Если у вашей темы нет родительской темы или уже есть файл comment-wrapper.tpl.php, тогда его копировать не нужно.) Открываем файл в текстовом редакторе. Находим в нем строки содержащие код вида
print t('Comments');
или
print t('Add new comment');
в общем всевозможные строковые литералы со словом comment внутри функции t и print. Заменяем найденные куски на код вида:

if ($node->type == 'product')
  print 'Добавить отзыв';
else
  print t('Add new comment');

Очищаем кэш, перезагружаем страницу и видим, что над отзывами у нас теперь висит заголовок «Отзывы»:



Шаг 2: Ссылки в материале

Ссылки на действия с отзывами внутри страницы («Добавить комментарий», «N комментариев», «отправлять комментарии») по прежнему ссылаются на комментарии. Ссылки формируются в файле темы node.tpl.php. Этот файл применяется по умолчанию ко всем типам материалов. Для отдельного типа материала, можно сделать свой экземпляр файла node.tpl.php: для этого его нужно скопировать и переименовать таким образом: node--contentname.tpl.php, где вместо contentname стоит машинное имя материала. Для этого типа материала теперь будет применяться этот файл.
Копируем node.tpl.php в свою подтему, переименовываем его в node--product.tpl.php и открываем в текстовом редакторе. Где нибудь ближе к началу вставляем такой кусок кода:

<?php
  if(!function_exists('ReplaceCommentToReview'))
  {
    function ReplaceCommentToReview($string)
    {
      $comments = array("комментарий", "комментария", "комментариев", "комментарии", 
                         "Комментарий", "Комментария", "Комментариев", "Комментарии");
      $reviews  = array("отзыв",       "отзыва",      "отзывов",      "отзывы",
                         "Отзыв",       "Отзыва",      "Отзывов",      "Отзывы");

      return str_replace($comments, $reviews, $string);
    }
  }
?>

Это функция заменяющая комментарии на отзывы.
Затем ищем в коде место, где формируются ссылки, оно должно выглядеть так:
print render($content['links']);
и заменяем этот кусок на такой:
print ReplaceCommentToReview(render($content['links']));
Сохраняем файл, очищаем кэш, перезагружаем страницу:



В ссылках видим отзывы. Наши изменения повлияли так же и на краткий вид материала. Достаточно посмотреть на главную страницу:



Шаг 3: Ссылки в комментариях

В конце отзывов, как и в конце материала, так же есть ссылки на изменение/добавление/удаление. Они по прежнему содержат слово «комментарии». С ними можно бороться примерно так же как и в материале. За оформление отдельных комментариев отвечает файл comment.tpl.php. Скопируйте этот файл из родительской темы в свою тему и откройте в текстовом редакторе. К сожалению нельзя сделать версию этого файла специально для заданного типа материала. Поэтому будем вставлять проверки типа материала непосредственно в коде.
Где-то в начале файла вставляем определение функции ReplaceCommentToReview:

<?php
  if(!function_exists('ReplaceCommentToReview'))
  {
    function ReplaceCommentToReview($string)
    {
      $comments = array("комментарий", "комментария", "комментариев", "комментарии", 
                         "Комментарий", "Комментария", "Комментариев", "Комментарии");
      $reviews  = array("отзыв",       "отзыва",      "отзывов",      "отзывы",
                         "Отзыв",       "Отзыва",      "Отзывов",      "Отзывы");

      return str_replace($comments, $reviews, $string);
    }
  }
?>

Затем ищем код вида:
print render($content['links']);
и заменяем его кодом:

if ($node->type == 'product')
   print ReplaceCommentToReview(render($content['links']));
else
    print render($content['links']);

Очищаем кэш, перезагружаем страницу, смотрим результат:



Шаг 4: Ответы на отзывы


Если войти на сайт под своей учетной записью и открыть страницу товара, то можно обнаружить интересный факт:



На отзыв можно написать ответ! И этот ответ тоже будет отзывом, что выглядит не логично и странно. Исправить это можно удалив ссылку «Ответить». Для этого снова открываем файл comment.tpl.php и в том месте где мы меняли код на предыдущем шаге:

if ($node->type == 'product')
    print ReplaceCommentToReview(render($content['links']));
else
    print render($content['links']);

Вставляем строчку:

if ($node->type == 'product')
{
    unset($content['links']['comment']['#links']['comment-reply']); 
    print ReplaceCommentToReview(render($content['links']));
}
else
    print render($content['links']);

Перезагружаем страницу (кэш можно не очищать), смотрим:



Ссылка «Ответить» исчезла.

Шаг 5: Заголовок формы добавления отзыва

Находясь под своей учетной записью переходим по ссылке «Добавить отзыв» (на этом сайте форма добавления отзыва находится на отдельной странице, а не в конце отзывов). И что мы видим:



В заголовке формы присутствует слово «комментарий». Более того, название формы так же есть в цепочке ссылок наверху страницы и в заголовке окна браузера. Изменение вида форм осуществляется с помощью так называемых хуков. Хук — это функция с заданным именем и набором параметров в которой проводиться дополнительная обработка данных. На разных этапах формирования страницы Drupal проверяет, определена ли для этого этапа функция-хук и если определена, то вызывает ее. Определяя хуки, можно влиять почти произвольным образом на почти любой аспект формирования страницы.
За дополнительную обработку форм в темах оформления отвечают функции-хуки вида:
THEMENAME_form_FORMID_alter(&$form, &$form_state)
где THEMENAME — имя темы, FORMID — машинное имя формы. Имя формы можно определить следующим образом: откройте код исходный код страницы и найдите там теги input типа «hidden» с именем «form_id». Значение поля value и будет имя формы. В нашем случае удалось найти такой тег:
<input type="hidden" name="form_id" value="comment_node_product_form" />
(На самом деле есть еще такой тег, подходящий под наши критерии:
<input type="hidden" name="form_id" value="search_block_form" />
Но это очевидно не то что нам нужно.)
В итоге получаем такое имя функции-хука:
comments_theme_comment_node_product_form_form_alter
Хуки для темы задаются в файле template.php, причем этот файл должен находиться в корневой папке темы, а не в подпапке templates. Кроме того, этот файл не нужно копировать из родительской темы: нужно создавать свой. Функции определенные в этом файле будут добавлены в функциям определенным в родительской теме. Еще один нюанс этого файла: в нем должен быть открывающий тег <?php, но не должно быть закрывающего.
В хуке нам нужно поменять название формы. Для этого в Друпале есть специальная функция: drupal_set_title.
Итак, создаем в корневой папке нашей темы новый файл template.php, если он еще не создан. Открываем его в текстовом редакторе. Добавляем открывающий тег <?php, если файл создан только что. Добавляем определение функции:

function comments_theme_form_comment_node_product_form_alter(&$form, &$form_state) {
	drupal_set_title("Добавить отзыв");
}

Очищаем кэш, перезагружаем страницу и смотрим:



Гототово. Теперь посетители могут оставлять отзывы о товарах.