インストールプロファイルにノードのセットを作成しています。同じPROFILE_NAME.installでメニューリンクを作成しようとすると、リンクが作成されません。
別のモジュールでメニューリンクを作成し、hook_update_N()
を使用してそれらを有効にしてみましたが、これも機能しません。
モジュールをアンインストールして再アクティブ化すると、メニューのリンクが正しく作成されます。
hook_install_tasks()
を使用してMYPROFILE_NAME.profileまたはMYPROFILE_NAME.installに配置しようとしましたが、これも機能しません。
インストールプロファイルの一部として作成されたノードのメニューリンクを作成するにはどうすればよいですか?
MY_PROFILE_NAME.installにノードを作成するためのコードは次のとおりです。
// creation of my nodes (same content for all)
$nodi = array(
// i have other 14 nodes
'title' => array('Home'),
// i have other 14 paths for the nodes
'path' => array('home'),
);
$titoli = array();
$titoli = $nodi['title'];
$percorsi = array();
$percorsi = $nodi['path'];
//CREAZIONI DEL CONTENUTO PROGRAMMATICAMENTE
for($i = 0; $i< count($titoli); $i++){
$testo_body = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec feugiat velit eget metus placerat,varius eros facilisis. Aenean aliquam imperdiet nisl ut dapibus...';
$node = new stdClass(); // nuovo oggetto nodo
$lingua = 'it';
$node->type = "page"; //
$node->title = $titoli[$i];
$node->language = $lingua;
$node->path = array('alias' => $percorsi[$i]); // i think here is the problem !!!
$node->uid = 1; // admin
$node->status = 1;
// Body field
$body_field_info = field_info_field('body');
if (field_is_translatable('node', $body_field_info)) {
$body_lingua = field_valid_language($lingua);
}else{
$body_lingua = LANGUAGE_NONE;
}
$node->body[$body_lingua][0]['value'] = $testo_body;
$node->body[$body_lingua][0]['summary'] = 'text...';
$node->body[$body_lingua][0]['format'] = 'full_html';
$node = node_submit($node); // Prepare node for a submit
node_save($node); // After this call we'll get a nid
メニューリンクを作成するためのコードは次のとおりです。
// Create a Home link in the main menu.
$path = drupal_lookup_path('source', 'home');
$item = array(
'link_path' => $path,
'router_path' => $path,
'link_title' => st('Home'),
'menu_name' => 'main-menu',
'weight' => -50,
'customized' => 1,
'plid' => 0, // Parent menu item, 0 if menu item is on top level
);
menu_link_save($item);
menu_rebuild();
メニューはmenu_linksテーブルに作成されますが、空のlink_pathが含まれているため、nidで作成されたノードを取得できません。 また、install_finished()をオーバーライドして、メニューを作成するための関数を.installまたは.profileファイルに配置しますが、それは同じです。任意のアイデア?
$nodi = array(
'title' => array(
'Home' ,
'Presentazione' ,
'Obiettivi' ,
'Comitato organizzatore' ,
'Patrocini' ,
'Edizioni passate' ,
// 'Calendario eventi' ,
'Materiali' ,
'Cartelle stampa' ,
'Documentazione' ,
'Video' ,
'Dove siamo' ,
'Contatti',
),
'path' => array(
'home' ,
'presentazione' ,
'obiettivi' ,
'comitato-organizzatore' ,
'patrocini' ,
'edizioni-passate' ,
//'calendar-node-field-date/month' ,
'materiali' ,
'cartelle-stampa' ,
'documentazione' ,
'video' ,
'dove-siamo' ,
'contatti',
),
);
$titoli = array();
$titoli = $nodi['title'];
$percorsi = array();
$percorsi = $nodi['path'];
$miei_path = array();
$alias = array();
//CREAZIONI DEL CONTENUTO PROGRAMMATICAMENTE
for($i = 0; $i< count($titoli); $i++){
//SE È IL CALENDARIO O GALLERIA DELLE IMMAGINI NON CREARE LE PAGINE PERCHÉ CI SONO GIÀ
$testo_body = 'Lorem ipsum dolor ..';
$node = new stdClass(); // nuovo oggetto nodo
$lingua = 'it';
$node->type = "page";
node_object_prepare($node); // Set some default values.
$node->title = $titoli[$i];
$node->language = $lingua; //non settato LANGUAGE_NONE
$node->path['pathauto'] = 0;
$node->uid = 1; // admin
$node->status = 1;
$node->comment = 0;
$node->promote = 0;
$node->moderate = 0;
$node->sticky = 0;
// Body field
$body_field_info = field_info_field('body');
if (field_is_translatable('node', $body_field_info)) {
$body_lingua = field_valid_language($lingua);
}else{
$body_lingua = LANGUAGE_NONE;
}
$node->body[$body_lingua][0]['value'] = $testo_body;
$node->body[$body_lingua][0]['summary'] = 'Questo è un testo esempio.';
$node->body[$body_lingua][0]['format'] = 'full_html';
$node = node_submit($node); // Prepare node for a submit
$node->path = array('alias' => ('content/'.$percorsi[$i])); // Setting a node path
node_save($node); // After this call we'll get a nid
$mio_path = $node->nid;
$miei_path[$i] = $mio_path;
$mio_alias[$i] = $node->path['alias'];
watchdog(WATCHDOG_INFO, "E' stato creato il nodo " . $titoli[$i] . " correttamente, con alias ".$percorsi[$i] ."---- " . $mio_alias[$i]. " ".var_dump($node->path), $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL);
$fornt = "node/".$miei_path[0];
variable_set('site_frontpage', $fornt);
}
これを使用してメニュー項目を追加できます
$item = array(
'menu_name' => 'menu-name',
'link_title' => 'Link title',
'link_path' => 'node/'. $nid,
);
menu_link_save($item);
//don't forget to clear menu cache after saving menu item
menu_cache_clear_all();
これが役に立てば幸い
更新された回答 Drupal 7標準プロファイルインストールファイル、つまりstandard.install(行番号413))を調べたところ、「ホーム」リンクの作成がそこにあります。
// Create a Home link in the main menu.
$item = array(
'link_title' => st('Home'),
'link_path' => '<front>',
'menu_name' => 'main-menu',
);
menu_link_save($item);
// Update the menu router information.
menu_rebuild();