Недавно я писав про те, як краще організувати роботу кеша в CodeIgniter, а саме як зробити “читабельні” файли кеша. Стало набагато зручніше, коли потрібно очистити кеш для однієї сторінки. Але в ході розвитку проекту кешованих файлів з’явилось багато і це також стало незручністю. Чому б не організувати кеш по папкам (де папкою буде виступати ім’я контролера). Так і зробив – нижче деякі правки в коді, які потрібно зробити, щоб файли кеша зберігались структуровано по папкам.
Відкриваємо файл system/libraries/Output.php (або створюємо новий файл system/application/libraries/Output.php).
1. В класі CI_Output створюємо метод _transform_path
$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 замінюємо
$CI->config->item(‘index_page’).
$CI->uri->uri_string();
і
$CFG->item(‘index_page’).
$URI->uri_string;
відповідно на
і
щоби в іменах файлів не було назви домену.
а також в цих самих методах замінюємо
на
3. Створюємо метод clean_cache – для очищення необхідної сторінки з кеша
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);
}
Файл зі змінами можна скачати тут
21.11.2012 21:58
косячит что-то, мог бы кинуть готовый файл output?
25.11.2012 19:46
http://yablog.org.ua/wp-content/uploads/2012/11/output.zip – Тут можна скачати файл.
26.11.2012 14:02
Дякую, працюе