我需要將無限深度的嵌套集樹渲染爲li結構。雖然我知道如何在普通的PHP(如:PHP: How to generate a <ul><li> tree in an xml2assoc array result?)中做到這一點,但我討厭迴應html標籤,並希望在模板中完成它。 PHP可以作爲模板語言嗎?我應該在哪裏定義遞歸函數?Symfony:模板中的遞歸調用
0
A
回答
2
對我來說,我依賴於每次迭代需要多少「代碼」。
對於簡單的樹,我只需在視圖文件的頂部聲明一個函數。 (因爲我認爲這個函數在這個單獨的文件中只有真正的價值)。
對於有更多渲染的樹,我會創建一個單獨的部分文件。該文件可以在視圖文件和部分文件本身中調用。
你也可以創建一個幫助文件,您的特定網頁上使用,把除部分會更有意義和更容易實現(你可以使用所有其他的輔助功能和symfony的功能)
0
HM,這裏是我的sollution:
<?php
/**
* @var $records
* @var $field
*/
?>
<?php if(isset($records) && is_object($records) && count($records) > 0): ?>
<div id="document-nested-set">
<ul class="nested_set_list">
<?php $prevLevel = 0; $is_first = true; ?>
<?php foreach($records as $record): ?>
<?php if($prevLevel > 0 && $record['level'] == $prevLevel) echo '</li>';
if($record['level'] > $prevLevel) echo '<ul>';
elseif ($record['level'] < $prevLevel) echo str_repeat('</ul></li>', $prevLevel - $record['level']); ?>
<?php $rel = $record['lft']=='1'?'root':($record['is_approved'] && $record['is_checked']?'document':'document_grey') ?>
<li id ="phtml_<?php echo $record->id ?>" rel="<?php echo $rel ?>" <?php echo $is_first?'class="open"':'' ?>>
<a href="#"><ins> </ins><?php echo $record->$field;?></a>
<?php $prevLevel = $record['level']; $is_first = false; ?>
<?php endforeach; ?>
</ul>
</div>
<?php endif;?>
0
一個簡單的例子:
<?php
$input = array('c' => array('c1' => 't1', 'c2' => array('c21' => array('c211' => 't2'), 'c22' => 't3')));
$iterate = function($array) use (&$iterate) {
$out = '<ul>';
foreach($array as $key => $child)
$out .= '<li>'.$key.': '.(is_array($child) ? $iterate($child) : $child).'</li>';
return $out.'</ul>';
}
?>
<html><body><?php echo $iterate($input); ?></body></html>
相關問題
- 1. XSL遞歸調用 - xsl:函數與xsl:帶調用模板的模板
- 2. 角遞歸模板
- 3. 如何在函數調用中做模板遞歸?
- 4. 過多使用遞歸的jQuery模板
- 5. javascript中的Angular2遞歸模板
- 6. 模板遞歸類型
- 7. 遞歸模板定義
- 8. 遞歸矢量模板
- 9. 遞歸塊T4模板
- 10. 遞歸模板參數
- 11. JQuery模板 - 太多遞歸
- 12. 模板互相遞歸
- 13. 模板遞歸錯誤
- 14. C++簡單模板遞歸
- 15. KnockoutJS和遞歸模板
- 16. 在模板中調整遞歸嵌套向量的大小
- 17. 如何使用遞歸模板?
- 18. 將屬性傳遞給遞歸模板?
- 19. 在Mojolicious中創建遞歸模板塊
- 20. 遞歸模板模式;何時完成?
- 21. 模板內的遞歸類型定義
- 22. 的Symfony模板引用
- 23. symfony中的引導模板
- 24. 元編程模板遞歸不遞歸(編輯重要)
- 25. Symfony SonataAdmin模板
- 26. java.lang.IllegalStateException:getWritableDatabase遞歸調用
- 27. 遞歸調用onActivityResult
- 28. 遞歸調用C#
- 29. getWritableDatabase遞歸調用
- 30. getDatabase遞歸調用
嘿,謝謝。在這種情況下,表現助手與部分表現如何? – Dziamid 2011-03-14 12:48:04
我認爲helpers可能會更快一些,因爲它們一旦加載就可以訪問。 partials是遞歸加載的,因此每次都必須通過Symfony視圖堆棧。但是你也可以緩存partials,partials有更簡潔的代碼。 (對用戶而言更易讀),並且在MVC方面更純粹。 – 2011-03-14 14:49:05