web-dev-qa-db-ja.com

存在するブロックに関係なく、page.tpl内の領域のテンプレートをロードする

私は自分のテーマを作成しようとしているときにこのクエリに来ました。フッターの上にあるフッタートップという名前のリージョンがあるとします。現時点では静的なHTMLコンテンツとサイトロゴのみが含まれます。

この領域に割り当てるブロックはありませんが、表示したいので、block-footertop.tplという名前のテンプレートファイルを作成しました。しかし、私の理解では(drupal docs から))この領域は、フッターの上部領域にブロックが割り当てられている場合にのみ表示され、そのようにすることを意図しています。 .phpには、このリージョンに配置された条件はありません。

<?php print $footertop; ?>

Smartyで行ったように、page.tpl.php内にテンプレートを「含める」方法があるかどうか知りたいのですが。私が行った検索のほとんどは、* hook_theme()*を含む結果を示しており、私が達成しようとしているものとは異なるように見えました。

私がこれを試みている理由は、私のpage.tpl.phpにある大量のhtmlマークアップを保存し、drupalテーマをよりよく理解するために純粋な好奇心を払うためです。

この初心者への提案/解決策drupal愛好家に感謝します。

前もって感謝します!!

2
optimusprime619

まず、リージョンとテンプレート変数の違いを知っていることを確認してください。第二に、あなたの質問には異なるアプローチがあります:

A)カスタム領域+ブロック

確かに、新しいリージョンを定義できます。これは、次の2つの方法のいずれかで実行できます。

  • あなたのテーマの.infoファイル(最適な方法)このようなregions[regionname] = Region name
  • の中に template.phpファイル(これを使用する必要性を試したことも、感じたこともありません)

新しいリージョンを定義したら、ブロックとコンテンツを追加できます。新しいリージョンの定義をスキップして、必要に応じてフッターリージョンまたはリージョンにブロックを追加するだけです。

あなたの場合あなたのmyTheme.infoファイルは次のようになります。

; $Id$
; @file: myTheme.info

regions[footertop] = Footer Top
  • 領域変数($footertop

    /**
    * @file page.tpl.php
    * $footertop contains all the HTML content for that region
    * and the blocks belonging to that region
    */
    print $footertop;
    
  • .infoファイルはデータベースにキャッシュされるので、 キャッシュをクリア する必要があります

  • 新しいブロックを追加:www.example.com/admin/build/block/add
  • ブロックをfootertopリージョンに追加します:www.example.com/admin/build/block/list/myTheme

いつこのアプローチを使用する必要がありますか:静的なコンテンツや、サイトに追加するtext/htmlのスニペットのみがある場合適切な入力フィルターを選択することを忘れないでください。そうしないと、コンテンツの一部/すべてがフィルターで除外される可能性があります。

ソース: http://drupal.org/node/171224

B)テンプレート変数

すべてのテンプレートで使用できる新しい一般変数を定義したいと思います。何かのようなもの $contentまたは$is_front。これを行う方法:古き良き友人 hook_theme :)

新しいテンプレートファイルを作成するfootertop.tpl.phpそしてその中に、追加したい静的データを追加します

/** 
* Implementation of hook_theme()
* @file template.php - in your active theme
*/
function myTheme_theme(&$existing, $type, $theme, $path) {

  /*
  * If you are sub-theming another theme, like Zen,
  * you might need to do something like this
  * $hooks = zen_theme($existing, $type, $theme, $path);
  */ 

  $hooks['footertop'] = array(
    'template' => 'footertop',
    // 'arguments' => array(), // We could specify some arguments, useful when the content is not static
    // 'path' => $path . 'to/file' // This is also usefull if your template is in a subfolder
  );

  return $hooks;  
}

/**
* Now we make our variable available to other templates
* file template.php - in your active theme
*/
function myTheme_preprocess_page (&$vars, $hook) {
  $vars['footertop'] = theme('footertop');
}

テンプレートに変数を追加するには、次のようにします。

/**
* @file e.g. page.tpl.php
*/

/* Some other code */

<?php print $footertop; ?>

/* Other code */

ソース:

proになりたい場合は、drupalテーマまたはdevelopmentこの件に関する本を自分で入手する必要があります。 Drupalテーマがどのように機能するかを理解するのに苦労していたとき、それは私に大いに役立ちました:)あなたはあなたのために正しいものを見つけることを定義します。

2
Max