在所有控制器中调用的常用功能

时间:2016-10-11 19:10:51

标签: codeigniter codeigniter-3

是否可以通过使用codeigniter的网站调用常用功能?

我使用codeigniter 3构建了一个CMS,它有消息选项。在网站的标题上,我显示未读消息的数量

目前我已将以下代码包含在所有模型中

function get_unread_count($id)
    {

        $this->db->where('to',$id);
        $this->db->where('read',0);

        $x =  $this->db->get('messages');

        return $x->num_rows();

    }

我在所有控制器中调用它。

有没有简化的方法呢?

4 个答案:

答案 0 :(得分:1)

使用会话变量(CI_SESSION)在每个会话中存储一次数据,因此您可以参考:

'/us'

直接进入视图,并在会话中委托获取消息编号。同时以dinamically方式设置数据将更新页面刷新时提供的值:

$this->session->userdata(your_msg_number)

如果你更喜欢AJAX,你可以设置一个javascript来指向一个通过JSON提供消息号的控制器....

答案 1 :(得分:1)

Helper函数遍布整个项目,您可以直接在任何控制器中调用辅助函数。

在辅助目录中创建一个文件application / helper / common_helper.php并将函数放在文件中。

现在在routes.php中配置helper-name以自动加载为:$autoload['helper'] = array('common_helper');

现在,您将能够在所有控制器Ex中调用无对象的辅助函数。 get_unread_count($ ID);

请注意:$this->db对象将无法在helper中使用,因此您需要创建codeigniter实例并使用:

$ci =& get_instance();
$ci->db->query();

答案 2 :(得分:0)

以Luciano所说的为基础 - 在每个页面上,您必须通过会话检查或类似方式确认用户是谁。因此,您可以同时更新新页面的会话中的消息计数。这样您就不必从每个控制器调用消息计数功能,它只是用户验证过程的一部分。

另外要记住的是,不是仅仅验证用户 - 您可以返回用户记录 - 对象或数组 - 以不同的方式使用,例如名称等。换句话说,您并不总是必须写东西并从会话中检索它们。最后考虑为登录用户设置单独的模板。这可以帮助保持分离。

答案 3 :(得分:0)

make the one model common and add it on route file 

$autoload['model'] = array('mdl_common');
像上面这样设置autoload的方法。 并将您的函数放在此模型中,如下面的代码行

class Mdl_common extends CI_Model 
{
  function get_unread_count($id)
  {

    $this->db->where('to',$id);
    $this->db->where('read',0);

    $x =  $this->db->get('messages');

    return $x->num_rows();
  }
}

并在头文件中调用此函数,如下面的代码行

$this->mdl_common->get_unread_count($id); // i don't know what id you were passing 

但尝试这样的流程希望会帮助你