Lo que Grayside ha publicado funcionará ... siempre y cuando no tenga dos nodos con el mismo título. En otras palabras, si desea hacer lo que Grayside ha propuesto, debe tener en cuenta que el nid no es del todo irrelevante. La función nodereference_autocomplete_validate() hace dos cosas. Verifica si hay un nodo que coincida, y si es así, pasa el nid on, configurándolo en la matriz $form_state
. Si no puede encontrar un nodo, establecerá un error. Si el NID está presente, se utiliza para obtener el nodo, que también es más rápido, el código está aquí:
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']))));
}
}
Esto se comprueba para ver si hay un nid y comprueba si ese nodo coincide con el título, si es así, se pasa el nid.
La segunda opción es un poco más lenta, pero es aquí donde pueden ocurrir errores. Si sigue la ejecución, verá que intentará encontrar un nodo basándose solo en el título y tomará el primer nodo que coincida. El resultado de esto es que si tiene dos nodos con el mismo título, uno de ellos siempre será utilizado. Puede que esto no sea un problema para ti, pero el hecho es que nunca sabrás si esto sucede. Todo funcionará bien y el usuario pensará que seleccionó el nodo que quería. Este podría ser el caso, pero bien podría haber elegido el nodo equivocado.
Así que en resumen, se puede deshacerse del NID en la devolución de llamada de autocompletar, pero tiene 2 inconvenientes:
- rendimiento (poco)
- incertidumbre en la selección del nodo correcto.
Así que tienes que pensar en ello, antes de seguir esta ruta. Especialmente, ya que lo más probable es que no pueda encontrar el problema de la selección de los nodos incorrectos, en caso de que ocurra. Otra cosa a tener en cuenta, es que el nid que se muestra, también trae información valiosa a los usuarios, una forma rápida de buscar el nodo, si tienen dudas si es el que desean, si varios nodos tienen títulos similares .
Esto es bueno, ya que elimina la [nid: 123] de la vista después de seleccionar un nodo, pero el [nid: 123] todavía aparece al cargar el nodo para editarlo . Me gustaría poder eliminar el nid para que no se muestre cuando edite el nodo. Ok, ahora veo esto: http://stackoverflow.com/questions/2743924/how-remove-node-id-nidn-in-nodereference-fields –