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

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

Так ось, для того щоб у створеній Views з фасетами формувалися ці самі заголовки, потрібно трохи допиляти модуль. Зокрема, у файлі теми 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. Тепер сайти на Друпал у зв'язці з фасетами чудово справляються із завданням розширення та впровадження потрібного семантичного ядра.