Usuwanie div dodanych przez render i node.tpl.php

15

Próbuję zbudować szablon HTML5 dla Drupal 7, i jestem dość szczegółowy w kwestii czystego kodu. Chcę mieć pełną kontrolę nad HTML i CSS, które w większości otrzymuję przy użyciu własnego niestandardowego motywu. Innymi słowy, mam zestaw HTML5 i CSS, którego chcę używać dokładnie tak, jak w Drupal. Nie mam pojęcia, jak działa cała funkcja przedprocesowa.

Kiedy używam „print render ($ page ['content'])” w moim pliku page.tpl.php, dodaje

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

A potem, gdy dodam „print render ($ content)” w węźle - dodaje custom.tpl.php

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

Nie chcę żadnego z tych div. Jak się ich pozbyć?

Jack McKenzie
źródło
Mogę użyć $ node-> body [$ node-> language] [0] ['value']; aby wyświetlić to, co chcę w page.tpl.php, ale wtedy tracę przewagę wynikającą z możliwości używania niestandardowych stron node.tpl.php dla każdego typu zawartości. Oznacza to, że mogę użyć instrukcji warunkowych w page.tpl.php, aby dodać różne klasy dla każdego typu zawartości, aby uzyskać to, czego chcę, ale wydaje się to niechlujne rozwiązanie.
Jack McKenzie

Odpowiedzi:

17

Identyfikatory div i klasy, które widzisz wewnątrz $ page ['content'], pochodzą z region.tpl.php> block.tpl.php> node.tpl.php Zawartość Drupal przechodzi przez te pliki szablonów, każdy krok dodaje trochę div.

  • Krok pierwszy

plik region.tpl.php zawiera następujący kod

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

teraz, jeśli wprowadzisz zmiany w tym pliku, wpłynie to na wszystkie regiony strony. Jeśli chcesz kontrolować tylko obszar zawartości, utwórz nową nazwę pliku to region - content.tpl.php tylko w tym pliku wklej

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Spowoduje to pozbycie się div utworzonego tylko dla regionu zawartości.

  • Krok drugi

Zrób kopię (jeśli wprowadzimy zmiany w block.tpl.php, wszystkie bloki zostaną wykonane) z block.tpl.php i nazwij go block - content.tpl.php i usuń lub zmień div. Bez elementów div plik będzie zawierał następujący kod do wyświetlania zawartości.

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

Spowoduje to pozbycie się div utworzonego przez bock.tpl.php

  • Krok trzeci

Teraz edytuj plik node.tpl.php, aby usunąć lub zmienić div. Bez elementów div plik będzie zawierał następujący kod do wyświetlania zawartości. > „>

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

Spowoduje to pozbycie się wszystkich div i klas. Teraz możesz owinąć zawartość własnymi divami. Daj mi znać, jeśli to działa.

15dk51
źródło
Cześć dkiscool, dziękuję za dobrze wyjaśnioną odpowiedź. Do tej pory jestem w połowie drogi. Użycie zmian block.tpl.php i region.tpl.php pozwoliło mi pozbyć się pierwszych trzech div (tj. Najwyższego zestawu w moim pytaniu). Jednak mój plik node.tpl.php zawiera teraz tylko jedną linię: print render($content);ale pozostałe trzy div pozostają. Wiem, że pobiera odpowiedni plik węzła, ponieważ kiedy dodam trochę tekstu do pliku, wszystko idzie dobrze.
Jack McKenzie
4
Wydaje mi się, że rozwiązałem ten problem, kierując mnie w dobrym kierunku. Dodałem plik field.tpl.php, który zawierał tylko jedną linię foreach ($items as $delta => $item) { print render($item); }. Jednak każdy może chcieć zacząć od pełnego pola.tpl.php, ponieważ wyjąłem kilka wierszy, które mogą być ważne w zależności od tego, co próbujesz zrobić. Ostatnie trzy divy były dodawane przez ten plik - chociaż jestem trochę zdezorientowany, ponieważ dokumentacja mówi, że ten plik nie jest używany i służy jedynie jako punkt początkowy dostosowywania.
Jack McKenzie
-2

Dla mnie idealnie działa: strip_tags(render($var));

Pimmy
źródło
To nie jest droga. Użyj funkcji motywu lub funkcji przetwarzania wstępnego.
gagarine