theming – ¿Cómo creo plantillas en mi módulo personalizado?

Pregunta:

Creé un módulo personalizado que tiene un montón de funciones PHP cuyo propósito principal es básicamente generar HTML. Por ejemplo:

function showRecentActivity($tid, $recordStart, $count){
    //do some db_select stuff to get an array of node IDs...

    foreach($nids as $nid){
        $node = node_load($nid);

        //now that we've loaded the node, 100 lines of if, echo, etc. will follow in order to output the HTML to the page
}

Quizás ya puedas ver el problema. Si bien la repetición de HTML está bien para pequeñas piezas de marcado, la construcción de páginas completas con declaraciones de eco es horrible de codificar, mantener y muy propenso a errores.

Obviamente, lo que se necesita es un archivo de plantilla predefinido, escrito en HTML con solo pequeños lugares para hacer eco de las variables PHP necesarias. Al igual que los archivos de plantilla de mi tema.

Pero no tengo idea de cómo hacer esto con mi módulo personalizado.

Respuesta:

hook_theme es su amigo, le permite modularizar su marcado de dos maneras:

  1. Le permite definir un archivo de plantilla para su marcado.
  2. Le permite definir una función de tema.

No importa en qué dirección vaya, solicitará el marcado de la misma manera. así que digamos que desea modularizar el marcado para la actividad reciente. Hará lo siguiente en su módulo personalizado:

function custom_module_theme() {
   return array(
     'activity' => array(
       'variables' => array('variable1' => NULL, 'variable2' => NULL),
       'template' => 'custom-module-name-recent-activity',
     ),
   );
 }

custom-module-name-recent-activity.tpl.php en el directorio de su módulo donde tendrá $ variable1 y $ variable2

Su custom-module-name-recent-activity.tpl.php se verá así:

<div class="some class"> <?php print $variable1; ?> </div>
<div class="class2"> <?php print $variable2; ?> </div>

Y luego, desde su módulo, cuando haya realizado su procesamiento y haya establecido $variable1 y $variable2 (puede pasar tantos como desee), simplemente hará:

theme('activity', array('variable1' => $variable1, 'variable2' => $variable2));

Espero que esto ayude, me pregunto ahora si debería haberme vinculado a algún tutorial. Pero bueno, es sábado 🙂

(Y si está utilizando Drupal 6, cambie 'variables' a 'argumentos' en el código anterior).

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım