¿Cómo implementar referencias de nodo bidireccionales?

20

El módulo de referencia de nodo (un componente de CCK) proporciona una excelente manera de crear una referencia de un nodo a otro. ¿Cuál es la mejor manera de exponer una relación bidireccional entre los dos? Ejemplo a continuación:

Por ejemplo, en un sistema de seguimiento de tickets con dos tickets (nodos) A y B, puede crear una referencia de nodo desde el ticket A -> B y marcar B como elemento secundario. Al ver el boleto A, sería trivial mostrar esta información. Sin embargo, también me gustaría mostrar esta relación al ver el boleto B y mostrar el boleto A como padre.

Este mismo requisito también se aplicaría en situaciones no jerárquicas (tickets C y D) con una referencia de C -> D, la relación debe exponerse en el ticket D y en C.

Markdorison
fuente

Respuestas:

25

Hay muchos módulos disponibles, su kilometraje puede variar:

BackReference (solo Drupal 6)

NodeReferrer (versión beta de Drupal 7)

Relaciones de nodo (solo Drupal 6)

Referencias de nodo correspondientes (versión estable de Drupal 7)

Referencias de entidades correspondientes (versión de desarrollo de Drupal 7)

Dependencia de contenido (versión estable de Drupal 7)

tim.plunkett
fuente
Las referencias de nodo correspondientes funcionan perfectamente para mí, y una vez que CER esté estable, cambiaré a eso.
4

Para Drupal 6, la mejor opción es probablemente el módulo NodeReferrer . Para Drupal 7, la relación encaja perfectamente, pero aún no está lista.

Pierre Buyle
fuente
Siempre uso el módulo NodeReferrer, por lo que vale
electblake
1
El módulo de relación ahora está listo, desde julio del '12
ted.strauss
Sí, la relación parece ser una opción bastante poderosa. De lo contrario, CER también es una buena opción ligera.
Shivams
4

Si está utilizando Drupal 7 / Views, puede construir una relación 'inversa' para obtener una lista de nodos que se refieren a un nodo determinado (o, tal vez, usuarios que se refieren a un nodo determinado). Consulte el parche en este número: http://drupal.org/node/1043260

En mi opinión, a menos que necesite la relación inversa explícita y preconstruida almacenada en la base de datos (esto a veces puede ser útil por razones de rendimiento), usar una de las otras soluciones es excesivo. Siempre puede buscar una relación en su propia consulta SQL si necesita ...

[Editar: desde que originalmente escribí esta publicación, el parche en el tema anterior se ha comprometido con Referencias para D7, y debería ser la forma preferida de referencia inversa (funciona muy bien cuando simplemente se necesitan listas de nodos o usuarios que hacen referencia a cierto otro nodo o usuario) .]

[Edición 2: Si está usando Referencia de entidad, parece que la solución preferida es usar Referencias de entidad correspondientes , y también está la Sincronización de campo de referencia de entidad menos utilizada .]

geerlingguy
fuente
Parece que las referencias quedarán obsoletas en favor de la referencia de entidad. No estoy seguro de dónde deja esa respuesta.
Jay
1
Las referencias seguirán existiendo hasta que D7 sea un recuerdo distante ... pero si está utilizando ER, puede usar las referencias de entidades correspondientes para hacer lo mismo que las referencias proporcionan de fábrica.
geerlingguy
3

En Drupal 7 (que usted indicó) parece que la solución es usar el Módulo de referencia de entidad en combinación con el módulo de Sincronización de campo de referencia (Entidad) que agrega la funcionalidad necesaria para mantener sincronizadas las relaciones.

Lo mismo se puede lograr con el Módulo de referencias con el módulo cnr : esta solución funciona (la estoy usando en un sitio de Drupal 7 actualmente), pero se está volviendo obsoleta / obsoleta a favor de la primera solución que di.

Todas las otras soluciones mencionadas en las respuestas anteriores son relevantes solo para Drupal 6 (a excepción de la Relación que tiene el potencial de convertirse en un gran módulo, pero en este momento, realmente no hace mucho y tiene muchos problemas).

Moshe Eshel
fuente
Votando esta respuesta porque es reciente y Moshe es un miembro importante de la comunidad Drupal. En la respuesta aceptada, el único módulo D7 estable es CNR, y eso se está depreciando a favor de CER (que aún no tiene una versión estable).
aendrew
1
La relación no ha tenido muchos problemas incluso en marzo. Y Moshe Eshel drupal.org/user/168876 ! = Moshe Weitzman drupal.org/user/23 (mira eso uid ...) por cierto.
@chx Me sorprendí al verme destacado como miembro senior ... Estoy tratando de ser un mejor contribuyente, pero no creo que alguna vez llegue al nivel del Moshe original. Con respecto al módulo de Relación, basé eso en los comentarios de alguien que sabe (no nombraré nombres): no he tenido la oportunidad de probarlo realmente en ese momento, y confié en esa opinión. Actualmente estoy trabajando en un proyecto D7, creo que lo necesito, así que daré mi opinión actualizada aquí cuando termine.
Moshe Eshel
2

Alternativamente, si está trabajando en una implementación personalizada y desea una forma directa de hacer referencia, puede conectarse nodeapi, escuchar la saveoperación y luego actualizar programáticamente el nodo referenciado.

enikola
fuente
0

Puede usar el módulo de dependencia de contenido .

Le proporciona referencias inversas a través de la pestaña y admite los siguientes módulos: referencia de nodo / referencia de entidad .

drupal
fuente
1
¿No estás realmente seguro de cómo se puede usar esto para crear referencias mutuas?
mpdonadio