Cómo personalizar los enlaces de nodereference_url

Nodereference_url permite indicar que se agreguen enlaces para crear un hijo al final del nodo padre.

Por ejemplo, si hay un nodo proyecto, se puede crear un nodo foto, con un campo nodereference que apunte a un determinado proyecto. Nodereference_url permite agregar automáticamente al nodo proyecto un enlace que conduzca a la creación de un nodo foto.

Esto puede ser cómodo. De ese modo podemos tener nodo foto, nodo plano, nodo noticia, nodo inscripcíon, etc, cada uno con un campo nodereference apuntando a proyecto. Y, en el nodo proyecto, automáticamente enlaces que permiten crear estos nodos hijos.

Los nodos automáticos son dispuestos en orden alfabético. ¿Qué tal si deseamos otro orden?. Además, ¿qué tal si queremos que se muestre el enlace sólo en algunas circunstancias y no en otras?.

nodereference_url_create_link
El módulo nodereference_url contiene la función nodereference_url_create_link($node, $field_name, $type_name, $attributes), donde:

  • $node es el nodo que contiene a los enlaces
  • $field_name es el nombre del campo nodereference que apunta al padre (por ejemplo field_foto_proyecto)
  • $type_name es el nombre del tipo (por ejemplo foto)
  • $attributes, opcionalmente, permite asignar atributos al enlace.

Se puede usar en el template del nodo que contiene los enlaces. Por ejemplo en node-proyecto.tpl.php:

...
<div class="nodereference_url_links">
  <ul class="links">
    <?php
      if (!in_array('manager', array_values($user->roles))) {
        if ($nid=misc_get_inscripcion_en_proyecto($node->nid)) {
          echo '<li>'.l(t('Está inscrito en este proyecto'), 'node/'.$nid).'</li>';
        } else {
          $field_name = 'field_inscripcion_proyecto';
          $type_name = 'inscripcion';
          $attributes = array();
          echo '<li>'.nodereference_url_create_link($node, $field_name, $type_name, $attributes).'</li>';
        }
      }
      echo '<li>'.nodereference_url_create_link($node, 'field_foto_proyecto', 'foto').'</li>';
      echo '<li>'.nodereference_url_create_link($node, 'field_plano_proyecto', 'plano').'</li>';
      echo '<li>'.nodereference_url_create_link($node, 'field_noticia_proyecto', 'noticia').'</li>';
    ?>
  </ul>
</div>

<?php print $links; ?>
...

En este ejemplo, el enlace Crear inscripción se muestra sólo en caso que no se haya creado una inscripción antes. misc_get_inscripcion_en_proyecto(), definida en el módulo misc, devuelve el nodo de tipo inscripción que se haya creado por este usuario para este proyecto, o FALSE en caso contrario.

Los enlaces Crear foto, Crear planos y Crear noticia se colocan manualmente como se prefiera.

Comentarios

Entradas populares de este blog

Debug con Xdebug y Aptana (y Notepad++)

CSS3 para mejorar el breadcrumb de un tema Zen

Drupal sí, drupal no