0

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

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

1 回答 1

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>

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

于 2012-06-29T22:39:01.193 回答