我需要将无限深度的嵌套集树渲染为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