Aug 25

Como obtener los nodos de un tipo específico en Drupal 6 desde API

Tagged with:
Categories: Sindicados
Estadísticas: 341 consultas Comments Off

Introducción.

En algunos casos puede ser útil obtener desde un fragmento de código PHP utilizando el API oficial, los nodos de un portal basado en Drupal 6 que correspondan con un tipo específico (file, story, event, page, ...).  Esto se puede hacer fácilmente de la siguiente manera.

Procedimiento.

Obtener el listado con la información general de los nodos del tipo específico.  Para esto se consulta la tabla node que contiene la siguiente información de los nodos.

nid         int(10)           # ID del nodo.
vid         int(10)           # ID de la versión del nodo.
type        varchar(32)       # Tipo del nodo.
title       varchar(255)      # Título.
uid         int(11)           # ID del propietario.
status      int(11)           # Estado (publicado = 1; sin publicar/oculto = 0)
created     int(11)           # Timestamp de la creación del nodo.
changed     int(11)           # Timestamp de la modificación del nodo.
comment     int(11)           # Estado de comentarios (desactivados = 0; sólo lectura = 1; activados = 2).
promote     int(11)           # Promocionado a la página principal (no = 0; si = 1).
moderate    int(11)           # Moderado
(no = 0; si = 1).
sticky      int(11)           # Pegajoso (no = 0; si = 1).
language    varchar(12)       # Código del idioma.
tnid        int(10)
translate   int(11)

La consulta básica se puede realizar de la siguiente manera.

$sql = "SELECT nid
        FROM {node}
        WHERE type = 'TIPO_DE_NODO' AND
              status = 1
        ORDER BY created DESC";

$results = db_query($sql);

Posteriormente se iteran los resultados obtenidos de la consulta y se carga la información completa de cada uno de los nodos.

while ($result = db_fetch_object($results))
{
    $node = node_load($result -> nid);
}

El contenido del nodo recuperado dependerá en cierta medida de los módulos instalados que alteran su estructura.  Para mostrar por ejemplo el título, la fecha de creación, el mensaje y la fecha de modificación de una noticia se utiliza el siguiente fragmento.

echo 'Titulo: ' . $node -> title . '<br />';
echo 'Fecha: ' . format_date($node->created) . '<br />';
echo 'Mensaje: ' . $node->body . '<br /><br /><hr /><br />';
echo 'changed on: ' . format_date($node->changed, 'custom', 'Y-m-d H:i:s O') . '<br />';

Enlaces.

Aug 19

Como personalizar la barra de idiomas en Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 343 consultas Comments Off

Introducción.

Después de instalar y configurar los módulos para mantener las traducciones del contenido en el portal basado en Drupal 6, el siguiente paso era crear la barra de banderas que permitiera cambiar fácilmente entre los distintos idiomas del portal.

BarraIdiomas

Procedimiento.

  1. Instalar el módulo Consistent Language Interface que provee al bloque Consistent Language Interface block (languageinterface).
    http://drupal.org/project/languageinterface
  2. Editar page.tpl.php e incluír el siguiente fragmento de código donde se desea la barra de banderas.
    <?php
        $flags = module_invoke('languageinterface', 'block', 'view', 0);
        print $flags['content'];
    ?>
  3. Personalice la presentación de la barra con CSS ya que su estructura es básicamente una lista no ordenada.  Para establecer la distribución horizontal como la de la imagen propuesta, agregue el siguiente código en la hoja de estilos del tema.
    #language-interface
    {
        padding: 0;
        margin: 0;
    }
    
    #language-interface li
    {
        display: inline;
        list-style-type: none;
        padding: 0;
        margin: 0px 5px 0px 0px;
        height: 12px;
    }
  4. Si desea puede además establecer estilos particulares para cada idioma, la clase CSS deberá llamarse igual que el código del idioma.  Además es posible resaltar al idioma actual utilizando la clase active.

Enlaces.

Aug 18

Personalizar el formulario de login en Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 481 consultas Comments Off

Procedimiento.

Editar el archivo template.php y agregar la siguiente función (el nombre es libre).

function phptemplate_generarFormularioLogin()
{
   $form_id = 'user_login';
   $form = array();

   $form['name'] = array(
      '#type' => 'textfield',
      '#maxlength' => USERNAME_MAX_LENGTH,
      '#required' => TRUE,
      '#attributes' => array('tabindex' => '1',
      'class' => 'registro'),
   );

   $form['pass'] = array(
      '#type' => 'password',
      '#required' => TRUE,
      '#attributes' => array('tabindex' => '2',
      'class' => 'registro'),
   );

   $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Log in'),
      '#weight' => 2,
      '#attributes' => array('tabindex' => '3')
   );

   $form['#validate'] = user_login_default_validators();
   $form['#build_id'] = sprintf('form-%s', md5(uniqid(mt_rand(), TRUE)));

   $form_state = array();

   drupal_prepare_form($form_id, $form, $form_state);
   drupal_process_form($form_id, $form, $form_state);

   $out = new stdClass;
   $out->form_start = sprintf("<form method='post' accept-charset='UTF-8' action='%s'>",
                             url('user/login'));
   $out->form_end = "</form>";

   $out->name = drupal_render($form['name']);
   $out->pass = drupal_render($form['pass']);
   $out->submit = drupal_render($form['form_id']) .

   drupal_render($form['form_build_id']) .
   drupal_render($form['submit']);

   return $out;
}

Insertar en el lugar deseado de page.tpl.php el siguiente fragmento de código o su correspondiente personalización.

<?php $login_form = phptemplate_generarFormularioLogin(); ?>
<?php print $login_form -> form_start; ?>
    Usuario &nbsp; <?php print $login_form->name; ?> &nbsp;&nbsp;&nbsp;
    Contraseña &nbsp; <?php print $login_form->pass; ?>&nbsp;&nbsp;
    <?php print $login_form->submit; ?>
<?php print $login_form->form_end; ?>

Enlaces.

Aug 13

Personalizar el formulario de búsqueda en un tema de Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 364 consultas Comments Off

Introducción.

En algunas ocasiones no es suficiente con el bloque de búsquedas de Drupal y es necesario incluír un formulario de búsquedas en la plantilla del tema con un estilo muy específico.

Las búsquedas en Drupal utilizan un sistema de llaves o claves para impedir que sean consumidas desde fuera del sitio, así que escribir un formulario propio con el action direccionado no es una buena alternativa.

Implementación.

  1. Activar el formulario de búsquedas en el tema.
    1. Acceda el menú de administración de temas (?q=admin/build/themes).
    2. Haga clic sobre el enlace Configurar frente al tema elegido.
    3. Seleccione la casilla Bloque de búsqueda.
    4. Presione el botón Guardar configuración.
  2. Copie el archivo modules/search/search-block-form.tpl.php a la carpeta del tema con el nombre search-theme-form.tpl.php.
  3. Edite page.tpl.php del tema e incluya la etiqueta <?php print $search_box; ?> donde desee que aparezca el campo de búsqueda en el tema.
  4. Edite el archivo search-theme-form.tpl.php con el formulario de búsqueda personalizado.
    1. No es necesario incluír las etiquetas <form> ya que estas se incluyen automáticamente.
    2. El ID del formulario generado es search-theme-form.
    3. El ID del campo de las palabras clave deberá ser edit-search-theme-form-1.
    4. El nombre del campo de las palabras clave deberá ser search_theme_form.
    5. Incluya esta etiqueta en cualquier lugar del archivo <?= $search['hidden']; ?>.

Enlaces.

Aug 12

Como crear nuevas regiones en Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 357 consultas Comments Off

Introducción.

Las regiones en Drupal permiten la ubicación de los bloques en la página.  Su distribución se realiza generalmente en el archivo page.tpl.php del tema.

Por defecto se incluyen las siguientes regiones.

  1. Columna izquierda (left).
  2. Columna derecha (right).
  3. Contenido central (content).
  4. Cabecera (header).
  5. Pies de página (footer).

Agregar nuevas regiones al tema.

Es posible según la complejidad del tema que sea necesario agregar nuevas regiones para manipular la distribución del contenido del sitio con mayor precisión y granularidad.

Hasta la versión 5 de Drupal esto se realizaba sobreescribiendo la función phptemplate_regions() del archivo template.php, sin embargo este estilo de configuración fue modificado para las versiones 6 y posteriores.

Ahora la configuración de las regiones se realiza en el archivo TEMA.info de la siguiente manera.

regions[left] = Columna izquierda
regions[right] = Columna derecha
regions[content] = Contenido
regions[header] = Cabecera
regions[footer] = Pies de pagina
regions[menu] = Menu horizontal

Enlaces.

Aug 12

Personalizar las “migas de pan” en Drupal

Tagged with:
Categories: Sindicados
Estadísticas: 221 consultas Comments Off

Introducción.

Las "migas de pan" o breadcrumbs es aquella sección de los sitios web que lleva un registro jerárquico de los niveles del sitio que se han visitado permiténdonos regresar a través de ellos de manera asíncrona.  Un ejemplo de breadcrumbs podría ser este.

Inicio > Software > Web.

Esto significaría que se está en la sección Web que depende del Software y que pende del inicio del sitio.

Breadcrumbs en Drupal.

Drupal provee automáticamente esta facilidad, él mismo va generando las "migas de pan" y las ubica donde se inserte la siguiente etiqueta, comúnmente en page.tpl.php.

<?php print $breadcrumb ?>

Por defecto Drupal se hace cargo de generar el contenido HTML asociado a las "migas de pan" con un estilo por defecto.  En algunas ocasiones este estilo no se adecúa a las necesidades propias.

Personalizar las breadcrumbs en Drupal.

Para hacer esto es necesario crear o editar el archivo template.php ubicado en el tema activo y agregar o modificar la definición de la función phptemplate_breadcrumb($breadcrumb) donde $breadcrumb es un arreglo y cada una de sus celdas corresponde con un segmento de las "migas de pan".

/**
 * Return a themed breadcrumb trail.
 *
 * @param $breadcrumb - An array containing the breadcrumb links.
 * @return a string containing the breadcrumb output.
 */
function phptemplate_breadcrumb($breadcrumb)
{
    if (empty($breadcrumb))
        return "";

    $str = "<ul>";

    $length = count($breadcrumb);

    for($i=0; $i<$length; $i++)
    {
        $bc = $breadcrumb[$i];
        $class = ($i < $length - 1) ? "" : "class='ruta_final'";

        $str .= "<li {$class}>{$bc}</li>";
    }

    $str .= "</ul>";

    return $str;
 }

El ejemplo anterior crea las "migas de pan" como un UL donde cada LI corresponde con una sección visitada y cuya última sección tiene además una clase CSS llamada ruta_final.

Aug 12

Como referenciar las imagenes de un tema en Drupal

Tagged with:
Categories: Sindicados
Estadísticas: 203 consultas Comments Off

Imágenes a partir de las hojas de estilo.

Cuando se desarrolla un tema la mayoría de las imágenes quedan relacionadas a través de las hojas de estilos (CSS) sus rutas son relativas automáticamente al directorio del tema y se incluyen, al igual que los archivos Javascript, en el archivo *.info del tema.

; $Id: dm.info,v 0.1 2009/08/11 11:11:00 jimezam Exp $
name = miTema
description = Esta es la descripción del tema.
version = 1.0
core = 6.x
engine = phptemplate

stylesheets[all][] = css/style.css
stylesheets[all][] = css/layout.css

scripts[] = js/jquery-1.3.2.min.js

El ejemplo anterior hace que miTema incluya automáticamente las hojas de estilo style.css y layout.css ubicadas bajo css/ y el archivo jquery-1.3.2.min.js ubicado bajo js/.  Esto se hace exactamente donde se inserten las siguientes etiquetas, normalmente ubicadas en el <head> de page.tpl.php.

<?php print $styles; ?>
<?php print $scripts; ?>

Imágenes estáticas directamente del tema.

En otras ocasiones es necesario referenciar imágenes (<img>) u otros recursos estáticos que se encuentran ubicados en el directorio del tema activo.  Para hacer esto se utiliza el método path_to_theme del API de Drupal.

Supongamos que se desea crear una imagen con el archivo Foto.png que se encuentra ubicado en el directorio imagenes/ del tema activo.  Se debe utilizar la siguiente expresión.

<img src="<?php global $base_path; print $base_path.path_to_theme(); ?>/imagenes/Foto.png" />

Otra forma de hacerlo, con una sintaxis un poco mas resumida es utilizando las funciones directas que provee Drupal de la siguiente manera.

<img src="<?php print base_path() . path_to_theme(); ?>/imagenes/Foto.png" />

Solución de problemas.

A pesar de que no se encuentren activos los cachés de Drupal, algunas veces los cambios que se realizan en estos archivos de presentación no se reflejan cuando se refresca el sitio.  Para corregir este comportamiento es necesario limpiar el caché de datos del tema para que se generen nuevas versiones que incluyan los cambios recién realizados.

Para limpiar el caché de datos de Drupal inicie como administrador y acceda a la configuración de desempeño (?q=admin/settings/performance).

Al final de la página presione el botón Clear cached data y al terminar esta página refresque nuevamente el sitio web para observbar los cambios.

Jul 13

Actualización de portales web basados en Drupal a la versión 6.13

Tagged with:
Categories: Sindicados
Estadísticas: 190 consultas Comments Off

Introducción.

Después de actualizada la versión 5 del portal a la 6.12 o la instalación de una versión 6.x fresca, se hace necesario actualizar el portal a la nueva versión disponible, la 6.13.

Procedimiento.

  1. Realizar la copia de seguridad de la base de datos del portal.
  2. Ingresar al portal con el usuario cuyo id = 1.
  3. Modificar  la configuración del sitio poniéndolo en modo administración: ?q=admin/settings/site-maintenance.
  4. Actualizar los módulos disponibles según el módulo de update-status: ?q=admin/reports/updates.
  5. Desactivar los módulos (?q=admin/build/modules) y temas (?q=admin/build/themes) de terceros.
  6. Realizar la actualización de los archivos.
    1. $ wget http://ftp.drupal.org/files/projects/drupal-6.13.tar.gz
    2. $ rm site.old
    3. $ mv site site.old
    4. $ tar zxvf drupal-6.13.tar.gz
    5. $ mv drupal-6.13/ site
    6. $ cp -rf site.old/files site    (si no se utiliza la convención bajo sites/default).
    7. $ cp -rf site.old/sites site
    8. (web) $URL/apps/site/update.php
    9. (web) $URL/?q=admin/reports/updates
    10. rm site/install.php site/CHANGELOG.txt site/INSTALL.txt site/INSTALL.mysql.txt site/INSTALL.pgsql.txt site/LICENSE.txt site/MAINTAINERS.txt site/UPGRADE.txt
    11. $ rm drupal-6.13.tar.gz
  7. Activar los módulos (?q=admin/build/modules) y temas (?q=admin/build/themes) de terceros.
  8. Modificar  la configuración del sitio poniéndolo en línea nuevamente: ?q=admin/settings/site-maintenance.

Con esta actualización se introducen las siguientes modificaciones al esquema de actualizaciones de Drupal que se había estado siguiendo hasta la fecha.

  • Los archivos del usuario, diferentes a los de la distribución de Drupal, y a los cuales se les debe realizar copia de seguridad se encuentran en las siguientes ubicaciones.
    • sites/all/libraries.  Librerías que aplican a todos los sitios.
    • sites/all/modules.  Módulos de terceros que aplican a todos los sitios.
    • sites/all/themes.  Temas de terceros que aplican a todos los sitios.
    • sites/default/files.  Archivos de usuario de un sitio específico (default).
    • sites/default/settings.php.  Configuración de un sitio específico (default).
  • Si no se utiliza la convención bajo sites los directorios libraries, modules, themes y files se ubicarán en el directorio raíz de la distribución de Drupal, esto debe tenerse muy en cuenta ya que deberán agregarse como pasos durante la copia de seguridad y deberá tenerse extremo cuidado para evitar conflictos con los archivos del núcleo de la distribución que utilizan la mayoría de estos directorios.

Enlaces.

Jul 08

Introducción a PHPTemplate con Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 134 consultas Comments Off

Introducción.

PHPTemplate es un motor (engine) de temas desarrollado a la par de Drupal que permite la utilización de código PHP en ellas facilitando la separación entre lo concerniente al programador y lo relacionado con el diseñador web.  En la versión 6 se ubica su núcleo en themes/engines/phptemplate pero además se incluyen a otros archivos en ubicaciones según los módulos y funcionalidades que afectan.  Los nombres de los archivos que utilizan este motor obedecen al patrón *.tpl.php.

Los archivos mínimos requeridos son los siguientes.

  • page.tpl.php: contiene la distribución general de la página del tema.
  • <tema>.info: contiene la información de especificación del tema.

El archivo page.tpl.php.

En este archivo se detalla la estructura básica de la presentación de la página del tema.  Su personalización se realiza mediante la manipulación de clases utilizando CSS, además es posible definir plantillas alternativas que definen la presentación de secciones específicas del contenido: bloques (block.tpl.php), secciones (box.tpl.php), comentarios (comment.tpl.php), nodos (node.tpl.php), etc o a tipos de contenido específicos: noticias, artículos de blog, páginas, etc.

Algunas de las variables que se pueden utilizar en el head de los archivos *.tpl.php son las siguientes.

  • $head_title: título de la página.
  • $head: información de la sección head.
  • $styles: las hojas de estilo a incluírse, definidas en <tema>.info.
  • $scripts: los scripts a incluírse, definidos en <tema>.info.

También se incluyen las regiones (placeholders) que conformarán el contenido del tema.  Estas regiones deben registrarse previamente para poder ser utilizadas como tales.

  • $header: cabecera.
  • $left: columna izquierda.
  • $content: contenido (central).
  • $right: columna derecha.
  • $footer: pies de página.

Frecuentemente estas secciones deberán ser incluídas si se satisfacen ciertas condiciones, como por ejemplo, que se encuentren definidas.

<?php if($left): ?>
<div id="sidebar-left">
    <?php print $left; ?>
</div>
<?php endif; ?>

El archivo <tema>.info.

Su nombre corresponde el nombre del tema y la extensión .info, su función es la de definir la especificación y configuración básica del tema.

Este es el contenido del archivo bluemarine.info asociado con el tema con el mismo nombre incluído por defecto en Drupal.

; $Id: bluemarine.info,v 1.4 2007/06/08 05:50:57 dries Exp $
name = Bluemarine
description = Table-based multi-column theme with a marine and ash color scheme.
version = VERSION
core = 6.x
engine = phptemplate

; Information added by drupal.org packaging script on 2009-05-13
version = "6.12"
project = "drupal"
datestamp = "1242243950"

Es posible consultar mayor información al respecto en el documento Estructura del archivo .info.

Enlaces.

Jul 07

Los archivos de temas en Drupal 6

Tagged with:
Categories: Sindicados
Estadísticas: 218 consultas Comments Off

Introducción.

Los temas (themes) o plantillas (templates) en Drupal se encuentran compuestos por varios archivos: *.theme y *.tpl.php.

La distribución del core incluye seis temas por defecto.

Nombre
Engine Tiene tablas ? Es subtema ?
Bluemarine PHPTemplate Si No
Chamaleon PHP plano Si No
Garland PHPTemplate No No
Marvin PHP plano Si Si
Minnelli PHPTemplate No Si
Pushbutton PHPTemplate Si No

Los temas incluídos por defecto en la distribución se ubican en /themes mientras que los temas implementados por el usuario se deberán ubicar bajo /sites/all/themes.

Archivos utilizados.

Tema basado en PHPTemplate.

  • block.tpl.php - Apariencia de los bloques.
  • <tema>.info - Información básica del módulo como nombre, descripción y versión.
  • box.tpl.php - Apariencia de los contenedores de información.
  • comment.tpl.php - Apariencia de los comentarios.
  • logo.png - Imagen del logo utilizado en el tema.
  • node.tpl.php - Apariencia de los nodos.
  • page.tpl.php - Apariencia y distribución de la página.
  • screenshot.png - Imagen del tema para ilustrar su administración.
  • style-rtl.css - Estilo para temas con textos de derecha a izquierda.
  • style.css - Hoja de estilos principal.

Es posible redefinir partes específicas del tema creando archivos cuyo nombre corresponde al elemento que se desea alterar siguiendo el formato *.tpl.php.

Tema basado en PHP directamente.

  • background.png - Imagen utilizada de fondo.
  • <tema>.info - Información básica del módulo como nombre, descripción y versión.
  • <tema>.theme - Apariencia y distribución de la página.
  • common-rtl.css - Estilo alternativo para los elementos comúnes con textos de derecha a izquierda.
  • common.css - Estilo para los elementos comúnes.
  • logo.png - Imagen del logo utilizado en el tema.
  • style-rtl.css - Estilo para los elementos específicos del tema con textos de derecha a izquierda.
  • style.css - Estilo para los elementos específicos del tema.

Es posible especificar archivos *.theme para redefinir la presentación de elementos específicos del tema.

Enlaces.