Начинаю работы над проектом http://otkuponer.ru.
Попробую реализовать агрегатор информации о купонах на скидку. Проект мне видится невероятно сложным.
Таких проектов(реализованных) уже много. Попробуем втиснуться.
Пожелайте мне удачи =)
решение:
location / ( error_page 404 @fallback; ) location @fallback ( proxy_pass http://backend; ) |
В двух словах: эта штуковина позволит на слабом серваке иметь отдачу под 200 страниц в секунду, если правильно настроить бэкенд (кешировать, временно статические страницы в файлуху(ramfs)).
Январские каникулы не прошли даром. Встречайте iako 2.http://iako.ru/page/download
Изменения:
Так же на первом месте — максимальная быстрота вызова блока. (как противоположность — openx).
Сайт пока не обновил, но уже можно качать. Если кто использовал первую версию — обновление методом замены файлов поверх старых. Только поправьте config.php
http://iako.ru/page/download
Быстро привыкаешь к хорошему. Автокомплит кода в IDE, автокоплит bash команд в консоли линукса.
Сегодня почувствовал нехватку автокомплита в месседжере (icq, irc, …)
=)
После катания по заснеженным Сибирским просторам сломал спицы.
Половину пока катался, другую половину, пока пытался открутить трещётку =)
т.к. открутить не судьба(прикипела), придётся заменить втулку, кассету и спицы. 2 тыщи.
Пишу чтобы не забыть, что нужно забрать колесо в ремонте =)
Фреймворк CodeIgniter из коробки позволяет расположить контроллеры только в одноуровневой папке: dir/file/class/params
Порой случается нужно сделать dir многоуровневой, например: admin/panel/sites/user/add
При попытке обратиться к странице получим ошибку, файл контроллера не найден.
Решение (для CI 2.0, 2.1):
Создать файл /application/core/MY_Router.php
Скопировать в него:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); /** * MY_Router Class * * An extension to the core router class to allow controllers to be in multi-level directories. * * @package Router * @version 1.0 * @author Damien K. * @copyright Copyright (c) 2010, Ollie Rattue * @license http://www.opensource.org/licenses/mit-license.php * @link https://github.com/ollierattue/codeigniter-multi-level-controller-extension */ class MY_Router extends CI_Router { // -------------------------------------------------------------------- /** * OVERRIDE * * Validates the supplied segments. Attempts to determine the path to * the controller. * * @access private * @param array * @return array */ function _validate_request($segments) { if (count($segments) == 0) { return $segments; } // Does the requested controller exist in the root folder? if (file_exists(APPPATH.'controllers/'.$segments[0].EXT)) { return $segments; } // Is the controller in a sub-folder? if (is_dir(APPPATH.'controllers/'.$segments[0])) { // @edit: Support multi-level sub-folders $dir = ''; do { if (strlen($dir) > 0) { $dir .= '/'; } $dir .= $segments[0]; $segments = array_slice($segments, 1); } while (count($segments) > 0 && is_dir(APPPATH.'controllers/'.$dir.'/'.$segments[0])); // Set the directory and remove it from the segment array $this->set_directory($dir); // @edit: END // @edit: If no controller found, use 'default_controller' as defined in 'config/routes.php' if (count($segments) > 0 && ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT)) { array_unshift($segments, $this->default_controller); } // @edit: END if (count($segments) > 0) { // Does the requested controller exist in the sub-folder? if (!file_exists(APPPATH.'controllers/'.$this->fetch_directory().$segments[0].EXT)) { // show_404($this->fetch_directory().$segments[0]); // @edit: Fix a "bug" where show_404 is called before all the core classes are loaded $this->directory = ''; // @edit: END } } else { // Is the method being specified in the route? if (strpos($this->default_controller, '/') !== FALSE) { $x = explode('/', $this->default_controller); $this->set_class($x[0]); $this->set_method($x[1]); } else { $this->set_class($this->default_controller); $this->set_method('index'); } // Does the default controller exist in the sub-folder? if (!file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) { $this->directory = ''; return array(); } } return $segments; } // If we've gotten this far it means that the URI does not correlate to a valid // controller class. We will now see if there is an override if (!empty($this->routes['404_override'])) { $x = explode('/', $this->routes['404_override']); $this->set_class($x[0]); $this->set_method(isset($x[1]) ? $x[1] : 'index'); return $x; } // Nothing else to do at this point but show a 404 show_404($segments[0]); } // -------------------------------------------------------------------- /** * OVERRIDE * * Set the directory name * * @access public * @param string * @return void */ function set_directory($dir) { $this->directory = str_replace(array('.'), '', $dir).'/'; // @edit: Preserve '/' } // -------------------------------------------------------------------- } |
Благодарность https://github.com/ollierattue/codeigniter-multi-level-controller-extension
Храм находится недалеко от смотровой площадки. От нашего отеля в 15-20 минутах ходьбы пешком =)
На подходе ощущается величина Будды, примерно 10 человеческих ростов =) :
Справа и слева расположены колокола, постукивая в которые нужно держать в уме желание. И если потеряете концентрацию — кранты — не сбудется, инфа 146% =)
Мы с Мишей (виден вдали около колоколов) пошли направо.Мужчины направо, женщины налево. Дорога длинная, потерять концентрацию легко.
Начало восхождения к храму охраняют пара голодных драконов, застывших в камне. Но готовых в любой момент ожить и поразить кучей других драконов, которые выползают у низ изо рта =)
Восхождение длится минут 5. Можно погладить дракона, чтобы он точно не ожил.
Будда шикарен. Найдите мелкого человечка около него, ощутите грандиозность =)
Справа от большого Будды поживает 8 маленьких, на каждый день недели по Будде, и на какой-то из дней два Будды (до обеда и после). Нужно найти своего Будду(по дню недели Вашего рождения) и дать ему денег, загадав что-нибудь.
Слева от большого Будды есть толстенький, готовый исполнить ваше желание, если попадёте ему в пузо монеткой. Можно читить, кидая 100500 монеток, или прогнуться сильно вперёд =)
Я монеткой так и не попал, хотя сильно старался. Как обычно, если не попали, желание не сбудется никогда =)
Наглядный пример читерства(в лице Миши). Подходим, кладём монетку, профит =)
Лена, в отличие от нас, попала с первого раза =)
100500 профитов гарантированно. Правда желание было, которое она загадала «Вот бы мне попасть» =)
Миша, перед повязыванием счастливой нитки. Вяжется на запястье и приносит удачу.
Нитка на руке. Пять ударов щёткой по голове и можно идти =)
Вот и моя очередь. Процесс необычный, волнующий.