Видалення divs, доданих рендером та node.tpl.php


15

Я намагаюся створити шаблон HTML5 для Drupal 7, і я дуже конкретний щодо чистого коду. Я хочу повністю контролювати HTML та CSS, які здебільшого я отримую за допомогою власної власної теми. Іншими словами, у мене є набір HTML5 та CSS, які я хочу використовувати саме так, як це є в Drupal. Я не надто зрозумів, як працює вся функція перед процесом.

Коли я використовую 'print render ($ page [' content '])' у своєму файлі page.tpl.php, він додає

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

І тоді, коли я додаю 'print render ($ content)' у вузлі - 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">

Я не хочу жодного з цих дивів. Як я їх позбудуся?


Я можу використовувати $ node-> body [$ node-> language] [0] ['value']; відобразити те, що я хочу у page.tpl.php, але тоді я втрачаю перевагу в тому, що я можу використовувати користувацькі сторінки node.tpl.php для кожного типу вмісту. Це означає, що я міг використовувати умовні висловлювання всередині page.tpl.php, щоб додати різні класи для кожного типу вмісту, щоб отримати те, що я хочу, але це здається безладним рішенням.
Джек МакКензі

Відповіді:


17

Дідові ідентифікатори та класи, які ви бачите всередині $ page ['content'], походять з регіону.tpl.php> block.tpl.php> node.tpl.php. Вміст Drupal проходить через ці файли шаблонів, кожен крок додає кілька знаків.

  • Крок перший

Файл region.tpl.php містить код наступним чином

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

Тепер, якщо ви внесете зміни в цей файл, це вплине на всі регіони вашої сторінки. Якщо ви хочете керувати лише областю вмісту, створіть нове ім'я файлу it region - content.tpl.php тільки в цей файл, вставити

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Це дозволить позбутися від div, створеного лише для регіону вмісту.

  • Крок другий

Зробіть копію (якщо ми внесемо зміни в block.tpl.php, всі блоки будуть здійснені) блоку block.tpl.php і назвіть його блок - content.tpl.php та видаліть або змінить значки. Без дівок файл буде містити наступний код для виведення вмісту.

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

Це дозволить позбутися від div, створеного bock.tpl.php

  • Крок третій

Тепер відредагуйте файл node.tpl.php, щоб видалити або змінити divs. Без дівок файл буде містити наступний код для виведення вмісту. > ">

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

Це дозволить позбутися всіх дівок та занять. Тепер ви можете обгорнути вміст власними дивами. Будь ласка, дайте мені знати, чи працює це для вас.


Привіт dkiscool, Дякую за добре пояснену відповідь. Поки я пройшов півдороги. Використання block.tpl.php та region.tpl.php змін дозволило мені позбутися перших трьох дивів (тобто верхнього набору в моєму запитанні). Однак мій файл node.tpl.php тепер містить лише один рядок, print render($content);але три інші диски залишаються. Я знаю, що він збирає файл правого вузла, коли я додаю текст у файл, він проходить добре.
Джек МакКензі

4
Я думаю, що я вирішив це, слідуючи за тим, щоб ти вказував мене в правильному напрямку. Я додав файл field.tpl.php, який містив лише один рядок foreach ($items as $delta => $item) { print render($item); }. Будь-хто інший, можливо, захоче почати з повного field.tpl.php, проте я вивів кілька рядків, які можуть бути важливими залежно від того, що ви намагаєтеся зробити. Останні три діви були додані цим файлом - хоча я трохи розгублений тим, що в документації сказано, що цей файл не використовується і надається лише для початкової точки налаштування.
Джек МакКензі

-2

Що для мене ідеально працює: strip_tags(render($var));


Це не шлях. Використовуйте функцію теми або функцію попередньої обробки.
гагарин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.