Как различать пункты меню без дочерних элементов и отображать различное содержимое на панелях или представлениях?
У меня есть меню на основе таксономии (3 уровня), которое отображает определенный тип контента. Элементы содержимого всегда помечаются как дочерние элементы самого низкого уровня (*), поэтому при выборе пунктов меню отображается диапазон содержимого.
top-level | mid-level1 | child1*
| | child2*
|
| mid-level2 - child3*
|
| child4*
Когда выбраны родительские уровни, я хотел бы, чтобы отображалась страница сводки для родителя. Я использую представления и панели и легко показываю детей самого низкого уровня, но как мне установить фильтр или контекст, чтобы определить, являются ли вид не на самом низком уровне?
Панели отображают контекст, в котором выбирается содержимое с родителем (или без него), поэтому я могу легко идентифицировать пункты меню верхнего уровня, но нижние дочерние элементы могут находиться на втором или третьем уровне, и нет контекста для "имеет детей".
Что я могу использовать в качестве контекста для выбора родителей и какой крючок использовать?
1 answers
Это отличный пример пользовательского плагина Ctools. В этом случае наш тип плагина - "Доступ". Приведенное ниже скопировано из "term_has_parent" и принято для поиска обратного. Вероятно, это можно было бы улучшить с помощью более надежной проверки ошибок.
В панелях вы получите новое "Правило выбора", чтобы вы могли отличать термины, у которых есть дочерние элементы, от тех, у которых их нет.
<?php
/**
* Plugins are described by creating a $plugin array which will be used
* by the system that includes this file.
*/
$plugin = array(
'title' => t("Taxonomy: term has child(ren)"),
'description' => t('Control access if a term has children.'),
'callback' => 'term_has_child_ctools_access_check',
'default' => array('negate' => 0),
'summary' => 'term_has_child_ctools_access_summary',
'required context' => new ctools_context_required(t('Term'), array('taxonomy_term', 'terms')),
);
/**
* Check for access.
*/
function term_has_child_ctools_access_check($conf, $context) {
$children = db_select('taxonomy_term_hierarchy', 't')
->fields('t')
->condition('parent', $context->data->tid)
->range(0, 1)
->execute()
->fetchAssoc();
return count($children) > 1;
}
/**
* Provide a summary description based upon the checked terms.
*/
function term_has_child_ctools_access_summary($conf, $context) {
return 'Returns true if the current term has children';
}
Если вы не знаете, как использовать пользовательский плагин Ctools, я предлагаю, чтобы это тема другого вопроса.