我需要将嵌套的树集渲染为具有无限深度的li结构。虽然我理解如何在普通的PHP(例如这里:PHP: How to generate a <ul><li> tree in an xml2assoc array result?)中做到这一点,我讨厌回应html标签,并希望在模板中完成它。 PHP可以作为模板语言吗?我应该在哪里定义递归函数?
答案 0 :(得分:2)
对我来说,我依赖于每次迭代需要多少“代码”。
对于简单的树,我只是在视图文件的顶部声明一个函数。 (因为我认为该功能在该单独的文件中只有实际价值)。
对于有更多渲染的树,我会创建一个单独的部分文件。该文件可以在视图文件和部分文件本身中调用。
您还可以创建一个帮助文件,您在该特定页面上使用它,而不是部分更有意义并且更容易实现(并且您可以使用所有其他帮助函数和symfony函数)
答案 1 :(得分:0)
<?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;?>
答案 2 :(得分: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>