Suppression des divs ajoutés par render et node.tpl.php

15

J'essaie de construire un modèle HTML5 pour Drupal 7, et je suis assez particulier sur le code propre. Je veux un contrôle total sur le HTML et le CSS que j'obtiens pour la plupart en utilisant mon propre thème personnalisé. En d'autres termes, j'ai un ensemble HTML5 et CSS que je veux utiliser exactement comme dans Drupal. Je ne sais pas trop comment fonctionne toute la fonction de pré-processus.

Lorsque j'utilise 'print render ($ page [' content '])' dans mon fichier page.tpl.php, il ajoute

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

Et puis quand j'ajoute 'print render ($ content)' dans le nœud - custom.tpl.php il ajoute

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

Je ne veux aucun de ces divs. Comment puis-je me débarrasser d'eux?

Jack McKenzie
la source
Je peux utiliser $ node-> body [$ node-> language] [0] ['value']; pour afficher ce que je veux à l'intérieur de page.tpl.php, mais je perds ensuite l'avantage de pouvoir utiliser des pages node.tpl.php personnalisées pour chaque type de contenu. Cela signifie que je pourrais utiliser des instructions conditionnelles dans page.tpl.php pour ajouter différentes classes pour chaque type de contenu afin d'obtenir ce que je veux, mais cela semble une solution compliquée.
Jack McKenzie

Réponses:

16

Les identifiants et classes div que vous voyez dans $ page ['content'] proviennent de region.tpl.php> block.tpl.php> node.tpl.php Le contenu Drupal passe par ces fichiers de modèle, chaque étape ajoute des divs.

  • La première étape

Le fichier region.tpl.php contient le code comme suit

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

maintenant, si vous apportez des modifications à ce fichier, cela affectera toutes les régions de votre page. Si vous souhaitez contrôler uniquement la zone de contenu, créez un nouveau nom de fichier it region - content.tpl.php dans ce fichier uniquement.

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Cela supprimera les div créés uniquement pour la région de contenu.

  • Deuxième étape

Faites une copie (si nous apportons des modifications dans block.tpl.php tous les blocs seront effectués) de block.tpl.php et nommez-le block - content.tpl.php et supprimez ou modifiez les divs. Sans les divs, le fichier contiendra le code suivant pour sortir le contenu.

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

Cela se débarrassera des div créés par bock.tpl.php

  • Troisième étape

Modifiez maintenant le fichier node.tpl.php pour supprimer ou modifier les divs. Sans les divs, le fichier contiendra le code suivant pour sortir le contenu. > ">

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

Cela supprimera tous les div et classes. Vous pouvez maintenant envelopper le contenu avec vos propres divs. Veuillez me faire savoir si cela fonctionne pour vous.

15dk51
la source
Salut dkiscool, Merci pour votre réponse bien expliquée. Jusqu'à présent, je suis à mi-chemin. L'utilisation des modifications de block.tpl.php et region.tpl.php m'a permis de me débarrasser des trois premières divs (c'est-à-dire l'ensemble supérieur de ma question). Cependant, mon fichier node.tpl.php ne contient désormais qu'une seule ligne: print render($content);mais les trois seconds divs restent. Je sais que c'est ramasser le bon fichier de noeud comme quand j'ajoute du texte dans le fichier, ça passe très bien.
Jack McKenzie
4
Je pense que je l'ai résolu, à la suite de vous me montrant dans la bonne direction. J'ai ajouté un fichier field.tpl.php qui ne contenait qu'une seule ligne foreach ($items as $delta => $item) { print render($item); }. Quiconque d'autre voudra peut-être commencer avec un field.tpl.php complet, car j'ai supprimé quelques lignes qui pourraient être importantes en fonction de ce que vous essayez de faire. Les trois dernières divisions ont été ajoutées par ce fichier - bien que je sois un peu confus dans la mesure où la documentation indique que ce fichier n'est pas utilisé et n'est fourni que pour un point de départ de personnalisation.
Jack McKenzie
-2

Ce qui fonctionne parfaitement pour moi, c'est: strip_tags(render($var));

Pimmy
la source
Ce n'est pas la voie à suivre. Utilisez la fonction de thème ou la fonction de prétraitement.
gagarine