Давайте поговоримо про цікавих полезностях, які рано чи пізно стануть в нагоді будь-якому web-developer`у.
Почнемо з роутинг (eng. "Routing" - маршрутизація). Відразу ж постає питання, навіщо ж потрібна на сайті маршрутизація, якщо і раніше все добре працювало і влаштовувало? Все просто. Якщо ви хочете отримати більш гнучку систему і зменшити час на настройку / перенастроювання сайту, то маршрутизація вам необхідна. До того ж централізоване управління сайтом спростить роботу з кодом.
Коли то я сам користувався звичайною switch-case маршрутизацією і думав, що це зручно (насправді навіть така маршрутизація куди краще, ніж її відсутність).
Все це було на старому функціональному php навіть без будь-якого натяку на ООП. Такого роду система виходила дуже не гнучкі, тому що виникали проблеми в передачі даних в модулі, код був дуже громіздким, так як доводилося тримати логіку разом з маршрутизацією, а потім мене осінило - чому б не зробити наступне:
- 1) маршрутизацію без коду помістити в окремий файл (це дозволить вільно редагувати файл прямо через адмінку)
- 2) помістити логіку окремо в клас, який би займався генерацією контента для сторінок
У цій статті багато хто не знайдуть будь-якої новизни, але я не прагну вводити інновацію, я просто хочу відкрити очі тим, хто ще спить і користується менш зручними способами :)
Визначилися «навіщо?», Перейдемо до «як?».
Перший крок, який нам потрібно зробити, для створення зручної й практичної маршрутизації - записати наступний код в. htaccess:
Цей код перенаправить обробку всіх сторінок на index. php, що дасть нам можливість спростити управління контентом. Для збільшення розуміння раджу звернути увагу на статтю DarkKemper`a
Тепер, коли у нас є перенаправлення, перейдемо до створення файлу-маршрутизатора. Я користуюся xml-форматом, але це не особливо важливо, головне, що б вам було зручно.
packageName1. ClassName / MethodName packageName2. ClassName / MethodName packageName3. ClassName / MethodName
Все досить просто: в файлі-маршрутизатор ви можете вказувати настройки як для окремих URL, так і для будь-яких статичних частин сторінок. У прикладі я вказав модулі для шапки сайту, так як вона у мене не змінюється. Зауважу, що крім модулів, ви можете вказувати настройки, будь-які передаються параметри, правила ... Загалом все, що завгодно.
Останній і найважливіший крок - пишемо клас Router, який і буде завідувати всієї маршрутизацією.
Для початку нам потрібно розібрати xml-файл:
- private static function parse ($ configPath)
- return simplexml_load_file ($ configPath);
- >
Метод parse () отримує шлях до вашого конфігу (можна використовувати не тільки для маршрутизації) і повертає SimpleXML object.
Тепер ви можете звертатися до будь-яких налаштувань наступним чином: $ xml-> header-> modules ...
- public static function GetContent ($ configPath)
- $ Content = '';
- $ Router = self :: parse ($ configPath);
- foreach ($ router as $ page)
- if (preg_match (
- '# ^'. $ Page-> uri. '$ #'
- . str_replace ($ _SERVER [ 'QUERY_STRING'], '', $ _SERVER [ 'REQUEST_URI'])
- . $ uriParts
- )
- )
- if (. empty ($ page-> modules-> module))
- foreach ($ page-> modules-> module as $ modul)
- $ PageModules = $ modul;
- // Modul :: Load () займається завантаженням пакетів з
. - $ Content. = Modul :: Load ($ modul, $ uriParts [1]. $ UriParts [1]);
- >
- >
- >
- >
- // в своєму конфігу я створив групу "page404", яка обробляється, якщо для даної сторінки не задані модулі
- if (empty ($ pageModules))
- foreach ($ router-> page404-> modules-> module as $ modul)
- $ PageModules [] = $ modul;
- $ Content. = Modul :: Load ($ modul);
- >
- >
- return $ content;
- >
Отже, для початку ми Парс xml-файл, після чого обробляємо регулярним виразом рядок з
Якщо ми знаходимо відповідність з URL поточної сторінки, то підключаємо модулі, зазначені в файлі-маршрутизатор. Якщо не знаходимо - то підключаються модулі 404 сторінки.
Ну от і все. Нічого складного тут немає.
Висновки можна зробити такі:
- + Система дуже проста,
- + Легко і швидко можна змінити сторінки і розділи до невпізнання,
- + Завдяки регулярними виразами можна легко зв'язати модулі (ми можемо передавати в них параметри).
- - Якщо ваш файл-маршрутизатор великий, то без кешування краще не працювати.
Маршрутизація на сайті засобами PHP
Коли то я сам користувався звичайною switch-case маршрутизацією і думав, що це зручно (насправді навіть така маршрутизація куди краще, ніж її відсутність).
Розширення DOM в Prototype
Більшість розширень DOM містяться в об'єкті Element. Methods і додатково копіюються в об'єкт Element для зручності використання.
Покращуємо блог за допомогою jQuery
Вважайте це третьою частиною "симбіозу jQuery і WordPress".
JSR 292 Review Ballot
Дана специфікація покликана вирішити проблему мов з динамічною типізацією, таких як PHP, Perl, Python при реалізації їх на Java платформі (мається на увазі JVM).