Lista con el número de nodos publicados de cada tipo

Drupal 7

Vamos a hacer una lista con el número de nodos que tenemos publicados de cada tipo para colocar en cualquier lugar de nuestra plantilla. Para ello necesitamos 2 cosas:

  1. Añadir el template_preprocess_page en nuestro template.php
  2. "Pintar" la lista donde queramos

Partimos de la base de que tenemos un sub-theme, aunque en realidad podemos hacerlo modificando cualquier plantilla aunque no es muy recomendable, ya que no podremos hacer actualizaciones de la plantilla. En cualquier caso, editamos el archivo template.php de nuestra plantilla y añadimos (si es que no está ya definida)  la función template_preprocess_page, sustituyendo la plabra template por el nombre de nuestra plantilla

MI_PLANTILLA_preprocess_page(&$variables){
  //aquí irá nuestro código
}

Ésta función recibe el parámetro $variables, que es un array asociativo cuyas claves son los nombres de las variables que después tendremos disponibles en los archivos .tpl de la plantilla. El caracter & en el parámetro de la función significa que se pasa por referencia, de tal manera que cualquier modificación que se haga a esa variable dentro de la función, persistirá fuera de la función.

Lo que vamos a hacer es añadir una clave al array $variables que contenga un array con los contadores de cada tipo de nodo. Ésto lo podemos hacer con una simple query a la base de datos

MI_PLANTILLA_preprocess_page(&$variables){
  $variables['count'] = db_query("SELECT count(*) count, type FROM {node} WHERE status = 1 GROUP BY type")->fetchAllAssoc('type');

}

Mediante la función db_query estamos lanzando una consulta a la base de datos donde contamos todos los registros de la tabla node agrupados por el campo type (tipo de contenido). Luego, al objeto resultante le aplicamos el método fetchAllAssoc que transforma el resultado en un array asociativo, cuyas claves son los valores del campo que le pasamos como parámetro, en nuestro caso el campo "type". De esta manera si viésemos el contenido de nuestro $variables['count'], sería algo parecido a esto:

Array
(
    [article] => stdClass Object
        (
            [count] => 13
            [type] => article
        )

    [galeria] => stdClass Object
        (
            [count] => 1
            [type] => galeria
        )

    [page] => stdClass Object
        (
            [count] => 10
            [type] => page
        )
    [webform] => stdClass Object
        (
            [count] => 10
            [type] => webform
        )
)

Ahora solo falta presentar los datos en el lugar escogido de nuestra plantilla, por ejemplo, en algún lugar de page.tpl.php Cabe destacar que no tenemos ninguna entrada en el array para aquellos tipos de contenido para los que aún no hay nodos publicados, por lo que tendremos que validar si existe cada clave, y de lo contrario, poner 0

<ul class="mi-lista">
              <li><strong><?php print (isset($count['article'])? $count['article']->count : 0); ?></strong> Artículos</li>
              <li><strong><?php print (isset($count['video'])? $count['video']->count : 0); ?></strong> Vídeos</li>
              <li><strong><?php print (isset($count['galeria'])? $count['galeria']->count : 0); ?></strong> Galerías</li>
</ul>

Espero que os sirviera de ayuda. Saludos

Añadir nuevo comentario

Plain text

  • No se permiten etiquetas HTML.
CAPTCHA
Esta pregunta es para evitar el envío automático de spam