Codeigniter创建动态侧边栏

时间:2012-06-29 21:50:35

标签: php codeigniter templates sidebar

我一直在寻找一种灵活的方式来在不同的页面中生成不同的侧边栏。目标是将自定义链接传递到每个侧边栏。模板库对我的应用程序来说似乎有些过分,所以我开发了一个简单的解决方案我不确定它是否是最好的解决方案。我的问题是你怎么想?非常感谢您的建议!

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);

1 个答案:

答案 0 :(得分:3)

我认为完成它。我不是CodeIgniter的专家,但我可以告诉你,这很好。您应始终确保的一件事是验证传递给函数的数据。在这种情况下:

private function sidebar($title=FALSE, $widget=FALSE) {
   if ($title && $widget) {
      //process
   }
   else
      return FALSE
   }
}

另一种方法是将链接传递给模板(不是侧边栏模板,而是主模板:

$data['sidebar'] = array('link/link'=>'My Link');
$this->load->view('mytemplate', $data);

在模板中加载侧边栏模板并将数据传递给它:

<html>
<!--All my html-->
<?php $this->load->view('includes/sidebar', $data['sidebar']); ?>
</html>

这只是另一种选择。但你做的很好。