一般的な概要については、前処理関数内の変数の操作について読む必要があります。
命名規則に関しては、これは通常非常に単純ですが、現在の例には問題があります (以下を参照)。
前処理関数の署名が必要です
[yourModuleName|yourThemeName]_preprocess_[themeFunctionName](&$variables)
そのため、テーマの template.php ファイル内でページ テンプレート用に 1 つ実装すると、次のようになります。
themeName_preprocess_page(&$variables)
ほとんどの場合、テーマ関数の名前は *.tpl.php ファイルの名前で、末尾に .tpl.php がなく、ハイフンの代わりにアンダースコアが付いています。ただし、テンプレート ファイルがテンプレートの提案に基づいて選択された場合、前処理機能はベース名に対してのみ実装でき、追加の提案に対しては実装できないため、問題があります。(代替テンプレート ファイルの提案は、前処理関数自体に追加されます。)
現在の例は、そのcontent-field-field_transmission_make_model.tpl.php
ような提案と同様に、ベース名がcontent-field.tpl.php
であり、対応するテーマ関数が であるケースの 1 つですcontent_field
。したがって、という名前の前処理関数を実装し、yourThemeName_preprocess_content_field(&$variables)
その中で $variables 配列内の利用可能なエントリを調べて、完全に異なる CCK フィールドではなく、実際に「field_transmission_make_model」に対して呼び出されているかどうかを確認する必要があります。
function yourThemeName_preprocess_content_field(&$variables) {
// Are we called for the right field?
if ('field_transmission_make_model' == $variables['field_name']) {
// Yes, add/manipulate entries within the variables array
$variables['new_entry'] = 'A useless new variable';
$variables['label'] = 'A useless change of the existing label variable';
}
}
(注:テストされていないコード、タイプミスに注意してください)
$new_entry
この後、テンプレート ファイルで新しい変数が使用可能になり、$label
変数の内容が変更されているはずです ($variables 配列内のすべての最上位エントリは、配列にちなんで名付けられたテンプレート ファイルの個別の変数に変換されます)。索引)。
2 番目の質問については、前処理関数の基本的な使用法はすべてのテンプレート ファイルで同じですが、次の点に注意してください。
- 前処理関数は、テーマ関数ではなく、*.tpl.php ファイルを使用するテーマ呼び出しでのみ使用できます
- $variables 配列の内容は、何をテーマにするかによって大きく異なります。
- 他のモジュールも前処理関数を実装している可能性があり、それらは次々と呼び出されるため、別のモジュールによって追加されたものを変更したい場合は、実装がその後に呼び出された場合にのみ変更できます (これは no になります)。あなたの場合の問題、テーマ内の実装はモジュール内のすべての実装の後に呼び出されるため、一度に多くの実装が存在する可能性があることに言及したかっただけです)