管理面板 - 在布局中显示“静态”数据的最佳方式是什么?

时间:2010-05-26 19:33:34

标签: php codeigniter

我准备为CodeIgniter编写的CMS编写一个管理面板。将始终显示一些用户信息 - 包括布局的标题部分和侧边栏。我习惯这样做是因为我个人希望并且认为可以做得更容易,因为我厌倦了一遍又一遍地向视图发送相同的参数,当它是需要显示的动态数据时反正在每个页面上(例如未读消息,用户名,姓名,状态等)。

我需要控制器和模型,我知道,但是每次我需要加载视图时,我是否必须传递用户的用户名,未读消息等示例?我应该为此做一些图书馆吗?

现在我的问题是:在最佳做法和将来易于维护方面,我该如何做?

我希望我的问题是可以理解的:)

2 个答案:

答案 0 :(得分:2)

就个人而言,我会扩展Controller库(按照Creating Libraries at codeigniter.com底部的指导创建一个MY_Controller)。

您可以正常使用您的模型等。然后,您将在MY_Controller类中创建一个私有函数,以获取相关的“全局”数据并调用

$this->load->vars('everywhere_data', $data_from_relevant_models);

这将使数据可用于从该点调用的所有视图$everywhere_data。然后在MY_Controller的构造函数中添加对该函数的引用,可能需要对用户实际登录进行条件检查。

如果收集和获取所有数据很复杂,你可以编写一个库来为你处理它,但'控制器'部分仍然由MY_Controller完成:即获取数据然后使用load-> vars()将其发布到视图。

作为一个快速且未经测试的示例,MY_Controller将启动如下内容:

<?php
class MY_Controller extends Controller
{
    private $logged_in_user;


    function MY_Controller()
    {
        parent::Controller();

        if( $this->_logged_in_userid() > 0 )
        {   
            $this->logged_in_user = $this->_get_user( $this->logged_in_userid() );

            $this->load->vars('logged_in_username', $this->logged_in_user->username );
        } else {
            $this->logged_in_user = false;
        }

    }
...
}

请注意,_logged_in_userid()之类的内容会为您访问会话(例如return $this->session->userdata('logged_in_userid');),而_get_user()会访问相关模型。

最后,你会有一个视图访问$logged_in_username(或我的第一个例子中的everywhere_data)你将调用你的标题等。这使你的普通控制器整洁,以便他们可以专注于提供他们的特定功能,阻止您多次重写代码并维护MVC理想。

答案 1 :(得分:0)

您可以创建一个视图,只是为了保存信息,并从视图本身的$ _SESSION变量中获取它,如果您想将它们保存在一个地方。