ここの私の設定は次のとおりです:
ここに巨大なDruaplサイトがあり、アップロードされたファイルとその分類用語をテーブルに表示するビューブロックを含む1つのページがあります。このページのタイトルは「アップロードされたファイル」です。
これらの分類用語をクリックすると、URLと追加のクエリ?tid=123
が呼び出され、テーブルにその用語のフィルターが適用されます。これで、分類tid 123のコンテンツのみがテーブルに表示され、URLは?tid=123
で終わります。
そのような状況では、「アップロードされたファイル」というタイトルを「分類用語のファイル123のファイル」に置き換えます。ここで、123は、tid 123に接続された実際の用語を表します。「To-Do-List」とします。
テーマのテンプレートフォルダー内で、page--node--nid.tpl.php
という単一のページのテンプレートファイルを作成しました。nidはそのページの実際のノードIDを表します。用語をクリックすると、ページのタイトルを操作できるようになりました。タイトルが印刷されている場所で<?php print $_GET['tid'] ?>
と言うことができます。もちろん、「アップロードされたファイル」の代わりに、ここでは例として123のtidを印刷します。
しかし、IDの代わりに用語をテンプレートに出力させるにはどうすればよいですか?
IDに関連付けられた用語をロードするためのtaxonomy_term_loadという関数があることを知っています。しかし、どこでその関数を呼び出しますか?また、新しく作成した$taxonomy_title
をpage--node--nid.tp.php
に渡す方法を教えてください。 page--node--nid.tpl.php
の上部にあるタグ内のいくつかの前処理関数を呼び出す必要がありますか?
問題をさらに難しくするために、さまざまな語彙の用語があります。私の例では、クエリを?tid=123
に設定していますが、別のボキャブラリの用語をクリックすると、クエリが?tid_1=234
に設定されます
私は一人でここまで来ましたが、その関数をどこでどのように使用するかについての説明を非常に感謝しています...
これは、コンテキストフィルターでも実現できます。
コンテキストフィルター:コンテンツ:分類用語IDがあります
フィルター値が利用できない場合:
フィルター値IS使用可能、またはデフォルトが提供されている場合:
検証基準を指定-> PHPコード
$term = taxonomy_term_load($argument);
drupal_set_title($term->name);
return $argument;
終わった!
私が見ているように、あなたはあなたのノードのタイトルを変更したいのですが、これは_page.tpl.php
_ではなく_node.tpl.php
_からのものです。したがって、コンテンツタイプごとに個別の_page.tpl.php
_を作成する必要があります。
_page.tpl.php
_をコピーして-p _age--CONTENT-TYPE.tpl.php
_のように名前を付けることで、コンテンツタイプのカスタムpage.tplを作成できます。
次に、_template.php
_ファイルを回避する必要があります。ネストの手順に従ってください。
最初に MYTHEME_preprocess_page() 関数でテンプレートファイルのこの用語IDを取得する必要があります。このようなことをしてください-
_function MYTHEME_preprocess_page(&$vars){
if ($node = menu_get_object()){
if($node->type == 'CONTENT_TYPE'){
$vars['node'] = $node;
//Get term ID or Term name, which ever is available. Yu can see the available values by doing dsm($node) here.
//I don't have output of your $node object here, otherwise I can suggest exact.
$term_id = $node->field_TERM_REFERENCE[LANGUAGE_NONE][0]['term_id'];
//If you have term ID then get term name.
$term_name = taxonomy_term_load($term_id);
//Prepare new title.
$final_title = "Files of the taxonomy term ".$term_name;
//Declare the new title variable to use at page.tpl.php.
$vars['final_title'] = $final_title ;
}
}
}
_
次に、新しく作成した_page--CONTENT-TYPE.tpl.php
_に移動し、その中で_$title
_出力を見つけます。これは次のようになります-
_<?php if ($title) : ?>
<h1 class="title">
<?php print $title; ?>
</h1>
<?php endif; ?>
_
それを-に置き換えます
_<?php if ($final_title) : ?>
<h1 class="title">
<?php print $final_title; ?>
</h1>
<?php endif; ?>
_
完了しましたね。キャッシュをクリアして、変更されるかどうかを確認します。機能しない場合はコメントしてください。ただし、dsm($node)
による_$node
_オブジェクトの出力を受け取る準備をしてください。
助けてくれたすべての人に感謝します(Matt thereにも-> http://mattwad.wordpress.com/2011/10/12/drupal-theming-change-a-page-title-in-template-php/ )。
すべての$ varsにアクセスするには、最初にprocess_page関数内でdpmを実行する必要がありましたが、ようやくtemplate.phpのpreprocess_page関数ですべてを実行することができました(余分なpage-or-node.tpl.php
なし)。
function MYTHEMENAME_preprocess_page(&$vars) {
if ($_GET['q'] == 'node/338' && isset($_GET['tid'])) {
$tid_term = $_GET['tid'];
$term = taxonomy_term_load($tid_term);
$vars['title'] = $term->name;
}
}
$vars['title']
を使用して、$_GET['tid']
でURLからtidを取得した後、最終的に実際のページタイトルをtidの用語に設定しました