Eliminando divs agregados por render y node.tpl.php

15

Estoy tratando de construir una plantilla HTML5 para Drupal 7, y soy bastante particular sobre el código limpio. Quiero un control total sobre el HTML y CSS, que en su mayor parte obtengo usando mi propio tema personalizado. En otras palabras, tengo un conjunto HTML5 y CSS que quiero usar exactamente como está en Drupal. No estoy muy al tanto de cómo funciona toda la función de preproceso.

Cuando uso 'print render ($ page [' content '])' en mi archivo page.tpl.php agrega

<div class="region region-content"> 
    <div id="block-system-main" class="block block-system"> 
        <div class="content">

Y luego cuando agrego 'render de impresión ($ contenido)' en el nodo - custom.tpl.php agrega

<div class="field field-name-body field-type-text-with-summary field-label-hidden">
    <div class="field-items">
        <div class="field-item even" property="content:encoded">

No quiero ninguno de estos divs. ¿Cómo me deshago de ellos?

Jack McKenzie
fuente
Puedo usar $ node-> body [$ node-> language] [0] ['value']; para mostrar lo que quiero dentro de page.tpl.php, pero luego pierdo la ventaja de poder usar páginas personalizadas de node.tpl.php para cada tipo de contenido. Esto significa que podría usar declaraciones condicionales dentro de page.tpl.php para agregar diferentes clases para cada tipo de contenido para obtener lo que quiero, pero esa parece una solución desordenada.
Jack McKenzie

Respuestas:

16

Los identificadores y clases de div que ve dentro de $ page ['contenido'] provienen de region.tpl.php> block.tpl.php> node.tpl.php El contenido de Drupal pasa a través de estos archivos de plantilla, cada paso agrega algunos divs.

  • Paso uno

El archivo region.tpl.php contiene el código de la siguiente manera

       <?php if ($content): ?>
  <div class="<?php print $classes; ?>">
    <?php print $content; ?>
  </div>
<?php endif; ?>

ahora, si realiza cambios en este archivo, afectará a todas las regiones de su página. Si desea controlar solo el área de contenido, cree un nuevo nombre de archivo en la región: content.tpl.php en ese archivo, solo pegue

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Esto eliminará el div creado solo para la región de contenido.

  • Segundo paso

Haga una copia (si hacemos cambios en block.tpl.php, todos los bloques se verán afectados) de block.tpl.php y asígnele el nombre block - content.tpl.php y elimine o cambie los divs. Sin los divs, el archivo contendrá el siguiente código para generar contenido.

<?php print render($title_prefix); ?>
    <?php if ($block->subject): ?>
      <h2 class="block-title"<?php print $title_attributes; ?>><?php print $block->subject ?></h2>
    <?php endif;?>
      <?php print render($title_suffix); ?>
      <?php print $content; ?>

Esto eliminará el div creado por bock.tpl.php

  • Paso tres

Ahora edite el archivo node.tpl.php para eliminar o cambiar los divs. Sin los divs, el archivo contendrá el siguiente código para generar contenido. > ">

    <?php print $user_picture; ?>

    <?php if ($display_submitted): ?>
      <span class="submitted"><?php print $date; ?><?php print $name; ?></span>
    <?php endif; ?>


        <?php
          // We hide the comments and links now so that we can render them later.
        hide($content['comments']);
        hide($content['links']);
        print render($content);
       ?>


    <?php if (!empty($content['links']['terms'])): ?>
      <?php print render($content['links']['terms']); ?>
    <?php endif;?>

    <?php if (!empty($content['links'])): ?>
        <?php print render($content['links']); ?>
      <?php endif; ?>




<?php print render($content['comments']); ?>

Esto eliminará todos los div y clases. Ahora puedes envolver el contenido con tus propios divs. Por favor, dígame si le funciona.

15dk51
fuente
Hola dkiscool, gracias por tu respuesta bien explicada. Hasta ahora tengo la mitad del camino. El uso de los cambios block.tpl.php y region.tpl.php me permitió deshacerme de los primeros tres divs (es decir, el conjunto superior en mi pregunta). Sin embargo, mi archivo node.tpl.php ahora solo contiene una línea: print render($content);pero quedan los segundos tres divs. Sé que está recogiendo el archivo de nodo correcto, ya que cuando agrego algo de texto en el archivo, sale bien.
Jack McKenzie
44
Creo que lo he resuelto, luego de que me hayas indicado en la dirección correcta. Agregué un archivo field.tpl.php que contenía solo una línea foreach ($items as $delta => $item) { print render($item); }. Sin embargo, cualquier otra persona querrá comenzar con un field.tpl.php completo porque eliminé algunas líneas que pueden ser importantes dependiendo de lo que intente hacer. Este archivo agregó los últimos tres divs, aunque estoy un poco confundido porque la documentación dice que este archivo no se usa y solo se proporciona para un punto de partida de personalización.
Jack McKenzie
-2

Lo que funciona perfectamente para mí es: strip_tags(render($var));

Pimmy
fuente
Esa no es la forma de ir. Utilice la función de tema o la función de preproceso.
gagarine