У попередніх постах ми розробили мінімальну структуру фреймворка. У цій статті, наведемо трохи лиску - додамо простеньку тему з bootstrap'ом, меню і докладніше розглянемо роботу шаблонізатора і роутера (маршрутизатора сайту).
У минулій статті ми створили роутер. який використовуючи логіку регулярних виразів розпізнає входить sef посилання і направляє на потрібний контролер і його метод.
Тобто з такого рядка
роутер робить масив
Ми не стали в минулий раз писати приклад використання такого рішення. Виправимо ситуацію, але перед цим доопрацюємо роутер.
Перенесемо масив правил роутера в конфігураційний файл фреймворка. Цей масив заповнюватимуть розробники, які будуть писати сайти на нашому фреймворку. Тому він повинен бути максимально доступний.
Крім того ви можете бачити, що ми змінили праву частину масиву.
Внесемо зміни в код роутера. а потім розберемо його роботу.
По-перше ми заповнюємо масив вихідних даних значеннями по умолчантю, які беремо з нашого config.php. Потім ми Парс вхідний $ path на наявність get змінних. Якщо вони є, то їх просто потрібно додати до масиву вихідних даних. parse_url - розділяє url на складові. Однією з таких складових є query. Це все що в URL йде після знака питання
Цей рядок key = value параметрів в свою чергу парсит функція parse_str
C query частиною рядка розібралися, тепер використовуючи правила регулярних виразів, виділимо з роблячи необхідні дані.
На 12 сходинці ми бачимо перебір всіх правил з конфіга. На 13 перевіряємо - чи підходить чергове правило. Якщо так, то беремо масив результатів і по черзі замінюємо його елементами - праву частину правила.
Спрацювало правило '([a-z0-9 + _ \ -] +) / ([a-z0-9 + _ \ -] +) / ([0-9] +)' => '$ controller / $ action / $ id ',
Тоді масивом результатів застосування його лівій частині до вхідному рядку / user / profile / 15 буде масив
Перебираючи цей масив, починаючи з другого елементу, замінюємо в правій частині правила $ controller / $ action / $ id ключі $ ([a-z] +)
Тобто на рядку 14, при кожній заміні, права частина правила буде змінюватись так
На перший погляд - це безглузді дії. Яку рядок пустили на вхід / user / profile / 15 таку і отримали на виході правила
Але це тільки на перший погляд. На виході ми отримали стандартизований URI, застосувавши до якого операцію explode, отримаємо в першому елементі назву контролера, у другому - методу, в тертий - id
Для більшої ясності, додамо в кінець масиву правил в config.php, правило
В результаті роботи цього правила, наш роутер любуй запит html сторінки (наприклад /about.html без вказівки контролера і методу), направить в контролер page і метод read, а в параметр id піде рядок about
Ми використовуємо це для створення прикладу блогу на основі нашого фреймворка. Однак спершу, покращимо шаблонизатор
шаблонизатор
Щоб почати робити шаблон для нашого фреймворка, нам потрбуется якась зверстана html сторінка. Наприклад візьмемо безкоштовну тему з сайту бутсрапа
Тисніть ctrl + u в своєму браузері і просто копіюйте весь вихідний код в файл viws / main.php - це і є шаблон. Але його ще потрібно доопрацювати. Видалимо всі підключення стилів і скриптів через html розмітку. Ми будемо підключати необхідні скрипти через php. Це дає певну упевненість, що в будь-якому шаблоні завжди буде присутній набір файлів вашого фреймворка, незалежно від того, чи використовував їх верстальник при верстці.
Для стилів і скриптів в корені проекту створимо окрему папку. Зазвичай її називають assets. а в ній папки - css - для стилів, js - для скриптів, і images - для зображень. При цьому останню папку потрібно використовувати тільки для тих зображень, які беруть участь в дизайні сайту, а не в його наповненні. Для наповнення краще виділити окрему директорію - media / images в корені сайту.
Скачемо свіжий бутстрап і останню версію jquery. Кладемо їх в папку assets / js / libs /. Інші стилі теми вам доведеться завантажити самостійно.
Всі стилі і скрипти лежать по своїх папок, але як же їх підключити. У нашому шаблонизатор немає таких методів. Їх необхідно написати. Додавати їх ми будемо в файл ideal / classes / controller.php. Додамо наступні методи
- private function addAsset ($ link, $ where = 'head', $ asset = 'script', $ type = 'url')
- public function addScript ($ link, $ where = 'head')
- public function addStyleSheet ($ link, $ where = 'head')
- public function addScriptDeclaration ($ link, $ where = 'head')
- public function addStyleSheetDeclaration ($ link, $ where = 'head')
Писати код нам доведеться для методу addAsset, всі інші методи - це виклик addAsset з різними параметрами, і зроблені скоріше для зручності.
Додамо до класу наступне поле
У ньому будуть зберігатися дані про всіх підключаються стилях і скриптах. Далі код addAsset
$ Hash - обчислюється лише для того, щоб не підключати до сторінці одні і ті ж скрипти двічі. $ Where - це місце, куди ми підключаємо скрипти. перед або перед