【发布时间】:2012-12-07 15:09:16
【问题描述】:
背景:
我正在构建一个网站,该网站通过网络表单从用户那里收集信息,使用收集的值来计算一些结果,然后使用结果从列表中选择建议的解决方案(或抱怨程序无法提供来自提供的参数)。
当用户点击提交时,计算通过 hook_webform_submission_presave() 完成,我将计算结果存储在 $_SESSION 数组的元素中(容量数字,用负值编码,表示“无法提供答案”上面提到的情况),以及带有建议型号的字符串(如果有解决方案)。在 webform 提交发生后,Drupal 将链接到一个新的(标准内容页面),(我原本打算)将由 hook_page_alter() 更改。所以,现在解决问题:
我曾计划让 hook_page_alter 去寻找纯内容页面的元素(字符串 xxxxxx),并用该字符串替换页面实际应该包含的内容(关于所选解决方案的注释,或者询问错误消息用户可以再试一次,或者通过电子邮件或其他方式与我们联系)。
问题:
hook_page_alter() 接收一个庞大的数组 $page 来操作。我正在操作的部分是 $page['content],但即使在其中,我的触发字符串 ('xxxxxx') 也经常出现(21 次,当我转储 $page['content']['system_main ']['nodes'][$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 个月了,但编写软件的时间比这要长得多)
提前致谢,
德里克
【问题讨论】:
-
主要问题已解决......渲染到页面的内容在这里: $page['content']['system_main']['nodes'][5]['body'] [0]['#markup']