Как использовать модуль Hansel?
Меня попросили использовать модуль Hansel breadcrumbs для получения хлебных крошек на сайте, но я с трудом понял, как работает модуль. Я не могу получить четкую картину даже из документации по модулям. Я был бы признателен за любую помощь, чтобы прояснить мои сомнения по поводу этого модуля.
- Я удалил пользовательский модуль хлебных крошек и установил модуль хлебных крошек Hansel.
- Я хочу создать панировочные сухари на определенной странице, такой как Главная страница ->Бизнес->Часто задаваемые вопросы и и так далее.
Как это возможно с модулем Hansel breadcrumbs?
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>
, похоже, работает только для "Включения типа узла".
Для создания Главная страница ->Бизнес->Часто задаваемые вопросы ->Как завязать галстук (предполагая, что Бизнес - это налоговый термин, а Часто задаваемые вопросы - тип узла):
- Первое правило (для головы хлебной крошки, т. е. ссылка "Главная")
- Создайте правило с именем
start
и оставьте значение "Родительский" равным<root>
- В разделе "действие с хлебной крошкой" выберите "добавить одну ссылку"
- Установите "Действие" на "переключение", затем нажмите "Далее"
- Введите "Главная" в качестве имени ссылки, затем укажите путь к
<front>
- Выберите "включить аргумент URL" и нажмите "сохранить"
- Второе правило (для хвоста хлебной крошки, т. Е. название узла: "Как завязать галстук")
- Создайте правило с именем
finish
и оставьте значение "Родительский" равным<root>
- В разделе "действие с хлебной крошкой" выберите "добавить ссылку на текущую страницу"
- Установите "Действие" на "оставить", затем нажмите "Далее" и "сохранить"
- До сих пор эти два правила помогут вам: Главная страница ->Как завязать галстук
- Третье правило (для второй крошки, т. е. термин таксономии "Бизнес")
- Создайте правило с именем
node
и установите "Родительское" значение-start
- В разделе "действие с хлебной крошкой" выберите "добавить путь к термину"
- Установите "Действие" на "переключение", затем нажмите "Далее"
- На следующей странице, выберите вокабуляр, содержащий термин "Бизнес"
- Установите "Включить" в "тип узла", затем нажмите "Сохранить"
- Четвертое правило (для третьей крошки, т.е. типа узла "Faq")
- Создайте правило с именем
faq
(для узла типа "Часто задаваемые вопросы") и установите для "Родительского" значение--node
- В разделе "действие с хлебной крошкой" выберите "добавить ссылку на тип узла"
- Установите "Действие" в "Правило перехода", затем нажмите "Далее"
- На следующей странице настройте "Путь" по желанию
- Набор выберите пункт назначения "Перейти" в
-finish
, затем нажмите "Сохранить"
На мой взгляд, в текущем состоянии гензель является сложным и ограниченным, я столкнулся с множеством проблем:
- работа с таксономией
- ссылка на сущность
- проблемы с токенами (что было больше проблемой для самого токена и ссылки на сущность)
- добавьте пользовательскую ссылку на что-то, основанное на небольшой логике и заданном поле (обработка 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;
}
}
}
}