Drupal 7 节点上的扩展菜单控制

我最近注意到 Drupal 7 有一个奇怪的小问题,这似乎是我的疏忽或我不同意的决定。本质上,当节点创建时带有菜单项,菜单上的扩展标志不会被设置,但该控件在菜单管理页面上也不可用。这意味着当您尝试打印分层菜单结构时,您需要创建页面,进入菜单管理区域,访问菜单,单击编辑以访问菜单项并更改那里的设置。

为了解决这个问题,我着手创建一个小模块,该模块将向节点编辑表单的菜单选项部分添加表单控件。此单个复选框用于覆盖菜单模块针对扩展菜单参数创建的任何设置。

首先要做的是为模块创建一个简单的信息文件。为了完整起见,我将其包含在此处。

name = Node expanded menu

description = Allows users to set the expanded nature of the menu item on creation.

core = 7.x

我通常不会为这样一个简单的模块创建安装文件,但在这种情况下,我们需要防止加载模块代码,直到菜单模块将其表单项插入到节点表单中。hook_install()这里的调用只是为系统表中的这个模块条目增加了一些权重,使 Drupal 加载模块的时间比其他方式稍晚。如果没有这个,我们的模块将在菜单模块创建其表单组件之前运行,我们将无法做任何事情。我用 1 的值对此进行了测试,发现它运行得非常好,如果它不在您的设置中,那么您可能需要稍微增加此值。

<?php

 

/**

 * @file

 * Node expanded menu install file.

 */

 

/**

 * Implements hook_install().

 */

function node_expanded_menu_install() {

  // 确保此模块在菜单后加载。

  db_query("UPDATE {system} SET weight = 1 WHERE name = 'node_expanded_menu'");  

}

最后,我们需要创建一些钩子来创建表单元素并将结果值保存到数据库中。要创建的第一个钩子是 hook_form_[form-id]_alter()钩子,它将允许我们拦截和更改节点编辑表单。一个名为expand 的隐藏表单元素已经存在于我们表单的菜单部分中,所以我们只需要修改它以满足我们的需要。我们需要做的就是将元素的类型设置为复选框并交换 #value 和 #default_value 属性以停止保存原始值。如果节点的 nid 已经设置,那么我们将复选框的默认值设置为 1,否则我们使用扩展元素的现有值。为了完整起见,我还添加了菜单管理表单中存在的相同标题和描述。

<?php

 

/**

 * @file

 * node_expanded_menu module file

 */

 

/**

 * Implements hook_form_form-id_alter().

 */

function node_expanded_menu_form_node_form_alter(&$form, &$form_status) {

  if (isset($form['menu']['link'])) {

    // 更改展开的表单元素以覆盖默认设置

    $form['menu']['link']['expanded']['#weight'] = 25;

    $form['menu']['link']['expanded']['#type'] = 'checkbox';

    $form['menu']['link']['expanded']['#title'] = t('Show as expanded');

    $desctiption = t('If selected and this menu link has children, the menu will always appear expanded.');

    $form['menu']['link']['expanded']['#description'] = t($desctiption);    

    if (isset($form['nid']) && is_null($form['nid']['#value'])) {

      $form['menu']['link']['expanded']['#default_value'] = 1;

    } else {

      $form['menu']['link']['expanded']['#default_value'] = $form['menu']['link']['expanded']['#value'];

    }

unset($form['menu']['link']['expanded']['#value']);

  }

}

现在,当用户在允许它的节点上创建菜单链接时,他们将能够选择是否显示该菜单项的子项。

以上是 Drupal 7 节点上的扩展菜单控制 的全部内容, 来源链接: utcz.com/z/327488.html

回到顶部