これは私がDrupalのテーマで抱えている問題ですが、問題は難解なPHP問題と思われるので、ここで答えを見つけようと思っていました。PHP配列のこれら二つの文字列の違いは何ですか?
$ vars ['theme_hook_suggestions']配列は、テンプレートファイルの検索に使用されます。今のところ、すでに存在しているのと同じ値をハードコードすると、テンプレートが見つかります。
論理的には、同じ入力が同じ出力である必要があります。したがって、入力がテンプレートを見つけたら入力とは異なる必要があります。
この配列に追加している2つの 'page__gallery'文字列の違いは何でしょうか?私はそれを分割して再結合することによって文字列を再構築しようとしました。私は、文字列全体と文字列内の各文字との間のエンコードの比較を試みました。どのようにしても同じように見えますが、手動で入力すると機能します。
$str2 = 'page__gallery';
$vars['theme_hook_suggestions'][] = $str2; // if I comment this line out, it doesn't find the template.
print $str2; //output is page__gallery
$str1 = $vars['theme_hook_suggestions'][3];
$vars['theme_hook_suggestions'][] = $str1; // if I comment this line out, it finds the template still.
print $str1; //output is page__gallery
print $str1 == $str2; // 1
print $str1 === $str2; // 1
var_dump($str1) // Outputs: string(13) "page__gallery"
var_dump($str2) // Outputs: string(13) "page__gallery"
ハードコードされた文字列値を持つ$vars['theme_hook_suggestions']
ののvar_dump:既に再添付存在するのと同じ文字列で$vars['theme_hook_suggestions']
の
array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" }
のvar_dump:
array(6) { [0]=> string(10) "page__node" [1]=> string(13) "page__node__%" [2]=> string(14) "page__node__96" [3]=> string(13) "page__gallery" [4]=> string(20) "page__drisco_gallery" [5]=> string(13) "page__gallery" }
最初のものは動作し、もう1つはありません。
ヘルプ!
'print_r'とupdateの代わりに' var_dump'を試してください。 –
'print_r()'の代わりに 'var_dump()'を使ってみてください。 'var_dump()'として保存されているもののタイプを教えてくれます。 – Crontab