是否可以通过使用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();
}
我在所有控制器中调用它。
有没有简化的方法呢?
答案 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
但尝试这样的流程希望会帮助你