2015-06-09 3 views
0

Предположим, у меня есть родительские страницы A1 и B1. A1 имеет дочерние страницы A1.1, A1.2, A1.3 и B1 имеет дочерние страницы B1.1, B1.2. Я хочу перечислить все соответствующие дочерние страницы на A1 и B1. На каждой дочерней странице у меня есть изображение и заголовок. Эти две информации должны быть указаны в виде тизера на родительской странице. Мне нужна помощь в этом, будь то по кодированию или с помощью представлений, я не возражаю, насколько я получаю правильные результаты. СпасибоКак перечислить все дочерние страницы текущей родительской страницы в drupal 7?

+0

Как страница родителя связана с дочерней страницей? – D34dman

ответ

0

Вы можете сделать это, создав представление, отображающее нужные вам поля или тизер. Затем добавьте контекстный фильтр «Content Nid» в настройке для этого фильтра в разделе «КОГДА ЗНАЧЕНИЕ ФИЛЬТРА НЕ ДОСТУПНО» выберите «Предоставить значение по умолчанию», а затем «Код PHP», затем код, который я использую, следующий:

$children = array(); 
$current = db_query("select menu_name, mlid from {menu_links} where link_path = :node", array(':node' => $_GET['q'])); 
$current_info = array(); 
foreach ($current as $value) { 
$current_info[] = $value; 
} 
if($current_info) { 
$result = db_query("select mlid, plid, link_path, link_title from {menu_links} where menu_name=:menu and plid=:mlid and hidden=0 order by weight, link_title", array(':menu' => $current_info[0]->menu_name, ':mlid' => $current_info[0]->mlid)); 
foreach ($result as $row) { 
    $children[] = $row; 
} 
} 
$nids = array(); 
foreach ($children as $value){ 
if(substr($value->link_path, 0, 5) == 'node/'){ 
    $nids[] = substr($value->link_path, 5); 
} 
} 
return implode('+',$nids); 

Последнее, что нужно сделать, под «более» в нижней части страницы sellect «Разрешить несколько значений»

+0

Я применил ваше решение, но ничего не отображает. Фактически я использовал блок меню в моем случае. Еще один вопрос: как настроить дочерние страницы для работы вашего решения? – Moushrat

+0

Блок меню работает для меню, но не изображения, вы можете использовать значок меню https://www.drupal.org/project/menu_icons, но вам нужно будет добавить значки в меню, а не в узел. – pete80

+0

Я только что успешно протестировал вышеописанную новую установку drupal, создал некоторые вложенные пункты меню в главном меню, создал представление, описанное выше, вывел представление как блок и добавил блок в область содержимого – pete80

0

Я использую menu_tree_all_data()

https://api.drupal.org/api/drupal/includes!menu.inc/function/menu_tree_all_data/7

получить всю структуру меню и тогда я «вручную» wling дерева меню ...

Кроме того, только после прочтения дерева я звоню menu_tree_add_active_path()

http://www.drupalcontrib.org/api/drupal/contributions!menu_block!menu_block.module/function/menu_tree_add_active_path/7

который добавит активный индикатор следа. Это часть модуля блока меню, поэтому вам нужно будет установить его и не забудьте добавить зависимости для блока меню в вашем модуле ...

$tree = menu_tree_all_data($menu); 
    menu_tree_add_active_path($tree); 
+0

Can вы предоставляете подробное пошаговое руководство, пожалуйста? Я застрял с этого много дней. – Moushrat

+0

Добавьте этот код и после этого print_r/var dump $ tree, чтобы увидеть его структуру. Затем перебираем $ tree (ветвь). – MilanG