То, что опубликовал Грейсайд, будет работать ... до тех пор, пока у вас нет двух узлов с одинаковым названием. Другими словами, если вы хотите сделать то, что предлагает Грейсайд, вам нужно знать, что нид не совсем неважен. Функция 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 передается.
Второй вариант немного медленнее, но именно здесь могут возникать ошибки. Если вы проследите за выполнением, вы увидите, что if попытается найти узел, основываясь только на заголовке, и возьмет первый соответствующий узел. Результатом этого является то, что если у вас есть два узла с одинаковым заголовком, один из них всегда будет использоваться. Это может не быть проблемой для вас, но дело в том, что вы никогда не узнаете, если это произойдет. Все будет работать нормально, и пользователь будет думать, что он выбрал нужный узел. Возможно, так оно и есть, но с тем же успехом он мог выбрать не тот узел.
Короче говоря, вы можете избавиться от nid в обратном вызове автозаполнения, но у него есть 2 недостатка:
- производительность (немного)
- неуверенность в выборе правильного узла.
Так что вам нужно подумать об этом, прежде чем идти по этому пути. Тем более, что проблему выбора неправильных узлов вы, скорее всего, не сможете обнаружить, если это произойдет. Еще одна вещь, о которой следует помнить, это то, что появление nid также приносит некоторую ценную информацию пользователям, быстрый способ поиска узла, если они сомневаются, что это тот, который им нужен, если несколько узлов имеют похожие названия. .
person
googletorp
schedule
04.10.2009