2012-10-04 70 views
2

我認爲鬍子很棒,因爲它允許偏分量,與Smarty相比,它也相對輕量級。我使用鬍鬚的想法是:定義一組構成UI庫的部分。在這些部分中傳遞數據並像使用類固醇上的html元素一樣使用它們。PHP - 循環中的鬍鬚偏好

部分的一個例子是一個列表元素(直觀地)。從標記角度來看,元素被定義爲20行HTML塊。我想在循環中使用該部分,或者我可能想獨立使用它。

如果我想建立包含列表中提到的部分,我想這樣做是這樣的:

{{#my_list_elems}} 
... Maybe some HTML code 
{{> my_partial 
{{/my_list_elems}} 

比方說my_partial看起來是這樣的:

<div> 
    <ul> 
    {{#another_array}} 
    <li>{{name}}</li> 
    {{>#another_array}} 
    </ul> 
</div> 

現在,一對夫婦的後小時試圖弄清楚,我的主要模板看起來或多或少是這樣的:

{{> head}} 
{{> header}} 
<div>Some static HTML</div> 
... More code 
{{#some_array}} 
{{> my_partial}} 
{{/some_array}} 
{{> footer}} 

問題: 出於某種原因,這對我不起作用。我嘗試渲染部分個人,它的作品。一個數組雖然?咩。

此外,我很難搞清楚,如果我確實得到它的工作,它將如何處理變量。目前,我正在呈現這樣的:

$template = $this->mustache->loadTemplate('template'); 
$partials['my_partial'] = $this->mustache->loadPartial('my_partial'); 
$data['my_partial_arr'] = $this->getPartialData(); 

echo $template->render($data, $partials); 

注意的是,PHP代碼和部分實例並不意味着一起工作,他們只是說,實例。

問題是,此功能是否支持?如果是的話,我做錯了什麼?也許我的PHP數組沒有適當的格式?我可以將數組/循環放在較低級別的局部區域中,但是當我想單獨使用局部區域(將數據包裝在一個elem數組中,以便渲染時)時,這種方式會變得很難看。

回答

3

所以{{> head }},{{> header }}{{> footer }} partials工作,但{{> my_partial }}不?您是使用文件系統partials加載器,還是將部分作爲字符串傳遞給Mustache構造函數?

兩兩件事可以趕上你:

  1. 鬍子可能不會考慮你的陣列(my_partial_arr)是「迭代」。 The Mustache.php wiki has a bit more on that。您可以通過array_values()運行'em'以確保它們將被循環播放,而不是用作區段上下文。

  2. 您不能在鬍鬚模板上將偏分量傳遞到the render() call

    在大多數情況下,作爲第二個參數傳遞partials不會引起問題,因爲該函數不會帶來第二個參數......它只會通過loadPartial()在您的Mustache實例上加載任何必要的部分。

+0

是啊,一切工作正常,但在環狀部分 我認爲這是#1 - 只需要運行一個測試,將是背部採用了隨訪。 你說得對#2,這有多愚蠢? :) – Claudiu

+0

我正在使用一個array_map()的結果,我錯誤地認爲會返回一個數組(讀:不是散列)。那麼,我錯了,我傳遞給array_map()的第二個參數是跳過一些索引,另一個哈哈,因爲數組是array_unique()調用的結果。頭腦風暴。謝謝您的幫助。 – Claudiu