Наші поїзди найпоїздатіші поїзди в світі Протяте каміння. Перший досвід скелелазіння
Лис 03

code-igniterНедавно я писав про те, як краще організувати роботу кеша в CodeIgniter, а саме як зробити “читабельні” файли кеша. Стало набагато зручніше, коли потрібно очистити кеш для однієї сторінки. Але в ході розвитку проекту кешованих файлів з’явилось багато і це також стало незручністю. Чому б не організувати кеш по папкам (де папкою буде виступати ім’я контролера). Так і зробив – нижче деякі правки в коді, які потрібно зробити, щоб файли кеша зберігались структуровано по папкам.
Відкриваємо файл system/libraries/Output.php (або створюємо новий файл system/application/libraries/Output.php).
1. В класі CI_Output створюємо метод _transform_path

function _transform_path($uri, $cache_path, $verify_create_dir = 0){
    $uri = substr($uri, 1);
    $controller = substr($uri, 0, strpos($uri, "/"));
    $uri = str_replace($controller . "/" , "", $uri);
    if ($verify_create_dir && !is_dir($cache_path . $controller)){
        mkdir($cache_path . $controller);
    }
    $pattern_delete = ‘#[^a-zA-Z0-9]#’;
    $uri = preg_replace($pattern_delete, "-", $uri);
    $uri = $controller . "/" . $uri;
    if ($uri == ‘/’){
        $uri = "main";
    }
    $uri .= ‘.tmp’;
    return $uri;
}

Метод приймає 3 параметри – URI, шлях до папки кешу і параметр, для перевірки – чи створена папка.
1-3 рядки – витягуємо з урла контролер.
4-6 рядки – перевіряємо чи існує папка, якщо не існує – створюємо її
7-9 рядки – формуємо імя файлу для кеша (вилучаємо всі “ліві” символи)
10-12 рядки – особливий випадок – якщо на головній сторінці – то задаємо імя для файлу main
13 рядок – додаємо до файлу розширення, щоб не було конфлікту з папками (example.com/video – щоб лінк такого типу зберігався у файлі video.tmp)

2. В методах _write_cache i _display_cache замінюємо

$uri =    $CI->config->item(‘base_url’).
$CI->config->item(‘index_page’).
$CI->uri->uri_string();

і

$uri =    $CFG->item(‘base_url’).
$CFG->item(‘index_page’).
$URI->uri_string;

відповідно на

$path = $CI->config->item(‘cache_path’);

і

$uri =    $URI->uri_string;

щоби в іменах файлів не було назви домену.
а також в цих самих методах замінюємо

$cache_path .= md5($uri);

на

$cache_path .= $this->_transform_path($uri, $cache_path, 1);

3. Створюємо метод clean_cache – для очищення необхідної сторінки з кеша

function clean_cache($uri=null){
    global $CFG;
    if (!$uri){
        $CI =& get_instance();
        $uri = $CI->uri->uri_string();
    }
    $cache_path = ($CFG->item(‘cache_path’) == ) ? BASEPATH.‘cache/’ : $CFG->item(‘cache_path’);
    $filepath = $cache_path . $this->_transform_path($uri, $cache_path);
    @unlink($filepath);
}

Файл зі змінами можна скачати тут

Теги: , , ,

Читайте також:

Залишити коментар

Коментарів: 3 для “Кеш в CodeIgniter. Частина 2”

  1. 1. VikNo Gravatar Сказав:

    косячит что-то, мог бы кинуть готовый файл output?

  2. 2. yAnTarNo Gravatar Сказав:

    http://yablog.org.ua/wp-content/uploads/2012/11/output.zip – Тут можна скачати файл.

  3. 3. VikNo Gravatar Сказав:

    Дякую, працюе

*