【问题标题】:how to make content's title unique如何使内容的标题独一无二
【发布时间】:2010-06-26 13:08:01
【问题描述】:

我是 drupal 的新手,我希望我的内容标题是独一无二的,所以是否有可用的模块,或者我是否可以实现自动完成来查看我过去的标题名称。 请详细回答

提前致谢:)

【问题讨论】:

    标签: drupal drupal-6


    【解决方案1】:

    您可以使用http://drupal.org/project/unique_field 模块。当用户创建或更新节点时,它会执行额外的验证,以要求节点的标题或其他指定字段是唯一的。

    【讨论】:

    • 感谢我检查了该模块及其完美,但是是否有任何模块可以使用 ajax 并在同一页面上给我相同的节点?
    • 您可以使用 CCK 模块的自动完成小部件来扩展您的内容类型以添加​​自定义的“自动完成”标题
    【解决方案2】:

    场景 #1 - 唯一节点

    hook_node_validate() 是你所需要的,如果你正在使用 Drupal 7

    您可以在自定义模块中简单地使用下面提到的代码,也可以从 unique_title git 存储库中提取,您必须将其拉入项目的模块目录,然后激活模块。

    /**
     * Implements hook_node_validate().
     */
    function unique_title_node_validate($node, $form, &$form_state) {
      if (!isset($node->nid)) {
        $title = $form_state['values']['title'];
        $results = db_select('node')->fields('node', array('title'))->condition('title', $title, '=')->execute();
        $matches = array();
        foreach ($results as $result) {
          $matches[$result->title] = check_plain($result->title);
        }
        if (isset($matches) && !empty($matches)) {
          form_set_error('title', t('Title must be unique'));
        }
      }
    }
    

    场景 #2 - 自动完成节点标题

    hook_form_alter() & hook_menu() 可以帮助您在使用 Drupal 7 时自动完成节点标题。

    您可以在自定义模块中简单地使用下面提到的代码,也可以从 autocomplete git 存储库中提取,您必须将其拉入项目的模块目录,然后激活模块。

    在您的自定义模块中使用下面提到的代码:

    /**
     * Implementation of hook_form_alter().
     */
    function module_form_alter(&$form, &$form_state, $form_id) {
      $form['title']['#autocomplete_path'] = 'unique_node_autocomplete_callback';
    }
    
    /**
     * Implements hook_menu().
     */
    function module_menu() {
      $items['unique_node_autocomplete_callback'] = array(
        'page callback' => 'autocomplete_unique_node_autocomplete_callback',
        'file' => 'module.inc',
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
      );
    
      return $items;
    }
    

    在你的 module.inc 文件中使用下面提到的 AJAX 回调:

    /**
     * AJAX Callback
     */
    function module_unique_node_autocomplete_callback($string = "") {
      $matches = array();
      if ($string) {
        $result = db_select('node')
          ->fields('node', array('nid', 'title'))
          ->condition('title', db_like($string) . '%', 'LIKE')
          ->range(0, 10)
          ->execute();
        foreach ($result as $node) {
          $matches[$node->title . " [$node->nid]"] = check_plain($node->title);
        }
      }
    
      drupal_json_output($matches);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-18
      • 2011-12-30
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2014-10-15
      相关资源
      最近更新 更多