Удаление div'ов, добавленных рендером и 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, чтобы добавить разные классы для каждого типа контента, чтобы получить то, что я хочу, но это кажется грязным решением.
Джек Маккензи

Ответы:

16

Идентификаторы и классы div, которые вы видите внутри $ page ['content'], взяты из region.tpl.php> block.tpl.php> node.tpl.php Содержимое Drupal проходит через эти файлы шаблонов, каждый шаг добавляет некоторые div.

  • Первый шаг

Файл region.tpl.php содержит следующий код

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

Теперь, если вы внесете изменения в этот файл, это повлияет на все области вашей страницы. Если вы хотите управлять только областью содержимого, создайте новое имя файла в этом регионе - content.tpl.php в этом файле только для вставки

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Это избавит от div, созданного только для области содержимого.

  • Шаг второй

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

<?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, чтобы удалить или изменить div. Без 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']); ?>

Это избавит от всех div и классов. Теперь вы можете обернуть содержимое с вашими собственными div. Пожалуйста, дайте мне знать, если это работает для вас.

15dk51
источник
Привет dkiscool, Спасибо за ваш хорошо объясненный ответ. Пока у меня есть половина пути. Использование изменений block.tpl.php и region.tpl.php позволило мне избавиться от первых трех элементов div (т. Е. От верхнего набора в моем вопросе). Однако мой файл node.tpl.php теперь содержит только одну строку, print render($content);но вторые три div остаются. Я знаю, что он подбирает файл правого узла, так как, когда я добавляю текст в файл, он проходит нормально.
Джек Маккензи
4
Я думаю, что я решил это, следуя за вами, указывая мне в правильном направлении. Я добавил файл field.tpl.php, который содержал только одну строку foreach ($items as $delta => $item) { print render($item); }. Однако любой может захотеть начать с полного field.tpl.php, потому что я вычеркнул несколько строк, которые могут оказаться важными в зависимости от того, что вы пытаетесь сделать. Последние три элемента div были добавлены этим файлом - хотя я немного запутался в том, что в документации сказано, что этот файл не используется и предоставляется только для начальной точки настройки.
Джек Маккензи
-2

Что прекрасно работает для меня это: strip_tags(render($var));

Pimmy
источник
Это не путь. Используйте функцию темы или функцию предварительной обработки.
Gagarine