DARTHARTH

Табы на Drupal 7 со своими урлами

Разбивка контента ноды в Drupal 7 само по себе не сильно сложное занятие. Достаточно в шаблоне раскидать поля и подключить библиотеку, и табы на аяксе готовы. Но, как быть, если кому-то захочется, что бы табы грузились как отдельные страницы? К примеру урл страницы //адресстраницы1 и при клике на таб загружалась бы эта же страница с открытым активным табом и урлом //адресстраницы1/таб1 да еще и со своими мета-тэгами.

Такую задачу реализовал мой коллега и ниже я попытаюсь поделиться краткой инструкцией.

Для начала необходимо установить все нужные модули:

Возможно, хотя скорее всего и нет, понадобиться поставить патч для Node Tab

diff --git a/node_tab.module b/node_tab.module
index 8b140c0..dc256ec 100644
--- a/node_tab.module
+++ b/node_tab.module
@@ -653,3 +653,48 @@ function node_tab_block_view($delta = '') {
   }
   return $block;
 }
+
+/**
+ * Implements hook_token_info().
+ */
+function node_tab_token_info() {
+  $info = array();
+  $info['tokens']['node']['node-tab-name'] = array(
+    'name' => t('Node tab name'),
+    'description' => t('Machine name of currently active node tab.'),
+  );
+  $info['tokens']['node']['node-tab-label'] = array(
+    'name' => t('Node tab label'),
+    'description' => t('Label of currently active node tab.'),
+  );
+  return $info;
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function node_tab_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $replacements = array();
+  if ($type == 'node' && !empty($data['node']) && (isset($tokens['node-tab-name']) || isset($tokens['node-tab-label']))) {
+    // Load all node tabs for the current node type and select the one which is
+    // currently used.
+    $tabs = node_tab_load_multiple($data['node']->type);
+    if (!$tabs) {
+      return $replacements;
+    }
+    $tab_arg_pos = 2;
+    $current_tab = node_tab_get_current_tab($tab_arg_pos, $tabs);
+    if (!$current_tab) {
+      return $replacements;
+    }
+
+    if (isset($tokens['node-tab-name'])) {
+      $replacements[$tokens['node-tab-name']] = $current_tab;
+    }
+    if (isset($tokens['node-tab-label'])) {
+      $current_tab_loaded = node_tab_load($data['node']->type, $current_tab);
+      $replacements[$tokens['node-tab-label']] = $current_tab_loaded->label;
+    }
+  }
+  return $replacements;
+}

После установки и включения модулей идем к нужному типу содержимого, где хотим сделать таб и добавляем их

Прописываем метку таба, лучше сразу использовать одну запись для метки, так как она будет и нашим урлом.

После этого обновляем синонимы.

Далее приступаем к настройке вывода данных в табах. Можно выводить как представления в блоках так и поля содержимого. Ниже рассмотрим только вывод полей в шаблоне ноды.

Сначала прописываем переменные для урлов

<?php 
   $path = current_path();
   $path_alias = drupal_lookup_path('alias',$path);
   $tabspath = '/'.$path_alias;
   $url = url('node/'.($node->nid), array('absolute' => TRUE));
   $baseurl = url('node/'.($node->nid));
   $tabsinfo = url('node/'.($node->nid).'/info');
   $tabsinfo2 = url('node/'.($node->nid).'/info2');
?>

Теперь сделаем вывод табов со ссылками управления

<div class="tabs-content">
   <a href="<?php echo $url; ?>">Описание</a>
   <a href="<?php echo $tabsinfo; ?>">Информация</a>
   <a href="<?php echo $tabsinfo2; ?>">Информация2</a>	
</div>

Теперь делаем вывод самих блоков с информацией

<?php if($tabspath == $baseurl): ?>
   <?php echo render($content['body']); ?> 
<?php endif; ?>
<?php if($tabspath == $tabsinfo): ?>
   <h2><?php echo $title; ?> - Информация</h2>
   <?php echo render($field_info); ?>
<?php endif; ?>
<?php if($tabspath == $tabsinfo2): ?>
   <h2><?php echo $title; ?> - Информация2</h2>
   <?php echo render($field_info2); ?>
<?php endif; ?>

Таким образом у нас при клике на ссылку идет переход по адресу таба и при условии совпадения адресов таба и блоков полей идет вывод информации.

Что бы задать мета-тэги для каждого отдельного таба заходим в привычный нам модуль мета-тэгов и переходим на вкладку

Если же не подтянулся перевод, то вкладка может называться By path

В появившемся окне жмем на ссылку Добавить мета-тег по пути

В появившемся окне добавляем имя таба

Далее добавляем ссылку таба и ниже заполняем мета-тэги которые мы хотим видеть у открытого таба

После сохранения у нас есть готовые табы со своими уникальными тэгами.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll Up