drupal7 - menu下所有node复制一份
使用场景:使用domain module使用多站点,可能需要多个站的内容完全一样,但又必须独立内容,这样用户在修改任何一个站点的node都不会影响其它站点。这时需要使用menu clone把主菜单复
使用场景:
使用domain module使用多站点,可能需要多个站的内容完全一样,但又必须独立内容,这样用户在修改任何一个站点的node都不会影响其它站点。
这时需要使用menu clone把主菜单复制一份,但复制出来的menu与原menu的meun item会一模一样,也就是都会指向相同的node,此时就需要使用此脚本把新的menu下所有node再复制一份。
使用domain module使用多站点,可能需要多个站的内容完全一样,但又必须独立内容,这样用户在修改任何一个站点的node都不会影响其它站点。
这时需要使用menu clone把主菜单复制一份,但复制出来的menu与原menu的meun item会一模一样,也就是都会指向相同的node,此时就需要使用此脚本把新的menu下所有node再复制一份。
$menu_name = 'menu-main-menu-us';
function _node_setup($node) {
// domain option set to United States
$node->domain_site = FALSE;
$node->domains = array(2 => 2);
$node->subdomains = array(0 => 'United States');
return $node;
}
$menus = menu_tree_all_data($menu_name);
function _menu_recursion($menus) {
foreach($menus as $menu) {
if(preg_match("/node\\/(\\d+)/i", $menu['link']['link_path'], $matches)) {
$node_id = $matches[1];
// clone node
$oNode = node_load($node_id);
$node = clone $oNode;
$node->nid = NULL;
$node->vid = NULL;
$node->tnid = NULL;
$node = _node_setup($node);
node_save($node);
// reset menu
$menu_obj = menu_link_load($menu['link']['mlid']);
$menu_obj['link_path'] = 'node/'.$node->nid;
$menu_obj['href'] = 'node/'.$node->nid;
menu_link_save($menu_obj);
}
if(!empty($menu['below'])) {
_menu_recursion($menu['below']);
}
}
}
_menu_recursion($menus);
精彩图集
精彩文章






