Insertar campo (field) en page.tpl.php

Events happening in the community are now at Drupal community events on www.drupal.org.
antoniomanco's picture

Buenos días

Quiero redistribuir un poco los campos en los nodos de mi web pero no quiero usar Display Suite ni otros módulos que sólo saturan más mi base de datos.

Puntualmente necesito que sobre el titular aparezca la sección linkeada de mi sitio (field_categoría), los Tags (Field_tags) y el inicio de mi sitio (Tipo breadcrumb). No quiero un breadcrumb sino los elementos que menciono arriba.

El problema es que he intentado hacer Print render de Field_tags y Field_cat en Page.tpl.php pero recibo errores. No pongo esto en node.tpl.php, porque el titular de mis nodos se imprime desde Page.tpl.php y no desde node.tpl.php.

Espero alguna sugerencia, saludos

Comments

Que tal Antonio,Bueno te

w4lt3r's picture

Que tal Antonio,

Bueno te comento, durante esa etapa de renderizado ya no se pueden acceder de forma directa a los campos del nodo; para obtener un campo del nodo que estas visualizando deberías de hacer lo siguientes:

<?php
/**
* Este código lo deberías de implementar en archivo template.php
* si usas Omega como tema base debería de ir en:
* MY_THEME_ROOT/preprocess/preprocess.page.inc
*/

/**
* Implements template_preprocess_page().
*/
function my_theme_preprocess_page(&$variables) {
 
/**
   * Donde:
   *   * nid : Es el id del nodo
   *   * field_name = Es el nombre máquina del campo; la variable es un
   *                          array renderizable.
   *   Nota:
   *   * La asignación que se esta realizando es para crear una variable
   *      que estará disponible en tu page.tpl.php.
   *   * Deberías de hacer lo mismo por cada campo que desees en tu tpl.
   *   * En archivo tpl solo deberías de colocar:
   *      <php print render($variable_creada); php>
   */
 
$variables['field_name'] =   $variables['page']['content']['system_main']['nodes'][nid]['field_name'];

  
/**
    *  Con el siguiente código puedes ver el contenido de cualquier
    *  variable que desees:
    *  drupal_set_message('<pre>'  . print_r($variables['page']['content'],
    *     TRUE) . '</pre>');
    */
}
?>

Por último, en lo personal Display Suite me parece fantástico y no tengo problemas respecto a rendimiento, solo es que manejes bien tus caches.

Éxitos...

Saludos Walter, gracias por

antoniomanco's picture

Saludos Walter, gracias por el código. Una duda, ¿Todo el código se pone en template.php? ¿cómo hago para ubicarlo en una zona del page.tpl.php?

Gracias de antemano por la respuesta

Si no estas usando un tema

w4lt3r's picture

Si no estas usando un tema base, como Omega, entonces la respuesta es si. A continuación, coloco unos enlaces de referencia (que aconsejo que leas) para que tengas un mayor entendimiento:

  • template.php:
    En esa página encontrarás información sobras las distintas funciones que puedes implementar en tu subtema para modificar el markup por defecto de Drupal.
  • template_preprocess_page: En está página encontrarás información acerca de la función que se ejecuta antes de que se ejecute tu implementación (ej.: function tu_tema_preprocess_page(&$variables)).
  • page.tpl.php: Este el markup que trae por defecto drupal para renderizar una página, si deseas modificar este markup, copia el archivo y pegalo en la siguiente ruta: ROOT_TO_MY_SUBTHEME/templates/; una vez pegado el archivo en esa ruta Drupal ignorara su markup por defecto y le dará prioridad al tuyo y dentro de el puedes renderizar el campo donde desees, por ejemplo, si deseas colocar tu campo después del logo:
    <?php
       
    <div id="page-wrapper"><div id="page">

        <
    div id="header"><div class="section clearfix">

          <
    php if ($logo): php>
            <
    a href="<php print $front_page; php>" title="<php print t('Home'); php>" rel="home" id="logo">
              <
    img src="<php print $logo; php>" alt="<php print t('Home'); php>" />
            </
    a>
          <
    php endif; php>
         
    /**
           *  Aqui renderizo mi campo con la variable que cree en el preprocess
           */
        
    <php print render($mi_campo); php>
    ?>

Spanish

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week