web-dev-qa-db-ja.com

アイテムを上書きするためのpreprocess_node関数を取得できません

Drupal 6インストールでカスタムpreprocess_node関数を機能させるのに行き詰まっています。値に基づいて物事をエコーすることができますが、オーバーライドが機能していないようです。 。私が試した最新のことは、 このページ の回答に記載されている回答です。

$node->title = "Test";

$ nodeでprint_rを実行すると、配列で新しい値でオーバーライドされていることがわかりますが、出力されているタイトルは古いもののままです。 $ variables [title]の設定も試しましたが、うまくいきませんでした。タイトルよりも深いものを狙っていますが、これから始めようと思っていました。これは、template.phpファイルに入れてみた例です。実際のテーマ名をmythemenameに置き換えました。

function mythemename_preprocess_node(&$variables) {

//Profiles
if($variables['type'] == "child_profile"){

    $node = $variables['node'];

        $node->title = "Test";
        //This echo correctly shows the new title but it's not actually overriding anything
        echo $node->title;


    $variables['node']=$node;
}}
3
Bjorn

node.tpl.php を見ると、タイトルは次のように出力されています。

<?php if (!$page): ?>
  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>

ご覧のとおり、$titleではなく$node->title変数を使用しています。

テンプレートの変数の配列キーと、テンプレートファイルで使用可能な変数の名前の間には、1対1のマッピングがあります。プリプロセス関数に$variables['my_awesome_var']がある場合、その変数はテンプレートファイルで$my_awesome_varとして使用できます。

したがって、それを念頭に置いて、前処理関数で行う必要があるのは次のとおりです。

function mythemename_preprocess_node(&$variables) {
  //Profiles
  if ($variables['type'] == "child_profile") {
    $variables['title'] = 'Test';
  }
}

考えを完成させるために、代わりにノードテンプレートをprint $node->titleに変更することもでき、現在のコードは正常に機能します。ただし、元のテンプレートファイルは別の$title変数を使用するため、慣習に忠実でその方法を使用する方が良いでしょう。

3
Clive