さまざまなページにさまざまなサイドバーを生成するための柔軟な方法を探していました。目標は、各サイドバーにカスタムリンクを渡すことです。テンプレートライブラリは私のアプリケーションにはやり過ぎのようだったので、簡単なソリューションを開発しました。それが最善の解決策かどうかはわかりません。私の質問はどう思いますか?あなたのアドバイスは大歓迎です!
1。コントローラに、サイドバービューをロードするプライベート関数を追加します。
/**
* The function has 2 arguments.
* $title is the sidebar widget title.
* $widget will contain an array of links to be added in the sidebar widget.
*/
private function sidebar($title, $widget)
{
$widget['title'] = $title;
$this->load->view('includes/sidebar', $widget);
}
2.カスタムサイドバーをロードするコントローラー関数で、プライベート関数を呼び出し、sidebar()
目的のサイドバーデータをその関数に渡します。
edit
以下は、投稿の編集に使用されるという名前のコントローラー関数です。この例では、自分がいる投稿を表示および削除するためのオプションを含むサイドバーをロードする必要があります。
function edit($post_id = '')
{
//your code, form validation, etc...
//Prepare sidebar widget links
//Array key is link url, array value is link name
$widget['links'] = array (
'posts/single/' . $post_id => 'View post',
'posts/remove/' . $post_id => 'Remove post'
);
$this->sidebar('Options', $widget); //load sidebar
}
3.最後に、コントローラーから渡されたカスタムデータを表示するサイドバービュー:
<div id="sidebar">
<ul>
<li class="widget">
<div class="label"><?php echo $title; ?></div>
<ul>
<?php foreach ($links as $link => $value): ?>
<li><?php echo anchor($link, $value); ?></li>
<?php endforeach; ?>
</ul>
</li>
</ul>
</div>
結論
カスタムサイドバーのタイトルとリンクのコントローラー関数に次のコードを追加します。
$widget['links'] = array (
'controller/function' => 'Link Name 1',
'controller/function' => 'Link Name 2',
'controller/function' => 'Link Name 3'
);
$this->sidebar('Widget Title', $widget);