如何使内容的标题独一无二

时间:2010-06-26 13:08:01

标签: drupal drupal-6

我是drupal的新手,我希望我的内容标题是唯一的,因此有任何可用的模块,或者我是否可以实现自动完成功能来查看我过去的标题名称。 请详细给出答案

提前致谢:)

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

场景#1 - 唯一节点

如果您正在使用Drupal 7

,那么

hook_node_validate()就是您所需要的

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

/**
 * 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()& {4}}可以帮助您在使用Drupal 7时自动完成节点标题。

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

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

/**
 * 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);
}