Вывод списка похожих материалов в Drupal 7 с помощью модуля Similar By Terms.

image

22.03.12
Comments 10

Для реализации вывода похожих материалов в Drupal 7 существует несколько способов, как с помощью снипетов, так и модулей. Сегодня я расскажу как вывести список похожих материалов с помощью модуля Similar By Terms. Список похожих записей играет большую роль в продвижении сайта. Во первых, вы делаете внутреннюю перелинковку страниц, а во вторых увеличиваете количество просмотров на посетителя,  улучшая при этом поведенческие факторы, все это может положительно сказаться на продвижении сайта.

Скачать модуль Similar By Terms можно с официального сайта Drupal.org. После того как скачаете загрузите его в папку sites/all/modules/ , затем пройдите в админку и включите.

После установки пройдите в раздел Структура -> Блоки, у нас появятся новые блоки для модуля Similar By Terms, блок «Similar entries from ANY vocabulary», выводит список похожих записей для всех словарей таксономии, можно выбрать один из блоков Similar entries from the категория vocabulary, для того чтобы выводить список похожих записей для определенного словаря.

Укажите в каком регионе будет выводиться блок и сохраните настройки.

Все вроде бы хорошо, блок выводится в сайтабаре и других регионах, но мы не можем вывести список сразу в конце материала, а только под блоком комментариев, что согласитесь не очень привычно, и не несет никакой пользы посетителям. Для того чтобы исправить это в файле node.tpl.php нужно создать новый регион. Сделать это стандартными средствами как в файле page.tpl.php не получится, поэтому мы должны создать файл template.php и вставить туда специальный снипет. Давайте создадим новый регион в ноде.

Создайте файл template.php (если у вас его еще нет) и вставьте туда следующий код.

/**
* Override or insert variables into the node template.
*/
function ИМЯТЕМЫ_preprocess_node(&$vars) {
// Получаем регион и ложим его в массив переменных для ноды
$vars['node_bottom'] = block_get_blocks_by_region('node_bottom');
}

Далее откройте файл node.tpl.php и вставьте этот код в нужное место.

<?php if ($page): ?>
  <div class = "node-bottom">
    <?php print render($node_bottom); ?>
  </div>
<?php endif; ?>

Затем нужно указать новый регион в INFO файле.

regions[node_bottom] = Node bottom

После этого можно создать блок в регионе в конце ноды, но перед комментариями

На этом пожалуй все, результат работы модуля можно посмотреть в конце статьи.

Tags: 

Комментарии

WhiteMan 08.04.12

Спасибо! Очень полезная статейка! Прикрутил таким образом блок "Featured Content".

Федор 26.07.12

Здравствуйте!

Все сделал как описано в статье, но блок не выводиться,вообще. Если честно не понял что Вы имели ввиду под фразой "После этого можно создать блок в регионе в конце ноды, но перед комментариями". Не могли бы вы объяснить поподробнее.

Заранее благодарен.

Александр 18.08.12

Все выводится... вот только у меня возникает ошибка Warning: Invalid argument supplied for foreach() в функции similarterms_block_configure()

Наталия 22.10.12

Большое спасибо!!! У вас очень полезные материалы по drupal 7

Гость 17.03.13

Данный блок вообще не выводится

Алекстей Петрович 23.05.13

Здравствуйте! После вставки кода в template.php белый экран, проверял на темах bartik и garland. Не подскажите, в чем может быть дело?

Включил вывод ошибок:

Fatal error: Cannot redeclare bartik_preprocess_node() (previously declared in /var/www/themes/bartik/template.php:111) in /var/www/themes/bartik/template.php on line 164 Call Stack: 0.0031 639728 1. {main}() /var/www/index.php:0 0.0052 704112 2. drupal_bootstrap() /var/www/index.php:20 0.0382 1690664 3. _drupal_bootstrap_full() /var/www/includes/bootstrap.inc:2212 0.1989 22593936 4. drupal_theme_initialize() /var/www/includes/common.inc:5148 0.1990 22603504 5. _drupal_theme_initialize() /var/www/includes/theme.inc:100 0.2004 22630800 6. call_user_func() /var/www/includes/theme.inc:216 0.2005 22630856 7. phptemplate_init() /var/www/includes/theme.inc:0

Алексей 23.05.13

Здравствуйте! При вставке кода в template.php белый экран, включил вывод ошибок:

Fatal error: Cannot redeclare bartik_preprocess_node() (previously declared in /var/www/themes/bartik/template.php:111) in /var/www/themes/bartik/template.php on line 164 Call Stack: 0.0031 639728 1. {main}() /var/www/index.php:0 0.0052 704112 2. drupal_bootstrap() /var/www/index.php:20 0.0382 1690664 3. _drupal_bootstrap_full() /var/www/includes/bootstrap.inc:2212 0.1989 22593936 4. drupal_theme_initialize() /var/www/includes/common.inc:5148 0.1990 22603504 5. _drupal_theme_initialize() /var/www/includes/theme.inc:100 0.2004 22630800 6. call_user_func() /var/www/includes/theme.inc:216 0.2005 22630856 7. phptemplate_init() /var/www/includes/theme.inc:0

Ругается на 111 строчку, где написано:

function bartik_preprocess_node(&$variables) {
if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
$variables['classes_array'][] = 'node-full';
}
}

Заменив 111 строку на предложенный код => блок появился перед комментариями как и задумано

НО! Быть может я удалил что-то важное? Как их просто подружить, не удаляя? Спасибо

Алексей 23.05.13

Решение такое:

function bartik_preprocess_node(&$variables) {
$variables['node_bottom'] = block_get_blocks_by_region('node_bottom');
if ($variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
$variables['classes_array'][] = 'node-full';
}
}

Лишнего не удалил, только заменил в коде из статьи $vars на $variables, вставив эту строчку в существующую функцию. Может кому пригодится)

Гость 12.06.13

Здравствуйте!

У меня нет файла node.tpl.
Тема: Mix and Match. Подтема Adaptive Themes.
Раньше по Вашей инструкции все отлично получалось в теме MAYO.
Но тут не хватает этого файла.
Что делать? Подскажите, пожалуйста?!
Неужто другую тему ставить, где все файлы присутствуют.

С уважением.

admin 12.06.13

Этот файл можно взять в этой папке корень кореньСайта/modules/node

Комментировать