यहाँ इस मामले में जहां आप ऐसा कर सकते है .... एक नोड अभियान बनाते समय मेनू आइटम 'अभियान 001' बनाते हैं। default_menu_link का उपयोग करना अब एक और सामग्री प्रकार, 'सब अभियान' एक नोड बना रहा है, जिसका उपयोग एंटिटीआरफ के रूप में अभियान का उपयोग कर रहा है, इसलिए इसका मेनू आइटम पहले बनाए गए अभियान के मेनू आइटम के नीचे होना चाहिए।
function mymodule_node_insert($node) {
if ($node->type == 'sub-campaign') {
if (isset($node->field_reference_campaign['und'][0]['target_id'])) {
$campaign_node_id = $node->field_photo_album_campaign['und'][0]['target_id'];
$campaign_loaded = node_load($campaign_node_id);
// Get menu link id for the campaign node.
$campaign_node_id_mlid = custom_node_mlid($campaign_node_id);
$campaign_loaded_title = strtolower(str_replace(' ', "-", $campaign_loaded->title));
$campaign_loaded_title_link_path = 'campaign/' . $campaign_loaded_title . '/photo-albums';
//I will query if it exist or not, if not then will create a sub menu item.
$link_exist = db_query("SELECT * FROM {menu_links} WHERE link_path = :link_path", array(':link_path' => $campaign_loaded_title_link_path))->fetchField();
dsm($link_exist);
if (!$link_exist) {
// Create menu item under campaign.
custom_create_menu_item($campaign_loaded_title_link_path, 'photo-albums', $campaign_node_id_mlid);
//watchdog('glue_site - Menu Item', 'Link Created');
}
else {
//dsm('Link Exist.');
watchdog('glue_site - Menu Item', 'Link Already Exist');
}
}
}
if ($node->type == 'campaign') {
}
}
फिर एक कस्टम समारोह मेनू आइटम
function custom_create_menu_item($campaign_loaded_title_link_path, $type, $plid) {
switch ($type) {
case 'photo-albums':
$item = array(
'link_path' => $campaign_loaded_title_link_path,
// If changing the title here, change it in template.php as well.
'link_title' => 'Sub Campaign',
'menu_name' => 'menu-campaign-menu', // Menu machine name, for example: main-menu
'weight' => 0,
'plid' => $plid, // Parent menu item, 0 if menu item is on top level
'module' => 'menu',
'router_path' => 'campaign/%/sub-campaign',
'customized' => '1',
);
menu_link_save($item);
menu_cache_clear_all();
watchdog('glue_site - Menu Item', 'Link Created');
break;
}
}
बनाने के लिए माता-पिता नोड के mlid प्राप्त करने के लिए। अभियान नोड ...
function custom_node_mlid($nid) {
// Require menu node module.
$arr = menu_node_get_links($nid);
$mlid = array_keys($arr);
return $mlid[0];
}
इसके लिए आपको जरूरत menu_node
हे धन्यवाद, मैं पहले दृष्टिकोण पर विचार कर रहा हूँ। अगर मैं अच्छी तरह से समझ गया, तो यह अधिक शक्तिशाली है और स्वचालित रूप से पहले से बनाए गए और सहेजे गए नोड्स को जोड़ सकता है। क्या आप अधिक विस्तृत कर सकते हैं "आप इच्छित वस्तुओं के लिए पूछने के लिए hook_menu() का उपयोग कर सकते हैं और सही मेनू संरचना वापस कर सकते हैं।" यह स्पष्ट नहीं है कि hook_menu – aneuryzm
से नोड्स सूची कैसे प्राप्त करें ** ** इसके लिए 'hook_menu() 'का उपयोग नहीं करना चाहिए! ** दृश्य मेनू प्रविष्टियां बनाना केवल हुक की एक साइड इफेक्ट/सुविधा सुविधा है, ** यह मुख्य नहीं है उद्देश्य **। इस हुक द्वारा निर्मित/छेड़छाड़ वाला 'मेनू' ड्रूपल आंतरिक मेनू सिस्टम (राउटर टेबल) है, दृश्यमान UI मेनू नहीं।दृश्यमान मेनू प्रविष्टियों को menu_link_save के माध्यम से बनाया जाना चाहिए, जेरेमीस के दूसरे सुझाव के अनुसार (यह है कि hook_menu 'सुविधा' प्रविष्टियों को बनाने के लिए स्वयं का उपयोग करता है)। –
मैंने राउटर आइटम बनाम मेनू प्रविष्टियों [दूसरे उत्तर में] के अंतर को समझाया [http://stackoverflow.com/questions/1844109/drupal-module-nested-menu-items/1869469#1869469)। यह भी देखें [कब और कैसे मेनू_लिंक्स का उपयोग करें] (http://drupal.org/node/217393)। –