【问题标题】:Which piece of ['content'] is relevant in $page when using hook_page_alter使用 hook_page_alter 时,哪个 ['content'] 与 $page 相关
【发布时间】: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']

标签: drupal drupal-7


【解决方案1】:

要在标题中回答您的问题,它本身就是$pagehook_page_alter 有一个参数,该参数是其第一级的区域数组。 因此,如果您将参数命名为 $page,$page['content'] 就是内容区域(不要与此混淆) 内容”部分。其他元素也是内容)。

如果不查看您的整个 hook_page_alter 函数,很难说出确切的问题是什么。

作为旁注,我建议不要在这种情况下使用该钩子。对我来说,听起来应该有更好的(就服务器资源使用而言更便宜)的解决方案。 Webform 是另一个 Drupal 表单,所以所有 hook_form_alter 的东西都适用于此。 您可以将额外的提交处理程序添加到现有的网络表单,甚至是菜单注册表中的新页面(使用通配符保留一些路径或一组路径),因此对于您的案例 IMO,确实不需要使用 hook_page_alter

PS:听this podcast from LullaBot guys

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2014-11-16
    • 2017-10-24
    • 2011-11-09
    • 2015-12-23
    相关资源
    最近更新 更多