как сделать заголовок контента уникальным - PullRequest
6 голосов
/ 26 июня 2010

Я новичок в drupal и хочу, чтобы заголовок моего контента был уникальным, поэтому есть ли какой-нибудь модуль для него, или я могу реализовать автозаполнение для просмотра моего прошлого названия заголовка. пожалуйста, дайте ответ подробно

Заранее спасибо:)

Ответы [ 2 ]

4 голосов
/ 26 июня 2010

Вы можете использовать http://drupal.org/project/unique_field модуль. Он выполняет дополнительную проверку, когда узел создается или обновляется пользователем, чтобы требовать, чтобы заголовок узла или другие указанные поля были уникальными.

0 голосов
/ 20 апреля 2015

Сценарий # 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);
}
...