Drupal6 - Soluciones

Rulo Kobashikawa

<akobashikawa@gmail.com>

Contenido libre bajo la licencia GNU/GLP

siempre que sea aplicable

y excepto cuando se indique lo contrario


Contenido

Drupal6 - Soluciones

Contenido

Themes

Cómo tener un logo diferente en el home

Usando bloques

Cómo dar ids más descriptivos a los bloques

Cómo incluir contenedores en el menú

Content

Cómo crear un título automático a partir del cuerpo


Themes

Cómo tener un logo diferente en el home

Usando bloques

Caso: Que el logo en el home tenga un tamaño y estilo diferente que en el resto de páginas.

Idea: Tener un bloque para mostrar el logo en home y otro para mostrar el logo en las otras páginas.

<?php

$text = '<img src="' . path_to_theme() . '/images/home-logo.png"/>';

$path = '';

$options = array('html' => TRUE);

echo l($text, $path, $options);

?>

Indicar que el bloque sólo se vea en la página <front>.

La imagen home-logo.png debe estar en el directorio images del tema.

<?php

$text = '<img src="' . path_to_theme() . '/images/logo.png"/>';

$path = '';

$options = array('html' => TRUE);

echo l($text, $path, $options);

?>

Indicar que el bloque no se vea en la página <front>.

La imagen logo.png debe estar en el directorio images del tema.

Cómo dar ids más descriptivos a los bloques

Caso: Los ids de los bloques tienen el formato block-(nombre_modulo)-(delta). En un CSS, manejar ids numéricos puede ser más complicado que manejar ids descriptivos. Además, cuando se redefine un bloque, puede ser que no le corresponda el mismo delta, obligando a actualizar los estilos CSS que le correspondan. Sería mejor que tuvieran ids descriptivos que permitan aplicar el tema con mas facilidad.

Idea: Cambiar adecuadamente el valor del id que se usa en el template del block.

function ttt_preprocess_block(&$vars, $hook) {

  $vars['block_html_id'] = ttt_block_id($vars['block']);

}

function ttt_block_id($block) {

  $info = module_invoke($block->module, 'block', 'list');

  if ($info[$block->delta]['info']) {

    $block_id = 'block-' . $block->module . '-' . $info[$block->delta]['info'];

    $block_id = str_replace(array(' ', '_'), '-', strtolower($block_id));

    return preg_replace('/[^\-a-z0-9]/', '', $block_id);

  } else {

    return 'block-' . $block->module . '-' . $block->delta;

  }

}

Referencia: Give your Drupal blocks a more descriptive HTML ID attribute

Cómo incluir contenedores en el menú

Caso: Por default, sólo se pueden ingresar enlaces como items de menú. Se requiere que un grupo de enlaces aparezca un nivel debajo de un item que no es enlace.

Idea 1: Usar el módulo menu_item_container para incluir items que sean contenedores y el módulo menu_block para definir bloques de menú personalizados.

Idea 2: Definir cada item como de costumbre y, en el caso de contenido que no debe ser link a su página, colocar como contenido de su página php que redireccione a la otra página. Puede parecer algo artificioso a primera vista, pero en realidad es un enfoque lógico. Permite que los menus aniden bien, así como los breadcrumbs, sin necesidad de hacer artificios.


Content

Cómo crear un título automático a partir del cuerpo

Caso: Por default, los títulos son obligatorios. Se requiere que un título sea opcional y que cuando no se especifique sea generado automáticamente con las primeras palabras escritas en el cuerpo..

Idea: Usar el módulo auto_nodetitle para permitir títulos automáticos.

En la configuración del tipo de contenido, en la configuración de auto_nodetitle:

<?php

// http://drupal.org/node/283830

$limit = 5;

$text = $node->body;

$text = strip_tags($text);

$words = str_word_count($text, 2);

$pos = array_keys($words);

if (count($words) > $limit) {

    $text = substr( $text, 0, $pos[$limit]);

    $text = trim( $text );

    $text = rtrim( $text, '.' );

    $text = trim( $text ) . '...';

}

return  $text;

?>