Как добавить описание термина таксономии в активных фильтрах Facet Search - решение

Для расширения семантики и SEO оптимизации страниц различных страниц фильтров, реализованных через связку модулей описанных ранее в этой статье также часто возникает задача добавить описание этих самых фильтров. Например, в интернет магазине добавиь в подвал списка категорий товаров описание этой самой категории.

Вся проблема в том, что фасетный фильтр изначально разработан по принципу исключения каждого последующего активного фильтра, и добавлением набора следующих фильтров, поэтому вопрос, а описание какого фильтра тогда же выводить ? Выход только один - описание выводить только в случае, если активный только один из фасетов, в остальных случаях описание не выводим.

В общем, для реализации этой функции нам нужно:

  1. Написать само описание к нужному фильтру в термине таксономии, отвечающего за него
  2. На странице VIEWS отвечающего за вывод результатов Facet search в подвал (или шапку) добавить PHP
    display_products_product_display.png
    Со следующим содержимым:
<?php
$facet_args = $view->args;
$countargs = count($facet_args);
if (is_array($facet_args) && isset($facet_args) && $countargs < 4) {
    $key = array_search('category', $facet_args);
    if ($key !== FALSE) {
        $real_key = $key + 1;
        $arg_item = $facet_args[$real_key];
        $term_id = db_query("SELECT SUBSTR(source, 15) FROM {url_alias} WHERE alias = :id", array(':id' => 'kategoriya/'.$arg_item))->fetchField();
        $term = taxonomy_term_load($term_id);
        $term_view = taxonomy_term_view($term, 'full');
        echo render($term_view);
    }
}
?>

Вам лишь нужно заменить "category" и 'kategoriya' на свое значение.

$key = array_search('category', $facet_args);

Где 'category' - это часть URL, по которому интерпретируется активный Facet фильтр. То есть, если нажать на галочку фасета, он будет иметь URL типа:: .../products/category/botoks.

WHERE alias = :id", array(':id' => 'kategoriya/'.$arg_item))

 Где 'kategoriya'  - это часть пути терминов таксономии, из нужного нам словаря. Например, за категоризацию товаров в примере отвечает словарь "Категории". Нам нужно зайти в этот словарь (/admin/structure/taxonomy/имя_словаря), и нажать на любой термин в нем, чтобы посмотреть какой там путь. Получаем .../kategoriya/taxonomy_term_name/. Нам нужен 'kategoriya'

Если Вы знаете, для правильной работы модуля Facet Prety Path, урлы терминов таксономии должны формироваться по шаблону: [term:vocabulary]/[term:name], который настраивается в /admin/config/search/path/patterns. Поэтому часть пути термина 'kategoriya' - это транслетирированное имя словаря терминов. 

Вух, надеюсь понятно для тех кто с друпалом дружит, для тех кто с друпалом не знаком на достаточном уровне, это наверное будет набор букв.

Все, теперь когда будет активный фильтр категории, будет выводится ее описание, а если добавим еще хоть один активный фильтр, описание выводится более не будет.

botoks_dlya_volos.png

botoks_dlya_volos_2.png

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

<?php
$facet_args = $view->args;
$countargs = count($facet_args);
if (is_array($facet_args) && isset($facet_args) && $countargs < 4) {
    $key = array_search('category', $facet_args);
    if ($key !== FALSE) {
        $real_key = $key + 1;
        $arg_item = $facet_args[$real_key];
        $term_id = db_query("SELECT SUBSTR(source, 15) FROM {url_alias} WHERE alias = :id", array(':id' => 'kategoriya/'.$arg_item))->fetchField();
        $term = taxonomy_term_load($term_id);
        $term_view = taxonomy_term_view($term, 'full');
        echo render($term_view);
    }
}
if (is_array($facet_args) && isset($facet_args) && $countargs < 4) {
    $key = array_search('vendor', $facet_args);
    if ($key !== FALSE) {
        $real_key = $key + 1;
        $arg_item = $facet_args[$real_key];
        $term_id = db_query("SELECT SUBSTR(source, 15) FROM {url_alias} WHERE alias = :id", array(':id' => 'proizvoditel/'.$arg_item))->fetchField();
        $term = taxonomy_term_load($term_id);
        $term_view = taxonomy_term_view($term, 'full');
        echo render($term_view);
    }
}
?>

Возможно не это самое лучшее решение в плане кода, но оно рабочее. Если у Вас есть свои варианты - делитесь.

Average: 9 (1 vote)