Как использовать модуль Hansel?


Меня попросили использовать модуль Hansel breadcrumbs для получения хлебных крошек на сайте, но я с трудом понял, как работает модуль. Я не могу получить четкую картину даже из документации по модулям. Я был бы признателен за любую помощь, чтобы прояснить мои сомнения по поводу этого модуля.

  • Я удалил пользовательский модуль хлебных крошек и установил модуль хлебных крошек Hansel.
  • Я хочу создать панировочные сухари на определенной странице, такой как Главная страница ->Бизнес->Часто задаваемые вопросы и и так далее.

Как это возможно с модулем Hansel breadcrumbs?

Author: Andre Baumeier, 2012-05-21

2 answers

"Включить тип узла" похоже на оператор switch($case){} в PHP (и других языках).

После выбора "Включить тип узла" в Hansel вам нужно будет указать *имя_машины* типа узла в поле "Имя", которое представляет Hansel. Например, вы можете ввести одно из следующих значений в поле "Имя":

  • article -- будет нацелен на узлы статей
  • blog_entry -- будет нацелен на узлы записи в блоге
  • webform -- будет нацелена на веб-форму узлы
  • <default> (для остальных типов узлов)

Если бы это было в коде, это выглядело бы примерно так:


switch($node->type) {
  case 'article':
    // Make an article crumb
    break;
  case 'blog_entry':
    // Make a blog-entry crumb
    break;
  case 'webform':
    // Make a webform crumb
    break;
  case '<default>':
    // Do something for everything else...
    break;
}

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

  • node (для управления хлебной крошкой на страницах с путем, подобным узлу/*)
  • taxonomy (т.е. для таксономии/терминов/* страниц)
  • admin (т.е. администратор/* страницы)
  • blogs (т.е. блоги/* страницы)

$path_arg_1 = arg(0);

switch($path_arg_1) {
  case 'node':
    // Make a crumb for node/* pages
    break;
  case 'taxonomy':
    // Make a crumb for taxonomy/* pages
    break;
  case 'admin':
    // Make a crumb for admin/* pages
    break;
  case 'blogs':
    // Make a crumb for blogs/* pages
    break;
}

Похоже, что Гензель может нацеливаться только на первый аргумент пути. Также обратите внимание, что <default>, похоже, работает только для "Включения типа узла".

Для создания Главная страница ->Бизнес->Часто задаваемые вопросы ->Как завязать галстук (предполагая, что Бизнес - это налоговый термин, а Часто задаваемые вопросы - тип узла):

  1. Первое правило (для головы хлебной крошки, т. е. ссылка "Главная")
  2. Создайте правило с именем start и оставьте значение "Родительский" равным <root>
  3. В разделе "действие с хлебной крошкой" выберите "добавить одну ссылку"
  4. Установите "Действие" на "переключение", затем нажмите "Далее"
  5. Введите "Главная" в качестве имени ссылки, затем укажите путь к <front>
  6. Выберите "включить аргумент URL" и нажмите "сохранить"
  7. Второе правило (для хвоста хлебной крошки, т. Е. название узла: "Как завязать галстук")
  8. Создайте правило с именем finish и оставьте значение "Родительский" равным <root>
  9. В разделе "действие с хлебной крошкой" выберите "добавить ссылку на текущую страницу"
  10. Установите "Действие" на "оставить", затем нажмите "Далее" и "сохранить"
  11. До сих пор эти два правила помогут вам: Главная страница ->Как завязать галстук
  12. Третье правило (для второй крошки, т. е. термин таксономии "Бизнес")
  13. Создайте правило с именем node и установите "Родительское" значение -start
  14. В разделе "действие с хлебной крошкой" выберите "добавить путь к термину"
  15. Установите "Действие" на "переключение", затем нажмите "Далее"
  16. На следующей странице, выберите вокабуляр, содержащий термин "Бизнес"
  17. Установите "Включить" в "тип узла", затем нажмите "Сохранить"
  18. Четвертое правило (для третьей крошки, т.е. типа узла "Faq")
  19. Создайте правило с именем faq (для узла типа "Часто задаваемые вопросы") и установите для "Родительского" значение --node
  20. В разделе "действие с хлебной крошкой" выберите "добавить ссылку на тип узла"
  21. Установите "Действие" в "Правило перехода", затем нажмите "Далее"
  22. На следующей странице настройте "Путь" по желанию
  23. Набор выберите пункт назначения "Перейти" в -finish, затем нажмите "Сохранить"
 4
Author: Clay Cless, 2012-10-09 02:04:46

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

  • работа с таксономией
  • ссылка на сущность
  • проблемы с токенами (что было больше проблемой для самого токена и ссылки на сущность)
  • добавьте пользовательскую ссылку на что-то, основанное на небольшой логике и заданном поле (обработка php предназначена только для переключения, а не для действий, почему? кроме того, в любом случае использовать php таким образом - плохая идея)
  • заказ проблемы добавленных терминов.

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

Это слишком сложно для разработчика/не разработчика сайтов и слишком ограничивает разработчика. см. http://drupal.org/node/805874 для дальнейшего ознакомления и обсуждения.

Обзор: не используйте его, возможно, возьмите его код в качестве ссылки для создания собственного модуля:

/**
 * Implements hook_theme_registry_alter().
 */
function my_module_theme_registry_alter(&$theme_registry) {
  $theme_registry['breadcrumb_original'] = $theme_registry['breadcrumb'];
  $theme_registry['breadcrumb']['function'] = 'my_module_get_themed_breadcrumbs';
}

function my_module_get_themed_breadcrumbs() {
  $breadcrumbs = my_module_get_breadcrumbs();
    if (is_array($breadcrumbs)) {
      return theme('breadcrumb_original', $breadcrumbs);
    }
    return theme('breadcrumb_original', $original_breadcrumbs);
}

function my_module_get_breadcrumbs() {
  $links=null;
  switch (drupal_strtolower(arg(0))) { // node/$x, taxonomy/$x ...
    case 'node': // node/$x
      if (is_numeric(arg(1))) {
        if ($node=node_load(arg(1))) {
          switch ($node->type) {
            case 'article':
              _my_module_link_taxonomy($links, $node, 'field_tags');
              _my_module_link_node($links, $node);
              break;
          }
        }
      }
      break;
    default:
    case 'taxonomy':
    case 'admin':
    case 'user':
      //extend by your own rules
      return null;
      break;
  }

  $breadcrumbs=array();
  $i=0;
  $last_item_number=count($links);
  $last_item_link = variable_get('my_module_breadcrumb_last_item_link', TRUE);
  foreach ($links as $key => $link) {

    if (is_array($link)) {
      switch ($link['href']) {
        case '<none>':
          $breadcrumbs[$i] = check_plain($link['title']);
          break;
        case '<front>':
          $breadcrumbs[$i] = ($last_item_link || $i != $last_item_number) ? l($link['title'], '') : check_plain($link['title']);
          break;
        default:
          $breadcrumbs[$i] = ($last_item_link || $i != $last_item_number) ? l($link['title'], $link['href']) : check_plain($link['title']);
      }
    }
    $i++;
  }
  return array('breadcrumb'=>$breadcrumbs);
}

function _my_module_link_node(&$links, $node, $key=null) {
  if (is_null($key)) {
    $key=$node->nid;
  }
  $links[$key] = array(
    'title'=>$node->title,
    'href'=>'node/'.$node->nid,
  );
}

function _my_module_link_taxonomy(&$links, $node, $field) {
  // check if the node has classification settings
  if (!empty($node->{$field})) {
    $tids=array();
    foreach ($node->{$field}['und'] as $tid) {
      $tids[$tid['tid']]=$tid['tid'];
    }
    $terms=taxonomy_term_load_multiple($tids);

    if (!empty($terms)) {
      // find a term with parent items, taxonomy_get_parents_all() will
      $term=null;
      foreach ($terms as $term) {
        $parents=taxonomy_get_parents_all($term->tid);
        if (count($parents)>1) {
          // notice $parents contains the parents
          // notice $term contains a term with a parent item
          break;
        }
        $term=null;
      }

      // no hierarchical term found, take the first one from array
      if (is_null($term)) {
        $term=reset($terms);
      }

      $link = array();
      $link[$term->tid] = array(
        'title' => $term->name,
        'href' => 'taxonomy/term/' . $term->tid,
      );
      #$parents = taxonomy_get_parents_all($term->tid);
      foreach ($parents as $parent) {
        $link[$parent->tid] = array(
          'title' => $parent->name,
          'href' => 'taxonomy/term/' . $parent->tid,
        );
      }
      foreach (array_reverse($link) as $tid => $value) {
        $links[$tid] = $value;
      }
    }
  }
}
 1
Author: Andre Baumeier, 2013-03-13 16:54:08