Rimozione dei div aggiunti da render e node.tpl.php


15

Sto cercando di creare un modello HTML5 per Drupal 7, e sono piuttosto particolare riguardo al codice pulito. Voglio il pieno controllo dell'HTML e CSS che per la maggior parte ottengo usando il mio tema personalizzato. In altre parole, ho un set HTML5 e CSS che voglio usare esattamente come in Drupal. Non sono troppo informato su come funzioni l'intera cosa pre-processo.

Quando uso "print render ($ page ['content']) 'nel mio file page.tpl.php, viene aggiunto

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

E poi quando aggiungo 'print render ($ content)' nel nodo - custom.tpl.php aggiunge

<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">

Non voglio nessuno di questi div. Come posso liberarmene?


Posso usare $ node-> body [$ node-> language] [0] ['value']; per visualizzare ciò che voglio all'interno di page.tpl.php, ma poi perdo il vantaggio di poter utilizzare le pagine node.tpl.php personalizzate per ogni tipo di contenuto. Ciò significa che potrei usare le istruzioni condizionali all'interno di page.tpl.php per aggiungere classi diverse per ogni tipo di contenuto per ottenere ciò che voglio, ma sembra una soluzione disordinata.
Jack McKenzie,

Risposte:


16

Gli ID div e le classi che vedi all'interno di $ page ['content'] provengono da region.tpl.php> block.tpl.php> node.tpl.php Il contenuto drupal passa attraverso questi file modello, ogni passaggio aggiunge alcuni div.

  • Primo passo

Il file region.tpl.php contiene il codice come segue

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

ora se apporti modifiche in questo file, avrà effetto su tutte le aree della tua pagina. Se vuoi controllare solo l'area del contenuto, crea un nuovo nome file nella regione - content.tpl.php solo in quel file incolla

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Questo eliminerà il div creato solo per la regione di contenuto.

  • Passo due

Crea una copia (se effettuiamo modifiche in block.tpl.php verranno effettuati tutti i blocchi) di block.tpl.php e chiamalo block - content.tpl.php e rimuovi o modifica i div. Senza i div il file conterrà il seguente codice per l'output del contenuto.

<?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; ?>

Questo eliminerà il div creato da bock.tpl.php

  • Terzo passo

Ora modifica il file node.tpl.php per rimuovere o cambiare i div. Senza i div il file conterrà il seguente codice per l'output del contenuto. > ">

    <?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']); ?>

Questo eliminerà tutti i div e le classi. Ora puoi avvolgere il contenuto con i tuoi div. Per favore fatemi sapere se funziona per voi.


Ciao dkiscool, grazie per la tua risposta ben spiegata. Finora sono arrivato a metà strada. L'uso delle modifiche block.tpl.php e region.tpl.php mi ha permesso di sbarazzarmi dei primi tre div (ovvero il primo set nella mia domanda). Tuttavia il mio file node.tpl.php ora contiene solo una riga: print render($content);ma i secondi tre div rimangono. So che sta raccogliendo il file del nodo giusto come quando aggiungo del testo nel file viene bene.
Jack McKenzie,

4
Penso di averlo risolto, seguendomi indicandomi nella giusta direzione. Ho aggiunto un file field.tpl.php che conteneva solo una riga foreach ($items as $delta => $item) { print render($item); }. Chiunque altro potrebbe voler iniziare con un field.tpl.php completo, tuttavia, perché ho eliminato alcune righe che potrebbero essere importanti a seconda di ciò che stai cercando di fare. Le ultime tre div sono state aggiunte da questo file, anche se sono un po 'confuso dal fatto che la documentazione afferma che questo file non viene utilizzato e viene fornito solo come punto di partenza per la personalizzazione.
Jack McKenzie,

-2

Ciò che funziona perfettamente per me è: strip_tags(render($var));


Questa non è la strada da percorrere. Utilizzare la funzione tema o la funzione di preelaborazione.
gagarine,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.