Removendo divs adicionados por render e node.tpl.php


15

Estou tentando criar um modelo HTML5 para o Drupal 7 e sou bastante específico sobre código limpo. Eu quero controle total sobre o HTML e CSS que, na maioria das vezes, consigo usando meu próprio tema personalizado. Em outras palavras, tenho um conjunto HTML5 e CSS que quero usar exatamente como está no Drupal. Não estou muito preocupado com o funcionamento de toda a função de pré-processo.

Quando eu uso 'print render ($ page [' content ']))' no meu arquivo page.tpl.php, ele adiciona

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

E então quando eu adiciono 'print render ($ content)' no nó - custom.tpl.php, ele adiciona

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

Eu não quero nenhum desses divs. Como faço para me livrar deles?


Eu posso usar $ node-> body [$ node-> language] [0] ['value']; para exibir o que quero dentro do page.tpl.php, mas perco a vantagem de poder usar páginas node.tpl.php personalizadas para cada tipo de conteúdo. Isso significa que eu poderia usar instruções condicionais dentro do page.tpl.php para adicionar classes diferentes para cada tipo de conteúdo para obter o que eu quero, mas isso parece uma solução confusa.
Jack McKenzie

Respostas:


16

Os IDs e classes div que você vê dentro de $ page ['content'] vêm de region.tpl.php> block.tpl.php> node.tpl.php O conteúdo do Drupal passa por esses arquivos de modelo, cada etapa adiciona algumas divs.

  • Passo um

O arquivo region.tpl.php contém o código da seguinte maneira

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

agora, se você fizer alterações nesse arquivo, afetará todas as regiões da sua página. Se você deseja controlar apenas a área de conteúdo, crie um novo nome de arquivo para região - content.tpl.php nesse arquivo, cole apenas

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Isso eliminará a div criada apenas para a região de conteúdo.

  • Passo dois

Faça uma cópia (se fizermos alterações no block.tpl.php, todos os blocos serão afetados) do block.tpl.php e nomeie-o como block - content.tpl.php e remova ou altere as divs. Sem as divs, o arquivo conterá o seguinte código para gerar o conteúdo.

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

Isso vai se livrar do div criado por bock.tpl.php

  • Passo três

Agora edite o arquivo node.tpl.php para remover ou alterar as divs. Sem as divs, o arquivo conterá o seguinte código para gerar o conteúdo. > ">

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

Isso irá se livrar de todas as div e classes. Agora você pode agrupar o conteúdo com seus próprios divs. Por favor, deixe-me saber se isso funciona para você.


Oi dkiscool, Obrigado pela sua resposta bem explicada. Até agora, cheguei na metade do caminho. Usando as alterações block.tpl.php e region.tpl.php, eu me livrei das três primeiras divs (ou seja, o topo definido na minha pergunta). No entanto, meu arquivo node.tpl.php agora contém apenas uma linha: print render($content);mas os três segundos divs permanecem. Eu sei que ele está escolhendo o arquivo do nó certo, como quando adiciono algum texto ao arquivo, ele é processado corretamente.
21811 Jack McKenzie

4
Acho que resolvi isso, seguindo você me apontando na direção certa. Eu adicionei um arquivo field.tpl.php que continha apenas uma linha foreach ($items as $delta => $item) { print render($item); }. Qualquer outra pessoa pode querer começar com um field.tpl.php completo, no entanto, porque eu peguei algumas linhas que podem ser importantes, dependendo do que você está tentando fazer. As três divs finais foram adicionadas por esse arquivo - embora eu esteja um pouco confuso, pois a documentação diz que esse arquivo não é usado e é fornecido apenas para um ponto de partida de personalização.
21711 Jack McKenzie

-2

O que funciona perfeitamente para mim é: strip_tags(render($var));


Este não é o caminho a percorrer. Use a função de tema ou pré-processo.
Gagarine
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.