Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/07/2011, 13:41
Avatar de MarioAraque
MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 2 meses
Puntos: 265
Respuesta: Duda sobre bloques en drupal

Crear un bloque personalizado en Drupal no es dificil, tenes dos alternativas:

La rapida: Creas un bloque vacio desde la interfaz de Drupal, y luego haces un override con un fichero tpl. Si por ejemplo vos creas un bloque y este tiene id=3 ... entonces vos creas un fichero llamado block-block-3.tpl.php dentro de la carpeta de tu theme, y listo, ese fichero respondera al codigo que vos le pongas, y podras usar la api de Drupal y la de cualquier modulo que hayas instalado. En tu theme dispones, si o si, de un fichero llamado "block.tpl.php", a ese bloque lo duplicas y le pones el nombre que te dije antes, y reemplazas la variable $content por lo que vos quieras.
Otra forma de hacerlo es poniendo de formato de entrada "PHP code", pero no me gusta, esa manera es aun mas rapida.

La profesional: Usando un modulo personalizado. Drupal te brinda un hook llamado "hook_block" el cual te permite crear los modulos que vos quieras.
El hook_block se divide en operaciones, te voy a poner un ejemplo rapido:

Código PHP:
function tumodulo_block($op 'list'$delta 0$edit = array()){

    
//Declaramos un array vacio que tendra el contenido del bloque (o bloques)
    
$block = array();

    if(
$op == "list"){
        
$block[0]["info"] = t('Titulo del bloque');
    }
    elseif(
$op == "view"){
        
$block["content"] = t("Este es mi primer bloque");
    }

    return 
$block;

List es el $op que indica que se estan listando los bloques, eso es para que aparezca en la pagina de Bloques del admin de Drupal, no tiene mas historia que eso.
La parte importante es el $op view, el cual es el que nos muestra el contenido del bloque en pantalla.
$block es un vector, donde el indice "content" es el contenido del mismo, yo lo que hice ahi fue asignar un string y listo, pero lo mas usual es usar la funcion theme, y pasarle variables como parametro, esto hace entrar en juego el hook_theme, ahi definis los templates a usar por cada llamada que hagas, y declaras un tpl donde podras maquetar el contenido del bloque a tu gusto.

Te dejo un pedazo de codigo de una web que estoy desarrollando:

Código PHP:
function streetstyle_block($op 'list'$delta 0$edit = array()){

    
//Declaramos un array vacio que tendra el contenido del bloque (o bloques)
    
$block = array();

    if(
$op == "list"){
        
// Generamos la lista de bloques, para mostrarlas en admin/block
        
$block[0]["info"] = t('Perfil usuario');
    }
    elseif(
$op == "view"){
        global 
$user;
        
$block["content"] = theme("profile_user",$user);
    }

    return 
$block;
}


function 
streetstyle_theme(){
            return array(
                
'profile_user' => array(
                        
'arguments' => array('uid' => NULL),
                        
'template' => 'profile-blocks',
                ),
            );
    } 
Dentro del fichero profile-blocks.tpl.php voy a tener el contenido del bloque.

No se, espero que te haya servido, aunque si tu nivel en Drupal es pequeño, quedate con la primer alternativa.

Saludos.