Приватный проект для aquaweb
Модуль для D6/Ubercart uc_catalog. Каталог построен на основе таксономии. Модуль переопределяет breadcrumbs c учетом вложенности терминов таксономии, таким образом, что:
Термин1
*Термин2
**Термин3 (выбран)
..выводятся в breadcrumbs как Термин1 > Термин2 >Термин3
Но словарь позволяет мультивыбор терминов, таким образом, что если выбрать
Термин1
*Термин2
**Термин3 (выбран)
*Термин4
**Термин5 (выбран)
.. то в breadcrumbs выведется
Термин1 > Термин2 > Термин3 > Термин4 > Термин5
При этом, ссылка на страницу товара (path) формируется как (domain.tld/термин1/термин4/термин5)
Задача: выводить в breadcrumbs только ту цепочку, которая соответствует path.
Код этой части модуля:
/**
* Implementation of hook_nodeapi().
*/
function uc_catalog_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
static $parents = array();
if (uc_product_is_product($node->type)) {
switch ($op) {
case 'view':
if ($a4 == TRUE && variable_get('uc_catalog_breadcrumb', TRUE)) {
$crumbs = array();
if (variable_get('site_frontpage', 'node') != 'catalog') {
$crumbs[] = l(t('Home'), '');
}
$terms = taxonomy_node_get_terms_by_vocabulary($node, variable_get('uc_catalog_vid', 0));
if (count($terms)) {
$crumbs[] = l(variable_get('uc_catalog_name', t('Catalog')), variable_get('uc_catalog_url', 'catalog'));
$used_tids = array();
foreach ($terms as $term) {
if (!isset($parents[$term->tid])) {
$parents[$term->tid] = taxonomy_get_parents_all($term->tid);
}
foreach (array_reverse($parents[$term->tid]) as $parent) {
if (!in_array($parent->tid, $used_tids)) {
/* fixed NODE breadcrumbs path
$crumbs[] = l($parent->name, module_invoke('taxomony','term_path',$parent));
*/
$crumbs[] = l($parent->name, 'catalog/'. $parent->tid);
}
}
}
}
drupal_set_breadcrumb($crumbs);
}
break;
}
}
}