入れ子セットツリーを無限深度のli構造としてレンダリングする必要があります。私は平凡なPHP(ここでは:PHP: How to generate a <ul><li> tree in an xml2assoc array result?)でそれを行う方法を理解しながら、私はHTMLタグをエコーし、それがテンプレートで完了したいと思います。 PHPをテンプレート言語として使用できますか?再帰関数はどこで定義する必要がありますか?symfony:テンプレート内の再帰呼び出し
0
A
答えて
2
私にとっては、各反復でどれだけの「コード」が必要かによって異なります。
単純なツリーの場合、ビューファイルの上部に関数を宣言するだけです。 (私は、関数はその別のファイルにのみ実際の値を持つと思うので)。
もう少しレンダリングされたツリーの場合、別の部分ファイルを作成します。そのファイルは、ビューファイルと部分ファイル自体で呼び出すことができます。
あなたはまた、
0
を部分的にはより多くの意味を行い、実装することが容易である(そして、あなたが他のすべてのヘルパー関数とsymfonyの機能を使用することができます)するよりも置くあなたがその特定のページで使用するヘルパーファイルを、作成することができます
<?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. Cの再帰的プロシージャ内で再帰呼び出しを呼び出す
- 2. 関数呼び出しでテンプレート再帰を行うには?
- 3. スクラピースパイダーの再帰呼び出し
- 4. F#の末尾再帰呼び出し
- 5. 再帰呼び出しの結果
- 6. 再帰呼び出しのIndexOutOfBoundsException
- 7. 再帰呼び出しでのカウント
- 8. ディレクトリの再帰呼び出し
- 9. 再帰呼び出し時のセグメンテーションフォールト
- 10. onActivityResultへの再帰呼び出し
- 11. Javascriptクラスの再帰呼び出し(requestanimationframe)
- 12. シェイプレス:typeclassの再帰呼び出し
- 13. のPowershell:再帰スクリプト呼び出し
- 14. bash(catalan-numbers)の再帰呼び出し
- 15. CMDIClientAreaWnd :: EnableMDITabs()のバグ?再帰呼び出し
- 16. Python:再帰呼び出しなし値
- 17. JavaScriptオブジェクトリテラルメソッド:再帰呼び出し
- 18. JavaScriptカウントダウンタイマー再帰呼び出し毎日
- 19. Python re.match再帰呼び出しメモリリーク
- 20. 再帰呼び出しをトレースする
- 21. 再帰呼び出しapi(axios/javascript)
- 22. 春AOPは、再帰呼び出しが
- 23. セグメンテーションフォルト(コアダンプ)エラーC++再帰呼び出し
- 24. プロトタイプ関数内の再帰呼び出し
- 25. Java再帰 - いくつかの再帰呼び出しからの出力
- 26. あいまいな呼び出しを再帰的に可変引数テンプレート関数のオーバーロードを呼び出す
- 27. テンプレート内での関数呼び出し
- 28. 3回の再帰呼び出しを1行で呼び出しますか?
- 29. レポートを再帰的に呼び出す
- 30. 再帰的にメソッドを呼び出す
ねえ、おかげHMは、ここに私のsollutionです。この場合、パフォーマンスヘルパーとパーシャルはどうですか? – Dziamid
私はヘルパーが一度ロードされてからアクセスできるので、少し速くなると思います。パーシャルは再帰的にロードされるので、毎回Symfonyのビュースタックを通過する必要があります。しかし、パーシャルもキャッシュすることができます。パーシャルは、よりクリーンなコードを持っています。 (ユーザーにとってよりわかりやすい)、MVCの観点ではより純粋です。 –