在 Drupal 6 中自动将节点标题复制到菜单标题
Drupal7的一项新功能是,当您创建菜单项时,您为节点提供的任何标题都将复制到菜单标题字段中。我想在Drupal6中复制这个功能,所以我创建了一个函数来做到这一点。我在不同的项目中多次使用过这个功能,所以我在这里发布它。
此代码使用该drupal_add_js()函数在添加或编辑节点时将少量JavaScript代码推送到页面中。该钩子hook_init()用于添加此内容,因为它在Drupal启动周期的早期运行。我曾尝试将此代码放入其他钩子(如hook_preprocess_page()),但未包含在内,我会进一步研究此问题,但此解决方案似乎运行良好。
添加的JavaScript是一些jQuery代码,它查看节点的标题字段,并在输入任何内容时将其复制到菜单标题字段。它确保在进行复制之前菜单标题字段中没有任何内容,否则会覆盖添加的任何自定义标题。并非所有节点都是菜单项,因此代码仅在用户单击菜单字段时运行,这复制了Drupal7功能。
/** * Implementation of HOOK_init(). Used to add javascript to the node add and edit pages that copies the node title to the menu title field. */ function mymodule_init() { if ((arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == 'edit') || (arg(0) == 'node' && arg(1) == 'add' && arg(2) != '')) { drupal_add_js(" $(document).ready(function() { $('#edit-menu-link-title').focus(function() { if(this.value == '') { this.value= $('#edit-title').val(); } }); $('#edit-path').focus(function() { if(this.v == '') { this.value= $('#edit-title').val().toLowerCase().replace(' ', '_'); } }); $('#edit-menu-link-title').keydown(function(event) { if ($('#edit-menu-link-title').val().length < 80) { $('#edit-menu-link-title').removeClass('error'); } else { $('#edit-menu-link-title').addClass('error'); } }); }); ", 'inline'); } }
此代码还进行了少量验证,以鼓励用户通过在字段中添加“错误”类(如果他们添加长标题)来添加大量菜单标题。目前设置为80个字符,这似乎是一个很好的限制。
要使用此功能,只需将其添加到您自己的自定义模块之一,甚至为其创建一个模块。