删除由render和node.tpl.php添加的div


15

我正在尝试为Drupal 7构建HTML5模板,并且我对干净代码非常特别。我想完全控制HTML和CSS,而大多数情况下我使用自己的自定义主题。换句话说,我有一个HTML5和CSS集,我想像在Drupal中一样使用。我不太了解整个预处理功能的工作原理。

当我在page.tpl.php文件中使用'print render($ page ['content'])''时,它会添加

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

我不需要这些div。我如何摆脱它们?


我可以使用$ node-> body [$ node-> language] [0] ['value']; 在page.tpl.php中显示我想要的内容,但随后我失去了能够为每种内容类型使用自定义node.tpl.php页面的优势。这意味着我可以在page.tpl.php中使用条件语句为每种内容类型添加不同的类,以获取所需的内容,但这似乎是一个麻烦的解决方案。
Jack McKenzie

Answers:


17

您在$ page ['content']中看到的div ID和类来自region.tpl.php> block.tpl.php> node.tpl.php Drupal内容会通过这些模板文件,每个步骤都会添加一些div。

  • 步骤1

region.tpl.php文件包含以下代码

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

现在,如果您对此文件进行更改,它将影响页面的所有区域。如果您只想控制内容区域,请在该文件中创建一个新文件,将其命名为region--content.tpl.php。

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

这将摆脱仅为内容区域创建的div。

  • 第二步

制作一个block.tpl.php的副本(如果我们在block.tpl.php中进行更改,则所有块都会生效),并将其命名为block-content.tpl.php,然后删除或更改div。没有div的文件将包含以下代码以输出内容。

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

这将摆脱由bock.tpl.php创建的div

  • 第三步

现在,编辑node.tpl.php文件以删除或更改div。没有div的文件将包含以下代码以输出内容。>“>

    <?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和class。现在,您可以使用自己的div包装内容。请让我知道它是否适合您。


dkiscool,您好:感谢您的详尽解释。到目前为止,我已经完成了一半。使用block.tpl.php和region.tpl.php所做的更改使我摆脱了前三个div(即我问题中的前三个div)。但是,我的node.tpl.php文件现在仅包含一行:print render($content);但后三个div仍然保留。我知道它选择了正确的节点文件,因为当我向文件中添加一些文本时,它就很好了。
Jack McKenzie

4
我认为我已经解决了问题,之后请您指出正确的方向。我添加了一个field.tpl.php文件,其中仅包含一行foreach ($items as $delta => $item) { print render($item); }。任何其他人可能都想以一个完整的field.tpl.php开始,因为我摘录了几行内容,这些内容可能很重要,具体取决于您要执行的操作。该文件添加了最后三个div-尽管我有点困惑,因为文档说该文件未使用,仅用于自定义起点。
Jack McKenzie

-2

最适合我的是: strip_tags(render($var));


这不是要走的路。使用主题功能或预处理功能。
gagarine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.