Страницы

Поиск по вопросам

Показаны сообщения с ярлыком codeigniter. Показать все сообщения
Показаны сообщения с ярлыком codeigniter. Показать все сообщения

воскресенье, 12 января 2020 г.

Вынести load в отдельный метод

#php #codeigniter


            $this->load->view('header');
            $this->load->view('workmenu');
            $this->load->view('all_gk');
            $this->load->view('footer');


Вот в этом коде мне не нравится что во всех контролерах мне надо вызывать загрузку
хедера, меню, и футера, их можно как то вынести?
    


Ответы

Ответ 1



Из-за отсутствия layout в Codeigniter, нужно прибегать к костылям. Вот решение данной проблемы: Создается библиотека application/libraries/my_layout.php class MY_Layout extends CI_Controller { // пути к файлам вида public $header = 'header'; public $footer = 'footer'; // метод получает на вход два параметра: название вида и данные для него public function content($views = '', $data = '') { // загружаем header if ($this->header) { $this->load->view($this->header, $data); } // загружаем основной контент, который может иметь больше одного вида if (is_array($views)) { foreach ($views as $view) { $this->load->view($view, $data); } } else { $this->load->view($views, $data); } // загружаем footer if ($this->footer) { $this->load->view($this->footer); } } } В используемом контроллере достаточно подключить нашу библиотеку и обратиться к нужному виду через $this->my_layout->content('user/test', $data); class User extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('MY_Layout'); } public function test() { $data['title'] = 'dynamic_string'; $this->my_layout->content('user/test', $data); } } Вы так-же можете передавать несколько видов одновременно: $data['title'] = 'dynamic_string'; $views = array( 'menu' => 'menu', 'content' => 'user/test' ); $this->my_layout->content($views, $data); И в завершении, вы можете отключать часть вашего layout'a или использовать вместо него другой вид. $this->my_layout->header = 'user/custom_user_header'; // or turn off header $this->my_layout->header = FALSE; Пример был взят: Источник . Удачного кодинга...

четверг, 11 июля 2019 г.

Тип данных в результатах выборки

Это нормально, что SELECT * FROM table всегда возвращает массив string, независимо от типа данных столбцов? Хотелось бы целые получать как int сразу, а не приводить к нужному типу уже в PHP.
Проверил результаты MySQLi, PDO, родной библиотеки CodeIgniter – везде массив строковых значений. Пытался найти в интернете, можно ли явно указывать тип в запросе, но не нашёл.


Ответ

Для РНР это в принципе нормально. И особо рассчитывать на строгую типизацию не стоит. К примеру, по НТТР к нам приходят только строки, и ничего кроме строк.
Но получать тип (особенно - NULL) из БД действительно бывает удобно. И новые API для работы с mysql этот функционал поддерживают.
Для этого нужно, чтобы PDO и mysqli были скомпилированы с поддержкой mysqlnd, о чем в соответствующих разделах вывода phpinfo() должна быть соответствующая запись.
Плюс, в некоторых случаях, для получения желаемого эффекта надо запрашивать результат с помощью подготовленных выражений.

среда, 6 марта 2019 г.

Вынести load в отдельный метод

$this->load->view('header'); $this->load->view('workmenu'); $this->load->view('all_gk'); $this->load->view('footer');
Вот в этом коде мне не нравится что во всех контролерах мне надо вызывать загрузку хедера, меню, и футера, их можно как то вынести?


Ответ

Из-за отсутствия layout в Codeigniter, нужно прибегать к костылям. Вот решение данной проблемы: Создается библиотека application/libraries/my_layout.php
class MY_Layout extends CI_Controller {
// пути к файлам вида public $header = 'header'; public $footer = 'footer';
// метод получает на вход два параметра: название вида и данные для него public function content($views = '', $data = '') { // загружаем header if ($this->header) { $this->load->view($this->header, $data); }
// загружаем основной контент, который может иметь больше одного вида if (is_array($views)) { foreach ($views as $view) { $this->load->view($view, $data); } } else { $this->load->view($views, $data); }
// загружаем footer if ($this->footer) { $this->load->view($this->footer); } } }
В используемом контроллере достаточно подключить нашу библиотеку и обратиться к нужному виду через $this->my_layout->content('user/test', $data);
class User extends CI_Controller {
public function __construct() { parent::__construct(); $this->load->library('MY_Layout'); }
public function test() { $data['title'] = 'dynamic_string'; $this->my_layout->content('user/test', $data); } }
Вы так-же можете передавать несколько видов одновременно:
$data['title'] = 'dynamic_string'; $views = array( 'menu' => 'menu', 'content' => 'user/test' );
$this->my_layout->content($views, $data);
И в завершении, вы можете отключать часть вашего layout'a или использовать вместо него другой вид.
$this->my_layout->header = 'user/custom_user_header'; // or turn off header $this->my_layout->header = FALSE;
Пример был взят: Источник . Удачного кодинга...