2016-10-18 162 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