Перейти к основному содержанию
Facet Title. Меняем заголовок Views в зависимости от выбранных фильтров Facets

Кто работает с Друпал знают, что для организации удобных и функциональных фильтров на сайте используют так называемые фасеты (связка модулей Facet Api, Views, Search facets, Search views, Database search или Solr). Но изначально, фасетные фильтры совершенно не пригодны в плане SEO сайта, так как и формируемые урлы там не с ЧПУ (решает эту проблему модуль Facet Api Pretty path), а также не возможность выводить формируемые в результате выбранных фильтров заголовки H1 и Title. Так вот, для того чтобы в созданной вьюхе с фасетами формировались эти самые заголовки, нужно немного допилить модуль. А именно, в файле темы template.php дописываем следующую функцию:

/**
 * Implements hook_views_pre_render
 */
function THEME_NAME_views_pre_render(&$view) {
  if($view->name == 'PUT YOUR VIEW NAME HERE') {
    if ($searchers = facetapi_get_active_searchers()) {
      $terms_title = array();
      $searcher = reset($searchers);
      $adapter = facetapi_adapter_load($searcher);
      foreach ($adapter->getAllActiveItems() as $item) {
        $term = taxonomy_term_load($item['value']);
        $terms_title[] = $term->name;
      }
      $view->build_info['title'] = implode($terms_title, ' ');
    }
  }
}

Если хотим чтобы еще и Exposet filters учитывались:

**
 * Implements hook_views_pre_render
 */
function THEMENAME_views_pre_render(&$view) {
  if($view->name == 'yourview' && $view->current_display = 'page') {
    $search_values = array();

    // Check the facets
    if ($searchers = facetapi_get_active_searchers()) {
      $searcher = reset($searchers);
      $adapter = facetapi_adapter_load($searcher);
      foreach ($adapter->getAllActiveItems() as $item) {
        $term = taxonomy_term_load($item['value']);
        $search_values[] = $term->name;
      }
    }
    // Check the views exposed filters
    if ($filters = array_filter($view->exposed_input)) {
      $search_values = array_merge($search_values, $filters);
    }
    if (!empty($search_values)) {
     $view->build_info['title'] = '<h3 class="search-result">Results for</h3><h2 class="search-values">' .
       implode($search_values, ', ') . '</h2>';
    } else $view->build_info['title'] = '';
  }
}

Сам долго мучился с этой проблемой пока случайно не наткнулся на топик тут: https://www.drupal.org/node/2039701. Теперь сайты на Дурпал в связке с фасетами отлично справляются с задачей расширения и внедрения нужного семантического ядра.

Об авторе

Автор этого блога. В SEO более 10 лет. Кроме SEO интересуюсь всем, что связано с технологиями и заработком в интернете, о чем и стараюсь делиться с читателями.