背景:
我正在构建一个网站,该网站使用网络表单从用户那里收集信息,使用收集的值来计算一些结果,然后使用结果从列表中选择建议的解决方案(或抱怨程序无法提供从提供的参数中回答)。
当用户点击提交时,计算通过 hook_webform_submission_presave() 完成,我将计算结果存储在 $_SESSION 数组的元素中(容量数字,用负值编码,用于上述“无法提供答案”的情况),以及带有建议型号的字符串(如果有解决方案)。在 web 表单提交发生后,Drupal 将链接到一个新的(标准内容页面),(我原本打算)将由 hook_page_alter() 更改。所以,现在解决问题:
我曾计划让 hook_page_alter 去寻找纯内容页面的元素(字符串 xxxxxx),并用该字符串替换页面实际应该包含的内容(关于所选解决方案的注释,或要求用户或者再试一次,或者通过电子邮件或其他方式与我们联系)。
问题:
hook_page_alter() 接收到一个庞大的数组 $page 来操作。我正在操作的部分是 $page['content],但即使在其中,我的触发字符串 ('xxxxxx') 也经常出现(21 次,当我转储 $page['content']['system_main ']['节点'][$nid])。
更有趣的是(对我来说,无论如何)如果我用下面的代码替换字符串 'yyyyyy' 为 'xxxxxx' (是的,它很丑,但是已经很晚了,我在这里处于完全调试模式:
$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-esque”的方式来完成这件事吗?
第二个问题更具有学术兴趣——我是如何更改 $page 数组这一部分的一个元素的: $xx->body['und'][0]['value'] = $zz; 被复制到我找到的其他 7 个地方?洞察力?注释 ?(请保持礼貌——我已经使用 Drupal 大约 6 个月了,但编写软件的时间比这要长得多)
提前致谢,
德里克