Opublikowany przez Grayside będzie działał ... o ile nie masz dwóch węzłów o tym samym tytule. Innymi słowy, jeśli chcesz zrobić tak, jak proponował Grayside, musisz mieć świadomość, że nid nie jest całkowicie nieważny. Funkcja nodereference_autocomplete_validate() robi dwie rzeczy. Sprawdza, czy istnieje węzeł, który pasuje, a jeśli tak, przechodzi przez nid, ustawiając go na tablicę $form_state
. Jeśli nie może znaleźć węzła, ustawi błąd. Jeśli nid jest obecny, będzie on używany do dostać węzeł, który również jest szybsze, kod jest tutaj:
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']))));
}
}
To właśnie sprawdza, czy istnieje nid i sprawdza czy ten węzeł meczów z title, jeśli tak, to nid jest przekazywany dalej.
Druga opcja jest nieco wolniejsza, ale tutaj błędy mogą się zdarzyć. Jeśli będziesz śledzić wykonanie, zobaczysz, że jeśli spróbujesz znaleźć węzeł na podstawie samego tytułu i weźmie pierwszy zgodny węzeł. Wynikiem tego jest to, że jeśli masz dwa węzły o tym samym tytule, jeden z nich będzie zawsze używany. To może nie być problem dla ciebie, ale chodzi o to, że nigdy się nie dowiesz, czy tak się stanie. Wszystko będzie działało dobrze, a użytkownik pomyśli, że wybrał węzeł, który chciał. Może tak być, ale równie dobrze mógłby wybrać niewłaściwy węzeł.
Tak w skrócie, to może pozbyć NID w zwrotnego autouzupełniania, ale ma 2 wady:
- wydajność (mało)
- niepewności w wyborze odpowiedniego węzła.
Musisz się nad tym zastanowić, zanim pójdziesz tą drogą. Zwłaszcza, że najprawdopodobniej nie będziecie w stanie znaleźć problemu wyboru niewłaściwych węzłów, jeśli tak się stanie. Inną rzeczą, o której należy pamiętać, jest to, że nid pojawia się, przynosi również pewne cenne informacje do użytkowników, szybki sposób na sprawdzenie węzła, jeśli mają wątpliwości, czy to jest to, czego chcą, jeśli kilka węzłów ma podobne tytuły .
To miłe, że usuwa on [NID: 123] z widokiem po wybraniu węzła, ale [nid: 123] nadal pojawia się podczas ładowania węzła do edycji . Chciałbym móc usunąć nid z wyświetlania podczas edycji węzła. Ok, teraz widzę to: http://stackoverflow.com/questions/2743924/how-remove-node-id-nidn-in-nodereference-fields –