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;
}}
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
変数を使用するため、慣習に忠実でその方法を使用する方が良いでしょう。