2012-12-28 51 views
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') }}我只是得到一個字符串,我認爲這意味着小枝會自動檢測到它的渲染數組,並「幫助」轉換爲我..所以我想這使得我的問題:怎麼做我關閉了自動渲染?

回答

0

原來這是目前無法做到這一點對案件逐案基礎上,TFD目前設置爲自動渲染它認爲任何事情都是一個渲染陣列,要關閉此功能,您需要在twig_get_instance()中將autorender設置爲FALSE。我已經嘗試過,但是它似乎仍然將數組轉換爲字符串,所以這可能是TFD中的一個錯誤,或者我只是不明白用法,即使不是更多,也可能是這樣。

ReneB's sandbox

Autorender

這樹枝引擎的版本使用自動渲染,以防止從主題製作打字獲得RSI {{node.field_somefield |渲染}}爲每一個領域,他們希望渲染陣列(厄運),所以可以安全地鍵入{{node.field_something}}

在編譯模板TFD的渲染時,檢查被調用變量是否是字符串,可調用對象或數組。如果它是一個字符串,那麼簡單的做echo $ string,如果它是一個可調用的,它會返回一個適當的方法()。如果它是一個數組,它假定它是一個可渲染的數組並將其映射到渲染($ string); Drupal的方法。

這種方式隱藏了hide()的對象被尊重。

現在要做到這一點,您必須在twig.engine的twig_get_instance()方法中將autorender設置爲FALSE。

我正在處理{%noautorender%} {%end noautorender%}塊結構。

1

「name」子數組不包含「#id」鍵。

嘗試,如果工作

{{ form.name.#title }} 
+0

id是一個不好的例子,我對於存在的鍵也有同樣的問題。 – CaffeinatedDave