2

我的 D7 模块中有一个表单的渲染数组,如下所示:

'form' => 
  array
    '#id' => string 'demo-form' (length=9)
    '#action' => string '/sprint07/' (length=10)
    'name' => 
      array
        '#title' => string 'Username' (length=8)
        '#maxlength' => int 13
        '#size' => int 15
        '#type' => string 'textfield' (length=9)
        '#required' => boolean true
        '#input' => boolean true
        '#autocomplete_path' => boolean false
   ... snip ...

我正在使用twig-for-drupal创建主题,但我似乎无法恢复值,我尝试过{{ form['name']['#type'] }},{{ form.name.#type }}{{ form.name['#type'] }},但它们都返回空白。

其他字段,例如form['#action']工作正常,那么我应该如何访问多个数组中的信息?我不能过多地更改模块,因为其本机状态的 php 模板使用render(form);

- 更新 -

为此添加了更多调试,似乎我可以用{{ form|dump('v') }}上面的方法向我展示整个数组,但是当我这样做时,{{ form.name|dump('v') }}我只得到一个字符串,我认为这意味着 twig 正在自动检测它的渲染数组,并且“有帮助”为我转换它.. 所以我想这是我的问题:如何关闭自动渲染?

4

2 回答 2

1

“name”子数组不包含“#id”键。

试试看

{{ form.name.#title }} 
于 2012-12-28T09:50:39.953 回答
0

事实证明,目前不可能根据具体情况执行此操作,TFD 当前设置为自动渲染它认为是渲染数组的任何内容,要关闭它,您需要将 autorender 设置为 FALSE twig_get_instance(). 但是,我自己尝试过,它似乎仍然将数组转换为字符串,因此这可能是 TFD 中的错误,或者我只是不了解用法,这同样可能,如果不是更多的话。

来自ReneB 的沙箱

自动渲染

这个版本的 TWIG 引擎使用自动渲染来防止用户获取 RSI 输入 {{node.field_somefield|render}} 为他们想要从渲染数组(厄运)渲染的每个字段,因此可以安全地输入 {{node. field_something}}

在渲染编译的模板 TFD 时,检查被调用的变量是字符串、可调用变量还是数组。如果它是一个字符串,它会简单地回显 $string,如果它是一个可调用的,它会为它返回一个适当的方法()。如果它是一个数组,它假定它是一个可渲染数组并将其映射到 render($string); drupal的方法。

这样,用 hide() 隐藏的对象就会受到尊重。

要暂时关闭它,您必须在 twig.engine 的 twig_get_instance() 方法中将 autorender 设置为 FALSE。

我正在研究 {% noautorender %} {% end noautorender %} 块结构。

于 2012-12-28T17:58:43.743 回答