#codeigniter #codeigniter-3
#codeigniter #codeigniter-3
Вопрос:
можно ли вызвать общую функцию через веб-сайт с помощью codeigniter?
Я создал CMS с использованием codeigniter 3, и у него есть опция обмена сообщениями. В заголовке сайта я показываю количество непрочитанных сообщений
в настоящее время я включил приведенный ниже код во все модели
function get_unread_count($id)
{
$this->db->where('to',$id);
$this->db->where('read',0);
$x = $this->db->get('messages');
return $x->num_rows();
}
и я вызываю ее во всех контроллерах.
Есть ли какой-либо упрощенный способ для этого?
Ответ №1:
Используйте переменные сеанса (CI_SESSION) для хранения данных один раз за сеанс, чтобы вы могли ссылаться на:
$this->session->userdata(your_msg_number)
непосредственно в представлении и делегируйте получение номера сообщения один раз за сеанс. Кроме того, динамическая настройка данных обновит значение при обновлении страницы, обеспечивая:
$this->session->set_userdata('your_msg_number_variable_name', msg_number)
Если вы предпочитаете AJAX, вы можете настроить javascript для указания контроллера, который предоставляет номера сообщений через JSON….
Ответ №2:
Вспомогательные функции доступны по всему проекту. вы можете напрямую вызвать вспомогательную функцию в любом контроллере.
Создайте файл в вспомогательном каталоге как application/helper/common_helper.php и поместите функцию в файл.
Теперь настройте имя помощника в routes.php для автоматической загрузки как : $autoload['helper'] = array('common_helper');
Теперь вы сможете вызывать вспомогательную функцию без объекта во всех контроллерах, например. get_unread_count($id);
Пожалуйста, обратите внимание: $this->db
объект не будет доступен в помощнике, поэтому вам нужно создать экземпляр codeigniter и использовать:
$ci =amp; get_instance();
$ci->db->query();
Ответ №3:
Основываясь на том, что говорит Лучано — на каждой странице вы должны подтвердить, кто является пользователем, с помощью проверки сеанса или чего-то подобного. Таким образом, в то же время вы можете обновить количество сообщений в сеансе для новой страницы. Таким образом, вам не нужно вызывать функцию подсчета сообщений с каждого контроллера, это просто часть процесса проверки пользователя.
Также следует иметь в виду, что вместо простой проверки пользователя вы можете вернуть запись пользователя — либо объект, либо массив — для использования по-разному, например, для их имени и т. Д. Другими словами, вам не всегда нужно записывать вещи и извлекать их из сеанса. Наконец, рассмотрите возможность создания отдельного шаблона для зарегистрированных пользователей. Это может помочь разделить вещи.
Ответ №4:
make the one model common and add it on route file
$autoload['model'] = array('mdl_common');
как это указано выше, установите метод автозапуска.
и поместите свою функцию в эту модель, как показано ниже в строке кода
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
но попробуйте, как этот поток, надеюсь, поможет вам
Комментарии:
1. Привет, его application / config / автозагрузка — не файл маршрута. В противном случае я почти предложил что-то похожее на то, что вы опубликовали, но я думаю, что предложение Лучано на самом деле намного лучше, особенно если вы объедините его с тем фактом, что вам уже нужно проверить сеанс для проверки пользователя.
2. извините, я просто пропустил это