То, что опубликовал Grayside, будет работать ... до тех пор, пока у вас нет двух узлов с одинаковым названием. Другими словами, если вы хотите сделать то, что предложил Грейсайд, вы должны знать, что nid не является полностью неважным. Функция nodereference_autocomplete_validate () делает две вещи. Он проверяет, существует ли соответствующий узел, и если да, то передает nid, устанавливая его в массив $form_state
. Если он не может найти узел, он установит ошибку. Если nid присутствует, он будет использован для получения узла, который также быстрее, код здесь:
preg_match('/^(?:\s*|(.*) )?\[\s*nid\s*:\s*(\d+)\s*\]$/', $value, $matches);
if (!empty($matches)) {
// Explicit [nid:n].
list(, $title, $nid) = $matches;
if (!empty($title) && ($n = node_load($nid)) && $title != $n->title) {
form_error($element[$field_key], t('%name: title mismatch. Please check your selection.', array('%name' => t($field['widget']['label']))));
}
}
Это просто проверяет, есть ли nid, и проверяет, совпадает ли этот узел с заголовком, если да, то передается nid.
2-й вариант немного медленнее, но здесь могут возникнуть ошибки. Если вы проследите за выполнением, вы увидите, что if попытается найти узел, основанный только на заголовке, и возьмет первый соответствующий узел. В результате, если у вас два узла с одинаковым названием, всегда будет использоваться один из них. Это не может быть проблемой для вас, но дело в том, что вы никогда не узнаете, если это произойдет. Все будет отлично работать, и пользователь будет думать, что он выбрал нужный ему узел. Это может быть так, но он, возможно, также выбрал не тот узел.
Короче говоря, вы можете избавиться от nid в обратном вызове автозаполнения, но у него есть 2 недостатка:
- производительность (маленькая)
- Неопределенность в выборе правильного узла.
Так что вы должны подумать об этом, прежде чем идти по этому пути. Тем более, что вы, скорее всего, не сможете найти проблему выбора неправильных узлов, если это произойдет. Еще одна вещь, о которой следует знать, это то, что показ nid также приносит некоторую ценную информацию пользователям, быстрый способ поиска узла, если они сомневаются, что это тот, который им нужен, если несколько узлов имеют одинаковые заголовки. .