• Главная
  • Оглавление
  • Обратная связь
  • Лента RSS
  • Правила
Что здесь уже нашли

Yii - перехват запросов

20 августа 2011, 06:37

Все фреймворки, с которыми мне приходилось работать, при всей своей гибкости, все же слегка «деревянные». Например, ни один из них не позволяет динамически менять конфигурацию приложения, без редактирования конфигурационных файлов. Это создает определенные проблемы, если вы хотите, чтобы ваше приложение было по-настоящему модульным.

Представим, что вы хотите создать CMS, которая будет иметь кучу модулей, созданных сторонними разработчиками. И каждый пользователь вашей CMS должен иметь возможность сам решать, какие именно модули ему устанавливать. При этом установка/удаление модуля должны происходит по принципу «одного клика», т.е. пользователь должен лишь выбрать нужный модуль и нажать кнопку «Установить» (или «Удалить»), всю остальную работу, включая изменение настроек, система должна сделать сама.

Вот тут и начинаются проблемы. Скопировать (скачать) файлы модуля в определенную папку сервера не представляет труда, но как обновить «hard-coded» конфигурацию? Писать парсер php-файлов ради добавления пары строк в конфиг - далеко не самое умное решение. Гораздо лучше (и удобнее) работать с конфигурацией, находящейся в каком-нибудь хранилище (например в БД) и считывать ее при запуске приложения. Осталось только придумать как успеть загрузить настройки ДО начала работы приложения (обработки запроса)...

Описанная выше ситуация — это только один из случаев, когда приложение должно по каким-то причинам «перехватить управление» до начала обработки запроса самим фреймворком. Другая частая необходимость в таком поведении — проверка прав доступа. К примеру некоторые из установленных модулей сейчас отключены и хорошо бы чтобы фреймворк об этом узнал и соответственно отреагировал.

Предлагаемое ниже решение прекрасно работает в Yii и позволяет одним махом «закрыть» все подобные вопросы.

Yii имеет механизм временной блокировки сайта. Суть его сводится к следующему: в настройках можно указать маршрут (контроллер/действие), который будет вызываться при любом обращении к сайту. В самом действии обычно прописан код вывода сообщения типа «На сайте ведутся технические работы. Зайдите позже».

Как оказалось, этот механизм прекрасно подходит для решения вышеописанных задач, нужно лишь добавить пару строк, чтобы заставить фреймворк продолжить обработку запроса, когда все настройки и проверки уже выполнены. Таким образом мы получим систему, в которой перед обработкой любого запроса будет вызываться созданное нами действие (метод класса контроллера).

Перейдем к практической реализации.

Код до смешного прост. Создадим контроллер и обзовем его Privratnik:

Пример контроллера
   class PrivratnikController extends Controller
   {
      public function actionIndex()
{ // здесь будем добавлять код // возвращаем управление фреймворку $_app = Yii::app(); $route = $_app->getUrlManager()->parseUrl($_app->getRequest()); $_app->runController($route); } }

Сохраним текст класса в файле PrivratnikController.php в папке protected/controllers. Затем активируем его, установив в конфигурации фреймворка значение параметра catchAllRequest равным маршруту к нашему контроллеру:

Настройка фреймворка
'catchAllRequest' => array('privratnik/index'),

Проверив работу сайта можно убедиться, что ничего не изменилось — все страницы открываются так же как и раньше. Но теперь все вызовы проходят через наш контроллер. Убедиться в этом проще простого: например, измените метод actionIndex() вот так:

Измененный обработчик
public function actionIndex()
 {
     echo '<h1>Hello World</h1>';
     $_app = Yii::app();
     $route = $_app->getUrlManager()->parseUrl($_app->getRequest());
     $_app->runController($route);
 }

и вверху каждой страницы вашего сайты вы увидите надпись Hello World 

Как применять описанную возможность думайте сами. Например, можно динамически подменять параметры генерации URL'ов страниц и получить возможность указания элиасов страниц. Или можно проверить авторизацию пользователя и, в зависимости от нее, блокировать доступ к некоторым частям сайта. Так же здесь можно вставить анализ запросов для сбора статистики или защиты от DdoS-атак...

В общем применений масса.

Оставить комментарий

Работы по горло, но и результаты на лицо

17 января 2011, 06:39

Ранее (а точнее два года назад) я писал, что давно меня мучает идея создания собственного  велосипеда сайтового движка. Времени прошло много. Мыслей передумано и идей перепробовано еще больше. В итоге, кое-что в результате все же появилось. И это "кое-что" уже живет и дышит. И, кстати, делает это весьма не плохо. 

Первоначальное название (Flat CMS) пришлось сменить, т.к. как оказалось кэ-мэ-эсина с таким названием уже была когда-то написана какими-то немцами, но похоже успешно умерла, т.к. последние упоминания о ней датируются аж 2006-м годом. И с тех давних пор, похоже, она больше не развивается. Собственно и развивать-то там особо нечего - функционал там ни-ка-кой. Но речь не о ней.

А речь идет о TanitaCMS - движке, который реализует совершенно новый подход к этому самому движко-строению. По-сути это даже не CMS (Content Management System - система управления содержимым), а CMF (Content Management Framework - фреймворк для управления содержимым). Казалось бы, разница в одной букве, а суть меняется кардинально.

Чем различаются КМСы и фреймворки?

КМС - это "сайт из коробки". Десять минут на установку и готово - полноценный сайт с панелью управления, кучей свистелок-перделок, и прочих рюшечек. КМСы делаются для простых смертных, т.е. такой сайт достаточно прост в управлении даже для неподготовленного пользователя. И это, несомненно, хорошо. Но есть и "минусы".

Подавляющее большинство КМС (а скорее всего абсолютно все) являются контекстно-ориентированными. Это значит, что код ядра такой системы "заточен" на решение каких-то определенных задач. И, как правило, список этих задач весьма ограничен. А значит, что любая попытка решать с помощью такой системы задачи, к которым она не приспособлена, в итоге либо окончится неудачей, либо приведет к построению велосипеда. Причем колеса у него будут "хоть и круглыми, но с большой погрешностью".

Говоря по-русски, если КМС рассчитана на обслуживание блогов (например всем известный Word Press), то не стоит пытаться собрать на ней магазин - если и получится, то сами будете не рады. А скорее всего и не получится вообще.

Другое дело - фреймворки. Эти "звери" представляют собой библиотеки кода почти на все случаи жизни. И вот на базе фреймворков можно соорудить все, что угодно, от тупого мини-сервиса, до огромного портала или социальной сети. Однако ж и тут не все идеально.

Первый (и самый главный для пользователя) недостаток фреймворков - это их "недоделанность". Я имею в виду полное отсутствие каких-либо органов управления, той самой панели администратора, без которой не может жить ни один конечный пользователь.

Но это и логично - фреймворк представляет из себя конструктор, используя который, программист может создать что угодно. Ну так откуда же разработчикам фреймворка знать, что в результате должно получиться? Потому и не делают они панелей управления, ведь админ-панель блога и админ-панель портала - это совершенно разные админ-панели.  Короче, использование фреймворков - прерогатива программистов и простым смертным от них толку ноль. 

Второй недостаток фреймворков - их огромный размер и (очень часто) весьма невысокая скорость работы. Но это уже не важно.

Но вернемся к TanitaCMS.

Главная идея этого движка - попытаться скрестить удобство и простоту управления, присущие КМСам с мощью и гибкостью фреймворков. То есть, соорудить такую систему, которая бы была работоспособной "из коробки", но при этом не ограничивала бы программистов в реализации их идей.

И оно-таки удалось! 

TanitaCMS обладает кучей преимуществ и пока что мы с друзьями не нашли для нее задач, которые бы не решались или решались бы слишком сложными способами. А это - очень хороший знак.

Версии, версии, версии...

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

Что "оно" уже умеет.

Не стану описывать возможности API и особенности внутренней структуры (они могут быть интересны только разработчикам), лишь скажу, что модули к TanitaCMS делаются предельно просто и очень быстро - гораздо быстрее, чем на любом из известных мне фреймворков. Обычному же пользователю гораздо интереснее узнать, что уже умеет TanitaCMS в качестве обычной КМС. Вот не полный список уже реализованных возможностей:

  • умеет создавать статичные страницы (куда ж без них?)
  • автоматически генерирует многоуровневое меню
  • SEO-оптимизирован (ключевые слова, описания, ЧПУ (pretty URLs) и т.д.)
  • уже есть блог с возможностью премодерации комментариев, лентами рассылки по RSS и email
  • система новостей и мини-каталогов
  • гибкое управление дизайном на основе шаблонов с использованием шаблонизатора (smarty)
  • поддержка тем оформления (каждому пользователю - своя тема, каждой странице - свой шаблон)
  • встроенный WYSIWYG-редактор (TinyMCE)
  • интегрированный в редактор менеджер файлов с возможностью закачки файлов на сервер
  • неограниченное количество RSS-лент и списков независимых e-mail рассылок
  • система отправки е-мэйлов пользователям прямо с сайта (без "засветки" адресов получаетелей)
  • встроенная система редиректов, позволяющая скрывать ссылки (защита от обрезки партнерских кодов и "вытекания PR")
  • навороченная система статистики (пока в разработке)
  • поддержка тэгов страниц с генерацией облака тэгов
  • автоматическая генерация карты сайта
  • автоматическая генерация списков страниц (оглавлений) с гибкой настройкой отображаемых данных
  • многопользовательская система на основе групп и прав доступа
  • многосайтовая система - одна копия кода движка способна обслуживать неограниченное количество сайтов
  • поддержка мульти-контентных страниц
  • полноценная поддержка AJAX
  • полноценная панель администрирования
  • многоуровневое кэширование данных любых типов
  • и многое-многое другое...   

В общем, работа идет полным ходом. А вот и один из сайтов, работающих на TanitaCMS. К слову, этот сайт запущен всего пару недель назад и сейчас в стадии наполнения контентом. Поэтому не все еще на нем правильно работает и не все задумки реальзованы. Так что не судите строго.

Оставить комментарий

Год в Linux. Первые итоги

13 сентября 2010, 15:08

Где-то на этой неделе у меня случился юбилей - ровно год, как я "живу" под линуксом. Сперва это был Debian, но позже он сменился на Ubuntu, т.к. последний гораздо чаще обновляется, а стремление иметь свежий софт у меня пока не угасло. 

Итак, год прошел, пора сделать первые выводы.

Самый главный вывод - жить в линуксе можно! И можно не только жить, но и весьма комфортно себя при этом чувствовать. Софта дофига. Бесплатного софта дофига-дофига. Стабильность на уровне. Удобство тоже. По крайней мере не нужно использовать сторонние заменители рабочего стола и писать под них свои модули, как это было со мной в винде. Хотя этого никто не запрещает, а скорее даже поощряет, ибо возможностей для виджето-строения в линукс на порядок больше, чем в windows.

Естественно, переход на другую операционку был не совсем легким. Поначалу многие вещи раздражали и удивляли, но позже приходило понимание, что раздражение мое вызвано не тем, что в линуксе что-то сделано через не так, а как раз таки наоборот - в винде это "что-то" сделано через задницу и я по привычке пытаюсь и здесь применять тот же заднепроходный подход. Мудрость - вещь приходящая. 

Самая главная проблема при переходе с винды на линукс - замена софта. Первые пару месяцев я активно продолжал пользовать виндовый софт под линуксом (wine решает), т.к. подходящих замен просто не мог найти, но время все поправило. Хотя сказать, что я использую сейчас на 100% только программы под линукс - тоже будет неверно. Все же есть некоторые софтины, без которых обойтись нельзя и аналогов которым под линуксом либо нет, либо я не нашел, либо нашел, но они сильно убоги. К счастью таких программ не много и все они коммерческие (платные), что, собственно, и объясняет отсутствие достойных альтернатив.

Начнем хит-парад!

Вот список windows-программ, которые мне приходится до сих пор использовать:

Adobe Photoshop

Сейчас матерые линуксоиды закидают меня помидорами на тему "GIMP - прекрасная замена фотошопу, просто нужно уметь им пользоваться". Да умею я им пользоваться. Но признайте, не дотягивает он по возможностям даже до CS, не говоря уж про свежий CS5. К тому же CS5, даже запущенный под VirtualBox, работает быстрее, чем GIMP в своей родной среде. Это ли не главный аргумент?!

Разные видео-конвертеры и проигрыватели

Их под линуксом просто тьма. Но может у меня руки кривые, однако пока мне так и не удалось найти достойной замены простому VirtualDub'у и заставить линукс показывать фильмы так же "гладко", как они просматриваются в винде. "Гладко" не в смысле того, что изображение хуже, с изображением как раз все в порядке, но частенько замечаю рассинхрон с кадровой разверткой монитора и при перемотке бывают видны "квадратики". Это не принципиально и не сказал бы, что сильно раздражает или вызывает дискомфорт, но, как говорится в одном анекдоте - осадок-то остался.

По поводу видео-редакторов. В принципе Avidemux (которым  я сейчас пользуюсь) - вполне сносная замена VirtualDub и возможностей там даже чуть больше, но вот в удобстве и стабильности он-таки дабу проигрывает.

dbForge Studio for MySQL

Для тех, кто не в курсе, dbForge Studio - мощнейший инструмент для работы с базами данных. Кстати, для жителей xUSSR эта программа абсолютно бесплатна. Аналоги есть и в линуксе, но они до гордого звания "аналогов" не дотягивают практически по всем статьям - простое редактирование записей можно и в phpMyAdmin делать, а вот построить действительно сложный запрос да еще с помощью фул-вижуал среды - линукс-софта с такими возможностями, к сожалению, я пока не нашел. А жаль, ну очень нужно для работы.

Adobe GoLive

Хотя этот продукт уже давно снят с производства (Adobe теперь вместо него продвигает выкупленный Dreamweaver), но я к нему привык. По-мне так он действительно удобный и гораздо менее прожорливый, чем тот же Dreamweaver.

Ну и конечно игрушки.

Да, я грешен - играюсь. И много. И часто. И люблю это дело. И не собираюсь прекращать. 

Проблема решается двумя способами: часть игр (включая довольно-таки современные) после некоторого шаманства запускаются под Wine'ом, для других же приходится держать отдельный раздел на винчестере с установленной полноценной Windows XP. Благо линукс в плане использования нескольких операционных систем более чем демократичен. Это вам не форточки с их манией величия! 

 

Комментариев: 2

Page: 01 02 03 04 05 06 07 08 09 10
Fast: 10 20 30

Календарь

февраль, 2012
пн вт ср чт пт сб вс
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29        

Меню

  • Главная страница
  • Оглавление блога
  • Лента новостей
  • Обратная связь
  • Правила блога

Анонсы по темам

  • Все посты блога
  • С миру по нитке
  • Мысли вслух
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Категории

  • Все посты по порядку
  • С миру по нитке
  • Графика и фото
  • Кривизна платформы .NET
  • Грамотные интерфейсы
  • WEB-программирование
  • FlatCMS - шустрая и гибкая
  • Доработки Lasto-блога

Сервисы

  • Поиск по блогу
  • Поиск по всему сайту
  • Шпионское досье

Реклама


Стоимость сайта

Мой вебсайт стоит 865 404,18 руб

Статистика

    Widgetize!
  • Время работы: 0,01315 сек.
  • Память: 4 864 кБт
  • Статистика привратника
Copyright FIT-Media.com, © 2007-2012
Главная | Общее оглавление | Обратная связь | Правила блога | Лента RSS