背景:
Web フォームを使用してユーザーから情報を収集し、収集した値を使用して結果を計算し、その結果を使用してリストから提案された解決策を選択するサイトを構築しています (またはプログラムが提供できないと不平を言う)。提供されたパラメーターからの回答)。
ユーザーが送信をクリックすると、hook_webform_submission_presave() を介して計算が行われ、計算結果が $_SESSION 配列の要素に保存されます (上記の「回答を提供できない」場合に負の値でコード化された容量の数値)。 )、および解決策がある場合は推奨モデル番号の文字列。ウェブフォームの送信が行われた後、Drupal は新しい (標準のコンテンツ ページ) にリンクしようとしていますが、これは (私が意図していた) hook_page_alter() によって変更される予定でした。だから、今問題に:
hook_page_alter でプレーン コンテンツ ページの要素 (文字列 xxxxxx) を検索し、その文字列を実際にページに含める必要があるもの (選択したソリューションに関するメモ、またはユーザーに要求するエラー メッセージ) に置き換えることを計画していました。もう一度やり直すか、電子メールなどでご連絡ください)。
問題:
hook_page_alter() は、操作する大量の配列 $page を受け取ります。私が操作している部分は $page['content] ですが、その中でもトリガー文字列 ('xxxxxx') が頻繁に発生します ($page['content']['system_main をダンプすると 21 回) ']['nodes'][$nid])。
(とにかく、私にとって) さらに興味深いのは、次のコードで文字列 'xxxxxx' を 'yyyyyy' に置き換えた場合です (はい、醜いですが、夜遅く、ここで完全なデバッグモードになっています :
$xx = $page['content']['system_main']['nodes'][5]['body']['#object'];
$yy = $xx->body['und'][0]['value'];
$zz = str_replace("xxxxxx", "yyyyyy", $yy);
$xx->body['und'][0]['value'] = $zz;
// dpr() below is like print_r, from the handy dandy Drupal 'devel' module
dpr($page['content']['system_main']['nodes'][5]);
dpr() の出力を見て、実際に何がレンダリングされるかを見るのは興味深いことです。この小さな置換によって、xxxxxx の出現回数が 11 に減り、(さらに興味深いことに!) yyyyyy が 8 回出現することがわかります。残念ながら、ページは私の置換の影響を受けずに表示されます - xxxxxx はまだ存在しています。
私が見つけたいのは、どの $page 配列要素がレンダリングされる要素であるかということです - 明日、私はそれを排除することでそれを見つけます (見つけたら投稿します)。魔法使いの皆さんから何かヒントはありますか?
また、このすべてを行うために見るべき、より「drupal風」な方法はありますか?
2 番目の問題は、より学術的に興味深いものです。$page 配列のこの部分の 1 つの要素をどのように変更したのでしょうか: $xx->body['und'][0]['value'] = $zz; 私が見つけた他の7つの場所に複製されますか? インサイト ? コメント ? (礼儀正しくお願いします - 私は約 6 か月間 Drupal を使用してきましたが、それよりもずっと長い間ソフトウェアを作成してきました)
前もって感謝します、
デレク