Codeigniter用にネストされたコメントライブラリを作成しましたが、ほとんど機能しています。
<ul>
各要素または要素をエコーせずにネストされたコメントを出力できないようです<li>
。ライブラリに直接何も書き込ませたくないので、それを変数に保存して返し、ビュー内にエコーアウトできるようにします。
ライブラリコードは次のとおりです。
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Comments
{
public $parents = array();
public $children = array();
public function init($comments)
{
foreach ($comments as $comment)
{
if ($comment['parent_comment_id'] === NULL)
{
$this->parents[$comment['comment_id']][] = $comment;
}
else
{
$this->children[$comment['parent_comment_id']][] = $comment;
}
}
$this->prepare($this->parents);
} // End of init
public function thread($comments)
{
if(count($comments))
{
echo '<ul>';
foreach($comments as $c)
{
echo "<li>" . $c['text'];
//Rest of what ever you want to do with each row
if (isset($this->children[$c['comment_id']])) {
$this->thread($this->children[$c['comment_id']]);
}
echo "</li>";
}
echo "</ul>";
}
} // End of thread
private function prepare()
{
foreach ($this->parents as $comment)
{
$this->thread($comment);
}
} // End of prepare
} // End of Comments class
上記のコードは以下を生成します:
- Parent
- Child
- Child Third level
- Second Parent
- Second Child
またはHTMLで:
<ul>
<li>Parent
<ul>
<li>Child
<ul>
<li>Child Third level</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>Second Parent
<ul>
<li>Second Child</li>
</ul>
</li>
</ul>
これは正しいHTMLですが、エコーアウトすることは望ましくありません。
私がやろうとしたことは:
public function thread($comments)
{
if(count($comments))
{
$output = '<ul>';
foreach($comments as $c)
{
$output .= "<li>" . $c['text'];
//Rest of what ever you want to do with each row
if (isset($this->children[$c['comment_id']])) {
$this->thread($this->children[$c['comment_id']]);
}
$output .= "</li>";
}
$output .= "</ul>";
echo $output;
}
} // End of thread
これは期待どおりに機能せず、エコーすると次のように生成されます。
- Child Third level
- Child
- Parent
- Second Child
- Second Parent
またはHTML:
<ul><li>Child Third level</li></ul>
<ul><li>Child</li></ul>
<ul><li>Parent</li></ul>
<ul><li>Second Child</li></ul>
<ul><li>Second Parent</li></ul>
コメントをネストしていないため、これは明らかに望ましくありません。
私は一日中これに固執しています、誰かが私がリストを適切に生成する方法について提案がありますか?