Я искал гибкий способ создания разных боковых панелей на разных страницах. Цель состоит в том, чтобы передать пользовательские ссылки на каждую боковую панель. Библиотеки шаблонов казались излишними для моего приложения, поэтому я разработал простое решение. Я не уверен, что это лучшее решение. Мой вопрос, что вы думаете? Ваш совет очень ценен!
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);