Для расширения семантики и SEO оптимизации страниц различных страниц фильтров, реализованных через связку модулей описанных ранее в этой статье также часто возникает задача добавить описание этих самых фильтров. Например, в интернет магазине добавиь в подвал списка категорий товаров описание этой самой категории.
Вся проблема в том, что фасетный фильтр изначально разработан по принципу исключения каждого последующего активного фильтра, и добавлением набора следующих фильтров, поэтому вопрос, а описание какого фильтра тогда же выводить ? Выход только один - описание выводить только в случае, если активный только один из фасетов, в остальных случаях описание не выводим.
В общем, для реализации этой функции нам нужно:
- Написать само описание к нужному фильтру в термине таксономии, отвечающего за него
- На странице VIEWS отвечающего за вывод результатов Facet search в подвал (или шапку) добавить PHP
Со следующим содержимым:
<?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' - это транслетирированное имя словаря терминов.
Вух, надеюсь понятно для тех кто с друпалом дружит, для тех кто с друпалом не знаком на достаточном уровне, это наверное будет набор букв.
Все, теперь когда будет активный фильтр категории, будет выводится ее описание, а если добавим еще хоть один активный фильтр, описание выводится более не будет.
Если нужно добавить описание еще к одному вариантов фильтра, например к производителям, добавляем такой же кусок куда ниже только с параметрами другого фильтра. Например для вывода описаний для категорий и производетей получится следующий код:
<?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);
}
}
?>
Возможно не это самое лучшее решение в плане кода, но оно рабочее. Если у Вас есть свои варианты - делитесь.
- 34 просмотра