Quantcast
Channel: Lecciones Prácticas » Drupal
Viewing all articles
Browse latest Browse all 22

Drupal para tontos (II): urls amigables con pathauto, theming de Views, etc

$
0
0

Ayer os conté cómo crear content types complejos con el módulo noderefURL. Como ejemplo creamos fichas de personas con datos propios y galería de fotos relacionada. Nuestro ejemplo es muy mejorable, veamos por qué:

1. Mejorar la URL: si visitamos el nodo de ejemplo que creamos en el anterior post, veremos que la URL es similar a:
www.tusitio.com/node/14. Esta URL es poco descriptiva. Para mejorarla usaremos los módulos Token, Path (instalado por defecto en Drupal 6) y Pathauto

2. Crear una categoría de menú para mostrar un listado de fichas: hemos creado una ficha y la hemos visto. Pero… ¿cómo veremos un listado de todas las fichas? ¿Cómo se ordenará esta visualización? ¿y si queremos tener una visualización “especial” del listado de fichas? Para ello usaremos el módulo Views

3. Crear “subcategorías” de fichas basándonos, por ejemplo, en el género. ¿Cómo añadir esta información a las fichas? Para ello usaremos el Módulo Taxonomy (ya instalado en Drupal 6). Si deseas puedes consultar este estupendo manual de taxonomy para drupal.

Configurando pathauto y URL’s automáticas

Vamos a empezar instalando y activando todos los módulos enumerados anteriormente. A continuación vamos a ir a /admin/build/path/pathauto y desplegaremos los Node path settings. En esta sección, en Patter for all Ficha paths ponemos fichas/[titler-raw].

pathauto drupal node path settings

Para que nuestro nodo de ejemplo tenga una URL de este tipo deberemos editarlo, desplegar las ULR path settings y marcar Automatic alias. La URL del nodo será ahora del tipo /ficha/miguel-martín.

pathauto drupal tilde

Si os fijáis, esta URL contiene una tilde. Como deseo eliminar las tildes de las URL’s, vuelvo a las opciones de pathauto y marco, en General Settings la opción Reduce strings to letters and numbers from ASCII-96.

Si deseo que funcionen tanto /ficha/miguel-martín como /ficha/miguel-martin deberé marcar, además, en las Update action de General Settings, la opción Create a new alias. Leave the existing alias functioning.

pathauto configuration drupal

Si ya tenía muchos nodos creados sin asignar url’s, puedo marcar la opción Bulk generate aliases for nodes that are not aliased y se generarán de forma automática estas URL’s. ¿No es genial?

Creando un listado de “Fichas” usando Views

Ahora vamos a jugar con el módulo Views para que al insertar la url /ficha nos liste todos los nodos de este tipo. Veamos cómo (si queréis leerlo en inglés, podéis hacerlo en este excelente tutorial).

Empezamos yendo al menú de Views (/admin/build/views) y pulsamos Add. Nos solicita varios datos (ver siguiente imagen):

drupal views add new view

Pulsamos Next.

Lo próximo que vamos a hacer es añadir campos (Add Fields) sobre qué deseamos mostrar. En mi caso marco:
* Content-foto (field_foto) [OJO! Cuando lo añadas, la última opción es "FORMAT" y debe tener seleccionado Image para que la imagen se muestre como tal ]
* Node: Link
* Node: Path
* Node: Title

Y pulso “add”.

Ahora tengo que añadir un FILTRO (Filter) para que esta vista sólo me muestre los nodos que me interesann.
* Filtro por Node Type == ‘ficha’. (elegimos en el filtro la opción Node: Type)

taxonomy filter drupal

A continuación hay que crear un Display para esta vista. Puede ser tanto una página, como un bloque, como un feed. En mi caso crearé una página (Page), pero perfectamente podría ser un bloque. Los matices entre página, bloque, feed, etc, los podéis leer en el manual del módulo Views.

Bien, pulsamos en Add Display. Veremos que en la parte inferior aparece la opción de darle un Path. Pulsamos sobre None y en el campo que aparece la URL, insertamos la palabra ‘ficha’. Se han marcado los pasos en la siguiente imagen (click para ampliarla):

drupal views add display page

Además, si nos fijamos, aparece la consulta (query) mysql que genera esta vista. En mi caso la consulta es:

SELECT node.nid AS nid,
   node_data_field_foto.field_foto_fid AS node_data_field_foto_field_foto_fid,
   node_data_field_foto.field_foto_list AS node_data_field_foto_field_foto_list,
   node_data_field_foto.field_foto_data AS node_data_field_foto_field_foto_data,
   node_data_field_foto.delta AS node_data_field_foto_delta,
   node.type AS node_type,
   node.vid AS node_vid,
   node.title AS node_title
 FROM drup_node node 
 LEFT JOIN drup_content_field_foto node_data_field_foto ON node.vid = node_data_field_foto.vid
 WHERE node.type in ('ficha')

También aparece una previsualización (preview) de cómo se ve el resultado de la ficha:
drupal views page display preview

Dando estilo a los Page Display’s creados con Views usando el módulo Theme Developer

Ya hemos creado nuestra nueva vista. Veamos qué aspecto tiene:

drupal preview

Si os fijáis, en la parte inferior derecha aparece una ventanita negra (Drupal Themer Information), que forma parte del paquete Theme Developer. Este paquete resulta de mucha utilidad cuando estamos creando temas. Nos dice qué fichero está produciendo esa salida (en este caso, es el views-view-fields.tpl.php).

A continuación vamos a personalizar ese fichero. Deseamos personalizarlo SOLO para esta vista, y no para las demás. Por tanto deberemos crear un NUEVO fichero para darle el estilo que deseemos a nuestro listado de fichas. Sin embargo, aun nos queda una duda: ¿cómo nombrar a ese nuevo fichero?

Entre los nombres propuestos por Drupal en esta View para las Row style output elijo views-view-fields–listafichas–page-1.tpl.php y pulso Rescan Template Files. Aparecerá en negrita el nuevo fichero usado para formatear la vista:

drupal views module template scan

Para empezar es bueno que se muestren los valores de los fields “en bruto” (el vector) y asi a partir de ahí ir jugando. Para ello, prueba el siguiente código (presta atención a las últimas líneas):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
// $Id: views-view-fields.tpl.php,v 1.6 2008/09/24 22:48:21 merlinofchaos Exp $
/**
 * @file views-view-fields.tpl.php
 * Default simple view template to all the fields as a row.
 *
 * - $view: The view in use.
 * - $fields: an array of $field objects. Each one contains:
 *   - $field->content: The output of the field.
 *   - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
 *   - $field->class: The safe class id to use.
 *   - $field->handler: The Views field handler object controlling this field. Do not use
 *     var_export to dump this object, as it can't handle the recursion.
 *   - $field->inline: Whether or not the field should be inline.
 *   - $field->inline_html: either div or span based on the above flag.
 *   - $field->separator: an optional separator that may appear before a field.
 * - $row: The raw result object from the query, with all data it fetched.
 *
 * @ingroup views_templates
 */
?>
<?php foreach ($fields as $id => $field): ?>
  <?php if (!empty($field->separator)): ?>
    <?php print $field->separator; ?>
  <?php endif; ?>
 
  <<?php print $field->inline_html;?> class="views-field-<?php print $field->class; ?>">
    <?php if ($field->label): ?>
      <label class="views-label-<?php print $field->class; ?>">
        <?php print $field->label; ?>:
      </label>
    <?php endif; ?>
      <?php
      // $field->element_type is either SPAN or DIV depending upon whether or not
      // the field is a 'block' element type or 'inline' element type.
      ?>
      <<?php print $field->element_type; ?> class="field-content"><?php print $field->content; ?></<?php print $field->element_type; ?>>
  </<?php print $field->inline_html;?>>
<?php endforeach; ?>
 
<?php
//print print_r(array_keys(get_defined_vars()), 1);
//print print_r(array_keys($fields))
 
// O si tienes instalado el módulo developer, usa la función dpm o  dprint_r:
echo "<br />".dpm($fields);."<br />";

Esta función dsm nos crea una caja amarilla con la información de las variables (fields) que podemos usar:

drupal views module dsm function

Por ejemplo podemos acceder a la variable field_foto_fid, que es la que contiene la “imagen de perfil” de la ficha con:

print "<pre>".print_r($fields['field_foto_fid']->content)."

“;

¡A partir de este punto las posibilidades son ilimitadas!

En vez de escribir un rollo enorme, podéis ver este completo screencast sobre theming con views.


Viewing all articles
Browse latest Browse all 22

Trending Articles