как получить данные в представлении независимо от контроллера в codeigniter

#php #codeigniter #model-view-controller #view

#php #codeigniter #модель-представление-контроллер #Вид

Вопрос:

На моем сайте есть боковая панель, которая получает некоторую информацию из базы данных, и я не могу использовать контроллер для извлечения данных, потому что у меня другой контроллер и такая же боковая панель. Как я могу распечатать эти данные на странице просмотра. когда я писал в коде P.h.P. в представлении отображается ошибка, что он не может определять переменные.

Как я мог это сделать?

Ответ №1:

Когда вы обнаружите, что вам нужен один и тот же код во многих разных контроллерах, «пользовательская библиотека» (класс) является идеальным выбором. Документация по созданию собственных библиотек находится ЗДЕСЬ .

Контроллеры должны использовать модели для получения данных из базы данных. Пользовательские библиотеки также могут использовать модели так же, как контроллеры. Вот очень простая пользовательская библиотека, которая называется Sidebar . Это зависит от модели ( sidebar_model ), которая не будет показана. Цель Sidebar библиотеки — вернуть переменные, необходимые sidebar_view файлу.

Файл: application/libraries/Sidebar.php

 <?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Sidebar
{
    protected $CI; // Read the documentation link to see why this is needed.

    public function __construct()
    {
        $this->CI = amp; get_instance();
        $this->CI->load->database();  //only needed if not already done 
        $this->CI->load->model('sidebar_model');
    }

    public function get_sidebar_data()
    {
        return $this->CI->sidebar_model->get_sidebar();
    }

}
 

Метод библиотеки get_sidebar_data() возвращает переменные для представления.

Вот контроллер, который использует пользовательскую библиотеку. Он будет использовать пользовательскую библиотеку и файл представления (не показан), содержащий HTML для боковой панели.

Файл: application/controllers/Main.php

 class Main extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->library('sidebar'); //can also be autoloaded
    }


    public function index()
    {
        $data['sidebar'] = $this->sidebar->get_sidebar();
        $this->load
             ->view('banner')
             ->view('sidebar_view', $data)
             ->view('main_view')
             ->view('footer_view');
    }

}
 

Любой другой контроллер, который должен отображать боковую панель, будет использовать этот же шаблон.

Этот контроллер загружает четыре разных файла представления и использует «цепочку методов», которая поощряется. Цепочка методов выполняется немного быстрее. Но лучшая причина для его использования? Меньше ввода.

Метод chaning также может иметь такой тип:

 $this->load->view('banner')->view('sidebar_view', $data)->view('main_view')->view('footer_view');
 

Но, IMO, помещение каждого ->view() в отдельную строку облегчает чтение.

Ответ №2:

  1. Вы можете создать помощника для своих общих задач. Затем создайте функцию для своей боковой панели и вызывайте ее там, где вам это нужно. Проверьте эту ссылку для получения более подробной информации о создании помощника
  2. Вы также можете создать для этого библиотеку. Хотя это будет не очень хороший выбор.

Ответ №3:

  • создайте боковую панель (страницу просмотра) и вызовите модель непосредственно внутри этой боковой панели (страницы просмотра).
  • во-вторых, вызовите боковую панель (страницу просмотра) непосредственно внутри всех других страниц просмотра.