2016-10-18 25 views
1

这是我的代码。我在页面和儿童页面中显示菜单。问题是,如何在儿童的所有儿童页面中显示此菜单?如何在儿童页面的所有儿童页面显示菜单drupal

/** 
* Implements hook_preprocess_page(). 
*/ 
function agnian_material_admin_preprocess_page(&$variables) { 
// @todo: add an if statement to add below data only for "page__admin__content" page. 
$variables['node_types'] = node_type_get_names(); 

/** * 渲染 “管理员/结构” 的网页在其菜单的所有子网页。 */

// get current page path 
$path = \Drupal::request()->getPathInfo(); 
if(strpos($path, '/admin/structure') !== false) { 
$tree = \Drupal::menuTree(); 
$params = $tree->getCurrentRouteMenuTreeParameters('admin'); 
$admin_menu = $tree->load('admin', $params); 
$admin_structure_menu = array_key_exists('system.admin_structure', $admin_menu['system.admin']->subtree) ? $admin_menu['system.admin']->subtree['system.admin_structure'] : null; 
if($admin_structure_menu) { 
$subtree = $tree->build($admin_structure_menu->subtree); 

/*这部分只适用于 “管理/结构” 页面之间同步菜单项目的位置和它的子页面*/

$old_items = $subtree['#items']; 
$tmp = $subtree['#items'] = array(); 
foreach($old_items as $key => $value) $tmp[$key] = $value['title']; 
asort($tmp); 
foreach($tmp as $key => $value) $subtree['#items'][$key] = $old_items[$key]; 

/*同步结束*/

$variables['admin_menu'] = $subtree; 
} 
} 

/**结束渲染“管理/结构”页面的菜单中的所有子页面。 * /}

+0

我不明白,如果u页和子页面的菜单,使用后台联系起来,菜单将被显示在所有论文页数等 – Matoeil

+0

选项在后台创建菜单,显示菜单块和可见性参数选择您想要显示的页面 – Matoeil

+0

谢谢您的重播。我不明白什么是后台?这个鳕鱼菜单仅在第一个孩子中显示,例如我的页面是x,菜单显示在x中,它是孩子x1,并且在x1的孩子x2(x> x1> x2)中没有显示。我的问题是显示在x2和x3页面的菜单。 – Evi

回答

0

尝试更换

if(strpos($path, '/admin/structure') !== false) { 

[^ /] +意为 “除斜线的一个或多个字符”。

或者其他结构之后应该是

 if( preg_match("/admin/structure(.*)", $path)!== false) { 
+0

亲爱的,Matoeil。感谢您的时间和答复。我替换它,但它不工作,甚至菜单doest不显示在父页面(我不知道该怎么办( – Evi