Фильтр → Все записи с тегом codeigniter

CodeIgniter. Точка в строке запроса

15.06.2010

Меня сильно удивила одна особенность php - все точки и пробелы в ключах массива $_GET интерпритатор заменяет на знаки подчеркивания(_). То есть, если вы передаете сроку вида index.html?test.html=a, вы получите $_GET['test_html'] = a.

Причем тут CI? Дело в том, что если передавать в контроллер параметр с точкой, вы не получите желаемого результата, потому что по умолчанию (в режиме $config['uri_protocol'] = "AUTO";) CI получает параметры из GET массива. Есть как минимум 2 решения этой проблемы:

Первое, и самое очевидное - изменить uri_protocol на REQUEST_URI.

Второе - обрабатывать входящую переменную, заменяя последний знак подчеркивания на точку.

Примечание.

В описанном примере роутинг делаеться с использованием mode rewrite. Используем .htaccess:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [L]

Категория: php , программирование ,
Теги: .htaccess , codeigniter ,
Просмотров: 328
Комментарии: 0

Изящная обработка ошибки 404 в codeigniter

21.05.2010

Разработчики codeigniter настоятельно рекомендуют не изменять код ядра фреймворка. Если вы следуете этому правилу, то данные рекомендации не для вас.
Иногда просто необходимо для реализации какой-нибудь функции подтачивать исходный код. Мне понадобилась изящная обработка 404 ошибки с использованием
шаблонов. Проще говоря, мне необходимо было вписать 404 в свой шаблон. Я использую smarty.

Итак, код в студию....

Открываем файл system/codeigniter/CodeIgniter.php и ищем строчку

if (!file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
{
    .........
}

выкидываем все, что написано между скобками и вставляем следующий код:

header("HTTP/1.1 404 Not Found");
$CI = new Controller();
$CI->templates->assign('html_title', '404. Страница не найдена');
$CI->templates->display('404.tpl');
exit;

у нас должно получиться

if (!file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
{    
    header("HTTP/1.1 404 Not Found");
    $CI = new Controller();
    $CI->templates->assign('html_title', '404. Страница не найдена');
    $CI->templates->display('404.tpl');
    exit;   
}

А теперь подробнее:

header("HTTP/1.1 404 Not Found"); - посылает заголовок 404. Это необходимо, в частности, для поисковых систем

$CI = new Controller(); - создаем экземпляр класса Controller. Он необходим для работы всех плагинов шаблона, которые используют функции ядра системы

$CI->templates->assign('html_title', '404. Страница не найдена');
- даю title своему шаблону (это особенности архитектуры моих шаблонов)

$CI->templates->display('404.tpl'); - подключаю шаблон 404 к основному шаблону сайта. (основной шаблон использует функцию include. В жанном случае я подключаю туда 404)

Важное примечание. Как видно из кода, библиотека templates уже загдужена автозагрузчиком (autoloader). Если это не сделано, ее можно вызвать следующим способом:

$CI = new Controller();
$CI->load->library('templates');
$CI->templates->assign('html_title', '404. Страница не найдена');
.......

вот ,собственно, и все.

Категория: php , программирование ,
Теги: codeigniter , php ,
Просмотров: 427
Комментарии: 0

Модульное расширение для codeigniter

11.04.2010

Представляю вашему вниманию модульное расширение фреймворка codeigniter, которое позволит создавать модули с неограниченным количеством контроллеров.
Модуль разбит на 2 части - frontend - то, что увидит пользователь и backend - то, что увидит администратор.
Данное расширение не являеться абсолютно готовым, а служит лишь конструктором, на основе которого вы сможете строить универсальные модульные приложения.
Не являеться полным и готовым потому, что здесь не реализована система отображений для модулей, а по-прежнеу отображения вызываются из папки system/application/views.
Но при большом желании вы сможете исправить этот недостаток подключив smarty и сдлеав библиотеку для модульных шаблонов.

Контроллер для фронтенда вызываем двумя способами:
http://codeigniter/index.php/welcome/hello/
либо
http://codeigniter/index.php/frontend/welcome/hello/
а контроллер для бекенда:
http://codeigniter/index.php/backend/welcome/hello/

Советую написать руль для htaccess, чтобы упрятать index.php.

Процесс установки:

1) Копируем файл MY_Router.php в system/application/libraries/

2) Удаляем папку system/application/controllers.

3) Создаем папку system/application/modules. В этой папке будут находиться модули проекта.
Структура такова:

    + modules [обязательное имя папки]
        + модуль 1
            + controllers [обязательное имя папки]
                + backend [обязательное имя папки]
                    + контроллер 1
                + frontend [обязательное имя папки]
                    + контроллер 1
                    + контроллер 2
                    + контроллер 3                    
        + модуль 2
            + controllers [обязательное имя папки]
                + backend [обязательное имя папки]   
                    + контроллер 1
                    + контроллер 2
                + frontend [обязательное имя папки]
                    + контроллер 1
                    + контроллер 2
                    + контроллер 3
        
4) В файле system/codeigniter/CodeIgniter.php ищем строку 236:
    call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
и меняем ее на:
    call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 4));

Мы изменили порядковый номер аргументов, так как массив $URI->rsegments вырос у нас на 2 значения:

$URI->rsegments[] - side
$URI->rsegments[] - module
$URI->rsegments[] - controller
$URI->rsegments[] - method
$URI->rsegments[] - arg1
...............
$URI->rsegments[] - argn

вместо:

$URI->rsegments[] - controller
$URI->rsegments[] - method
$URI->rsegments[] - arg1
...............
$URI->rsegments[] - argn

Скачать MY_Router.php

Категория: php , программирование ,
Теги: php , codeigniter ,
Просмотров: 728
Комментарии: 1

Codeigniter. Русские символы в адресной строке

15.12.2009

Так уж вышло, что CI не пропускает русские символы в адресной строке и выдает ошибку. Есть 2 решения этой проблемы - протупить, модифицировав ядро или не протупить и воспользоватся краеугольным камнем расширения ядра.
Для этого создаем файл system/application/libraries/MY_URI.php и размещаем там следующий код:

<?php

    class MY_URI extends CI_URI
    {
        function _filter_uri($str)
        {
            if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
            {
                if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|ui", $str))
                {
                    header('HTTP/1.1 400 Bad Request');
                    show_error('URI Содержит запрещенные символы.');
                }
            }
            
            return $str;
        }
    }

Модификатор регулярных выражений u как раз позволяет различать механизму регулярных выражений русские символы, за что ему отдельная благодарность.
Осталось изменить набор разрешенных символов в конфиге system/application/config/config.php
с $config['permitted_uri_chars'] = 'a-z 0-9~%.:_-';
на $config['permitted_uri_chars'] = '- !()a-zA-Zа-яА-Яё0-9~%.,:_+';

Категория: php , программирование ,
Теги: php , codeigniter ,
Просмотров: 934
Комментарии: 0

Прикручиваем Smarty к CodeIgniter

20.02.2009

Для тех кто не знает: Smarty - это такой шаблонизатор, CodeIgniter - это такой фреймворк.
Поддержка шаблонов в CI довольно ограниченная, поэтому стала необходимость прикручивать Smarty.
Для начала качаем Smarty с официального сайта.
Затем то же самое делаем с CodeIgniter.
После того, как вы установили CI:
1. В папке system/application/libraries создаем папку "smarty" и распаковуем туда Smarty.
2. В той же папке system/application/libraries/ создаем файл Templates.php(название может быть любым).
3. В файле Templates.php создаем одноименный клас, в котором подключаем и инициализируем смарти:

 

    require_once('smarty/Smarty.class.php');
        
    class Templates extends Smarty{
                
        function Templates() 
        {      
            parent::Smarty();
            $this->left_delimiter = '';            
            $this->template_dir = 'system/application/views';
            $this->compile_dir = 'system/templates_c/';
            $this->config_dir = 'system/configs/';
            $this->cache_dir = 'system/cache/';
            
        }      
    
    }

 

4. Вызов библиотеки templates осуществляется из контроллера следующим образом:

 

$this->load->library('templates'); 
$this->templates->assign('username', $userdata); //объявляем переменную
$this->templates->display('index.tpl'); //указываем имя шаблона

 

В данном случае шаблоны лежат в папке 'system/application/views'
Детальное руководство по использованию данных продуктов вы найдете на официальных сайтах.

Категория: php , программирование ,
Теги: codeigniter , php ,
Просмотров: 1500
Комментарии: 1

DENWER + CODEIGNITER = #1040 - Too many connections

27.01.2009

При использовании стандартного денвера столкнулся с пробемой: через определенное время сервер mysql выбивает ошибку #1040 - Too many connections. Связанно это с тем, что сервак по дефолту не справляется с нагрузкой. Вот решение:
1. Находим конфигурационный файл mysql( у меня лежит здесь: C:WebServersusrlocalmysql5my.cnf );
2. Под раздел [mysqld] добавляем строчку max_connections = 500. Чем больше число, тем круче, но может не выдержать комп;
3. Сохраняем и перегружаем сервер.
Вот собственно и все.

Категория: программирование , mysql ,
Теги: codeigniter , mysql ,
Просмотров: 1243
Комментарии: 3

Популярные

10 причин, чтобы отказаться от алкоголя и одна – чтобы употреблять алкоголь

Комментариев: 53 | просмотров: 8256
01.09.2009

О вреде микроволновой печи

Комментариев: 9 | просмотров: 3538
13.12.2009

Весело, весело встретим Новый GOD

Комментариев: 9 | просмотров: 2007
17.12.2009

Масонская символика на долларе

Комментариев: 4 | просмотров: 3949
03.03.2009

PHP. strtolower(strtoupper) и UTF-8

Комментариев: 4 | просмотров: 1774
14.05.2009

Библия. Книга Судей. Глава 19

Комментариев: 4 | просмотров: 1388
30.08.2009

Дискотека Авария. Заколебал ты

Комментариев: 4 | просмотров: 328
01.08.2010

Категории

Календарь

ПнВтСрЧтПнСбВс
12
3456789
10111213141516
17181920212223
24252627282930
31

Цитаты

и будешь давать взаймы многим народам, а сам не будешь брать взаймы [И БУДЕШЬ ГОСПОДСТВОВАТЬ НАД МНОГИМИ НАРОДАМИ, а они над тобою не будут господствовать]

Библия. Второзаконие