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