Drupal 7には、hook_node_loadを実装するモジュールがあります。これは、page.tpl.phpファイルで使用したい変数を作成します。それが現在ロードされているノードと同じタイプのノード現在のところ、次のように変数をグローバルにしています。
global $node_count;
$node_count = db_query("SELECT count FROM {node} WHERE type = :type", array(":type" => $node->type"))->fetchAll()[0]->count;
次に、私のpage.tpl.phpファイル内で、次のようなことを行う必要があります。
global $node_count;
echo "<p>$node_count</p>";
$node_count
または$node
と同じ方法で、$user
変数をスコープ内に作成する方法があることを知っています。私がテーマで見つけたチュートリアルは、テーマ関数全体を書き直すことを含むようです-私は複雑なことは何もしようとはしていません。 .tpl.phpファイルのスコープでこの変数を作成する簡単な方法はありますか?関数のようなものですか?
Drupal theming、 template preprocess functions は、特定のテンプレートで使用できる変数を準備する関数です。テンプレートの前処理関数は次々と実行され、すべての変数を含む配列を囲みます。function THEMENAME_preprocess_TEMPLATENAME(&$variables) { // Your code here. }
の形式で、テーマのtemplate.phpに独自の変数を追加できます。
Hook_node_load実装のノードオブジェクトに値を追加する場合、おそらく次のようになります。
function mymodule_node_load($nodes, $types) {
foreach ($nodes as $node) {
$node->myvariable = 'somevalue';
}
}
次に、page.tpl.phpの$ node-> myvariableにアクセスします。 Drupalは既にデフォルトで現在のノードオブジェクトを変数に追加しているので、これは前処理関数を記述する必要さえありません(これは template_prepocess_page で発生します) 。)これは、これを単にpage.tpl.phpに追加できることを意味します。
<?php if ($node->myvariable): ?>
<div class="myvariable">
<?php print $node->myvariable; ?>
</div>
<?php endif; ?>
テンプレートファイルからアクセス可能な変数は、モジュールで実装できるプリプロセス関数で設定できます。
あなたのケースでは、モジュールは次のようなコードを実装する必要があります(「mymodule」をモジュールの短い名前に置き換えます):
function mymodule_preprocess_page(&$variables) {
if (!empty($variables['node'])) {
$variables['node_count'] = db_query("SELECT count FROM {node} WHERE type = :type", array(":type" => $variables['node']->type"))->fetchField();
}
}
ノードに関連付けられていないページにもページテンプレートが使用されるため、$variables['node']
が空でないことを確認します。
page.tpl.phpでは、$node_count
を使用して、前処理関数から同じ変数セットにアクセスします。