2012-01-10 8 views
2

私はnode.tpl.phpでdrupal_set_titleを使用しようとしていますが、タイトルを設定しているテキストは$ head_title変数にのみ表示され、$ title変数には表示されません。 $ title変数はまだノードのタイトルに設定されています。

これはDrupal 7です。Drupal 6ではこれと同じようにdrupal_set_titleを複数回使用していますが、完全に機能しています。

+0

'$のhead_title'は' node.tpl.php'、もしかして[ 'html.tpl.php'](HTTPの標準的な変数ではありません。ここで動作するコードです。 drupal.org/api/drupal/modules--system--html.tpl.php)? (利用可能な変数の一覧については、['node.tpl.php' docs](http://api.drupal.org/api/drupal/modules--node--node.tpl.php)を参照してください) – Clive

+0

$ head_title is html.tpl.phpで使用されていて正しく設定されていますが、node.tpl.phpの$ titleが正しく設定されていません。 – deckerdev

+0

Gotcha、aboutsは 'drupal_set_title'を使っていますか?それはテーマ/モジュールの中にありますか?もしそうなら、それは機能していますか? – Clive

答えて

2

クライヴは私が正しい方向に指摘しましたが、私はpreprocess_nodeを動作させることができなかったので、代わりにpreprocess_pageを使用しなければなりませんでした。 // API:

function mycooltheme_preprocess_page(&$vars){ 
    if (isset($vars['node']) && $vars['node']->type == 'news'){ 
     drupal_set_title('News'); 
    } 
} 
5

私はこれがうまくいかない理由は、どこから呼び出すのかという理由によるものだと思います。 Drupalのテンプレートシステムは、変数(そのうち$titleが1)を構築し、それらをテンプレートファイルに渡すことによって動作します。

node.tpl.phpになるまでには、そのファイルのスコープ内でのみ利用可能な$title変数が既に設定されています。

drupal_set_titleを呼び出すと、後で node.tpl.phpより呼び出される( html.tpl.phpため $head_titleを変更するために動作しますが、それはあなたがからコードを呼び出しているテンプレートファイルの変数を変更することはできませんので、あなたの最善の策を置くことであろうテンプレートファイルの前にタイトルを設定し、あなたのテーマの template.phpで前処理機能が処理されます。

function MYTHEME_preprocess_node(&$vars) { 
    drupal_set_title('A new title'); 
} 

それはまだ$vars['title'] =「新しいタイトル」を設定明示的にしてみてください動作しない場合; `同じ前処理機能に。

最良のオプションは、非常に小さなカスタムモジュールを作成し、テンプレートファイルがプロセスに入る前に、道と呼ばれるhook_node_view()を実装することであろうと、常に動作するはずです:

function MYMODULE_node_view($node, $view_mode, $lang_code) { 
    drupal_set_title('A new title'); 
} 
関連する問題