2016-01-24 61 views
4

我想自動檢查HTML中的複選框。我已經成功地得到這個工作,但它是在模板有點凌亂:如何使用樹枝模板自動檢查複選框?

<ul> 
    {% for tag in tags %} 
     {% set selected = false %} 
     {% for article_tag in article.tags %} 
      {% if article_tag.id == tag.id %} 
       {% set selected = true %} 
      {% endif %} 
     {% endfor %} 
     <li><input type="checkbox" name="tags[]" value="{{ tag.id }}" {% if selected %}checked{% endif %}> {{ tag.name }}</li> 
    {% endfor %} 
</ul> 

所以我加載數據是這樣的(JSON格式):

[ 
    'tags' => [ 
     {'id'=> 1, 'name'=>'Travel'}, 
     {'id'=> 2, 'name'=>'Cooking'}, 
    ], 
    'article' => { 
     'tags' => [ 
      {'id'=> 1, 'name'=>'Travel'}, 
     ], 
    } 
] 

而且,我沒有使用Symfony(我正在使用Slim的Twig庫),所以不知道Symfony是否在它的框架中使用Twig做了一些東西。如果是這樣,它不會爲我工作:(

回答

1

問題是文章是一個數組,所以或者你需要循環它的每個標籤數組,包含或者你只需​​訪問它的第一個元素爲遵循:

{% for article_tag in article[0].tags %} 

相反的:

{% for article_tag in article.tags %} 

See the result on this working twigfiddle

希望這有助於

+0

「文章」是一個數組,但是一個PHP關聯數組 - 在JSON中,我猜可能是一個對象。爲了清楚起見,我更新了我的問題並給出了PHP關聯數組的JSON格式的數據示例。問題不是它沒有工作,而是工作。但似乎我必須在我的視圖中嵌套循環,這看起來像模板中的很多邏輯 - 我希望Twig有一些構建機制來處理這個問題,因爲在輸出複選框時這是相當普遍的事情。除非這是實現這一目標的唯一手段,否則我會堅持下去。謝謝 – Martyn

+0

Hi @Martyn現在我明白你的問題了,在symfony中,有一個表單組件可以爲你管理這種行爲(我不知道如何管理一個窗體......)。爲了獲得更多的清理代碼,你可以在宏或者小枝函數中封裝它。希望得到這個幫助 – Matteo

+0

感謝您的迴應。葉在網上搜索我可以看到Symfony具有該框架似乎包含的其他功能。我不認爲Slim提供很多。我會考慮一下宏,看看它是否會運行良好,或許有助於保持整潔。 – Martyn