Divs entfernen, die mit render und node.tpl.php hinzugefügt wurden


15

Ich versuche, eine HTML5-Vorlage für Drupal 7 zu erstellen, und ich bin ziemlich speziell in Bezug auf sauberen Code. Ich möchte die volle Kontrolle über HTML und CSS haben, wobei ich zum größten Teil mein eigenes benutzerdefiniertes Design verwende. Mit anderen Worten, ich habe ein HTML5- und CSS-Set, das ich genauso verwenden möchte wie in Drupal. Ich bin mir nicht sicher, wie die gesamte Funktion vor dem Prozess funktioniert.

Wenn ich 'print render ($ page [' content '])' in meiner page.tpl.php-Datei verwende, wird dies hinzugefügt

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

Und dann, wenn ich 'print render ($ content)' in den Knoten hinzufüge - custom.tpl.php, fügt es hinzu

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

Ich will keine dieser Divs. Wie werde ich sie los?


Ich kann $ node-> body [$ node-> language] [0] ['value'] verwenden; um anzuzeigen, was ich in page.tpl.php möchte, aber dann verliere ich den Vorteil, benutzerdefinierte node.tpl.php-Seiten für jeden Inhaltstyp verwenden zu können. Dies bedeutet, dass ich bedingte Anweisungen in page.tpl.php verwenden könnte, um für jeden Inhaltstyp verschiedene Klassen hinzuzufügen, um das zu erhalten, was ich will, aber das scheint eine chaotische Lösung zu sein.
Jack McKenzie

Antworten:


16

Die Div-IDs und Klassen, die Sie in $ page ['content'] sehen, stammen aus region.tpl.php> block.tpl.php> node.tpl.php. Drupal-Inhalte durchlaufen diese Vorlagendateien. Bei jedem Schritt werden einige Divs hinzugefügt.

  • Schritt eins

Die Datei region.tpl.php enthält den folgenden Code

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

Wenn Sie jetzt Änderungen an dieser Datei vornehmen, wirkt sich dies auf alle Bereiche Ihrer Seite aus. Wenn Sie nur den Inhaltsbereich steuern möchten, erstellen Sie einen neuen Dateinamen it region - content.tpl.php nur in dieser Datei einfügen

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Dadurch wird div entfernt, das nur für den Inhaltsbereich erstellt wurde.

  • Schritt zwei

Erstellen Sie eine Kopie (wenn wir Änderungen an block.tpl.php vornehmen, werden alle Blöcke betroffen sein) von block.tpl.php und nennen Sie es block - content.tpl.php und entfernen oder ändern Sie die divs. Ohne die divs enthält die Datei den folgenden Code, um den Inhalt auszugeben.

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

Dadurch wird das von bock.tpl.php erstellte div entfernt

  • Schritt drei

Bearbeiten Sie nun die Datei node.tpl.php, um die divs zu entfernen oder zu ändern. Ohne die divs enthält die Datei den folgenden Code, um den Inhalt auszugeben. > ">

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

Dies wird alle div und Klassen loswerden. Jetzt können Sie den Inhalt mit Ihren eigenen Divs verpacken. Bitte lassen Sie mich wissen, ob es bei Ihnen funktioniert.


Hallo dkiscool, Danke für deine gut erläuterte Antwort. Bis jetzt bin ich auf halbem Weg. Durch die Verwendung der Änderungen block.tpl.php und region.tpl.php konnte ich die ersten drei Divs (dh das in meiner Frage gesetzte Top) loswerden. Meine node.tpl.php-Datei enthält jetzt nur noch eine Zeile print render($content);, die zweiten drei Divs bleiben jedoch erhalten. Ich weiß, dass es die richtige Knotendatei aufnimmt, wenn ich etwas Text in die Datei füge, durch die es gut geht.
Jack McKenzie

4
Ich glaube, ich habe es gelöst, nachdem Sie mich in die richtige Richtung gelenkt haben. Ich habe eine field.tpl.php-Datei hinzugefügt, die nur eine Zeile enthielt foreach ($items as $delta => $item) { print render($item); }. Jeder andere möchte vielleicht mit einer vollständigen field.tpl.php beginnen, da ich ein paar Zeilen herausgenommen habe, die je nach dem, was Sie versuchen, wichtig sein könnten. Die letzten drei Divs wurden durch diese Datei hinzugefügt - obwohl ich ein bisschen verwirrt bin, dass die Dokumentation besagt, dass diese Datei nicht verwendet wird und nur als Ausgangspunkt für die Anpassung vorgesehen ist.
Jack McKenzie

-2

Was für mich perfekt funktioniert, ist: strip_tags(render($var));


Dies ist nicht der richtige Weg. Verwenden Sie die Themenfunktion oder die Vorverarbeitungsfunktion.
gagarine
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.