web-dev-qa-db-ja.com

1つのページの$ titleを分類用語に置き換える方法は?

ここの私の設定は次のとおりです:

ここに巨大な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_titlepage--node--nid.tp.phpに渡す方法を教えてください。 page--node--nid.tpl.phpの上部にあるタグ内のいくつかの前処理関数を呼び出す必要がありますか?

問題をさらに難しくするために、さまざまな語彙の用語があります。私の例では、クエリを?tid=123に設定していますが、別のボキャブラリの用語をクリックすると、クエリが?tid_1=234に設定されます

私は一人でここまで来ましたが、その関数をどこでどのように使用するかについての説明を非常に感謝しています...

1
leymannx

これは、コンテキストフィルターでも実現できます。

コンテキストフィルター:コンテンツ:分類用語IDがあります

フィルター値が利用できない場合:

  • デフォルト値を提供->タイプ:URLからの分類用語ID
  • ノードページからデフォルトフィルターをロードします。これは、関連する分類ブロックに適しています
  • 使いたい語彙をチェック

フィルター値IS使用可能、またはデフォルトが提供されている場合:

検証基準を指定-> PHPコード

$term = taxonomy_term_load($argument);
drupal_set_title($term->name);
return $argument;

終わった!

2
Jack-PL

私が見ているように、あなたはあなたのノードのタイトルを変更したいのですが、これは_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_オブジェクトの出力を受け取る準備をしてください。

1
RajeevK

助けてくれたすべての人に感謝します(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の用語に設定しました

0
leymannx