renderおよびnode.tpl.phpによって追加されたdivを削除する


15

Drupal 7用のHTML5テンプレートを作成しようとしていますが、きれいなコードにはかなりこだわります。ほとんどの場合、独自のカスタムテーマを使用して取得するHTMLとCSSを完全に制御したいです。言い換えれば、Drupalの場合とまったく同じように使用したいHTML5およびCSSセットがあります。前処理関数全体がどのように機能するかについてあまり詳しく説明していません。

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内で条件ステートメントを使用して、コンテンツタイプごとに異なるクラスを追加し、必要なものを取得できますが、これは面倒な解決策のようです。
ジャックマッケンジー

回答:


16

$ page ['content']内に表示されるdiv idおよびクラスは、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; ?>

このファイルに変更を加えた場合、ページのすべての領域に影響します。コンテンツ領域のみを制御する場合は、新しいファイル名region--content.tpl.phpをそのファイルにのみ貼り付けます

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

これにより、コンテンツ領域のみに作成されたdivが削除されます。

  • ステップ2

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を取り除きます

  • ステップ3

ここで、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およびクラスが削除されます。これで、コンテンツを独自のdivでラップできます。うまくいくかどうか教えてください。


こんにちはdkiscool、よく説明された答えをありがとう。これまでのところ、私はそこに半分の方法を持っています。block.tpl.phpおよびregion.tpl.phpの変更を使用すると、最初の3つのdiv(つまり、質問の一番上のセット)を取り除くことができました。ただし、node.tpl.phpファイルには1行しか含まれていませんprint render($content);が、2番目の3つのdivは残ります。ファイルにテキストを追加すると正常に処理されるため、適切なノードファイルを選択することがわかります。
ジャックマッケンジー

4
私はそれを解決したと思います、あなたから私に正しい方向を指し示した。1行だけを含むfield.tpl.phpファイルを追加しましたforeach ($items as $delta => $item) { print render($item); }。ただし、あなたがしようとしていることに応じて重要な可能性のある行をいくつか削除したため、他の人は完全なfield.tpl.phpで開始したい場合があります。最後の3つのdivがこのファイルによって追加されていましたが、ドキュメントではこのファイルは使用されておらず、カスタマイズの開始点にのみ提供されていると言われているため、少し混乱しています。
ジャックマッケンジー

-2

私にとって完璧に機能するのは: strip_tags(render($var));


これは進むべき道ではありません。テーマ機能または前処理機能を使用します。
ガガリン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.