Вы можете попробовать это:
http://api.drupal.org/api/function/menu_primary_links/6
Затем, используя hook_form_alter, выполните:
$menu_links = count(menu_primary_links());
if ($menu_links > 8) {
unset($form['menu']);
}
Но мы также должны защищать узлы, которые уже находятся в меню. Таким образом,
$menu_links = count(menu_primary_links());
if ($menu_links > 8 && !($form['menu']['mlid']['#value'] != 0 && $form['menu']['#item']['menu-name'] == 'primary-links')) {
unset($form['menu']);
}
Это удалит пункт меню из формы узла, только если этот узел не имеет существующего пункта меню в меню основных ссылок. Он проверяет, проверяет, есть ли у редактируемого узла значение mlid, и если да, то находится ли он в меню основных ссылок.
hook_form_alter http://api.drupal.org/api/function/hook_form_alter
Но как наши пользователи узнают, что случилось? Скажем им.
if ($menu_links > 8 && !($form['menu']['mlid']['#value'] != 0 && $form['menu']['#item']['menu-name'] == 'primary-links')) {
unset($form['menu']);
drupal_set_message('The maximum limit of links in the primary menu has been reached.', 'status', FALSE);
}
Вы можете расширить это сообщение, перечислив также $ menu_links, чтобы пользователь знал, какие узлы необходимо удалить, прежде чем можно будет добавить другие узлы.
Кроме того, это немного сложно, если они используют вторичные ссылки или другие меню. В этом случае вам потребуется больше программ для замены дерева в опциях меню, но сейчас это немного сложнее. Они всегда могут добавить узлы во вторичные меню через Admin> Build> Menus.