Модульне програмування на php або як написати маленький портал, php

Я спробую тут роз'яснити те, як я підходжу до написання сайтів, де можуть застосовувати модулі. Приклад тому відомий скрипт PHPNuke. Як би не сварили його, підхід, застосований у ньому, до модульного програмування дуже зручний. Але через кострубатості загального коду застосовувати такий скрипт на серйозних сайтах, точніше скажімо порталах, з великою кількістю відвідувачів, не рекомендується. Чому? Скрипт працює повільно, дуже велике навантаження на базу даних. Можна ще дуже багато чого описати, але це вже матеріал для іншої статті. Якщо кому цікаво. то в інтернеті повно описів цього движка. В <неудобоваримости> PHPNuke я переконався сам. Мій основний проект NVIDIA BIOS Collection в початку базувався на PHPNuke, але постійні проблеми з хостингом змусили мене почати розробку своєї система порталу з нуля. З PHPNuke я взяти тільки суть модулів, все інше ж робив сам. І так для початку. Перш за все, треба продумати систему каталогів, що і де буде лежати. Ось приблизний варіант.

* / Mods / - каталог для зберігання модулів
* / Img / - картинки
* / Include / - каталог допоміжних файлів

Це що нам зараз поки що треба. Застосовувати блоки і скіни ми поки не будемо. У моєму порталі також були інші каталоги

ну і інші каталоги.

У кореневому каталозі зберігатися лише один файл index.php і вся робота йде через нього. Тепер треба вирішити як буде виглядати сам сайт. Для нашого прикладу підійде найпростіший варіант дизайну. верх сайту. низ сайту, а в середині наша інформація з модулів. Для цього в каталозі include створимо два файли top.php і bottom.php, що відповідно буде верхньою частиною дизайну і нижньою частиною дизайну.

Також створимо файл конфігурації config.php і покладемо його в каталог include.

Ось приблизна схема роботи index.php

Тепер створимо два файли mod1.php і mod2.php і покладемо їх у каталог mods.

Поясню трохи ось цей рядок

У кожен модуль бажано включати таку перевірку в уникненні виклику файлу модуля поза самого index.php. На прикладі мого порталу до виклику модуля у мене йде підключення в базі даних, зчитування деяких глобальних змінних і без них, ні один модуль сам по собі працювати не зможе. Так що краще за все просто заборонити виклик модуля напряму. Виклик модулів в даному випадку проводиться через рядок у вигляді index.php? Mod = ім'я модуля, але тут можна застосувати і систему ЧПУ. Тоді URL набуде вигляду index.php / ім'я модуля /

Ось в принципі дуже груба схема реалізації модулів. Можна додати будь-який модуль, просто поклавши його в каталог mods / і дотримуючись загальної концепції роботи, побудувати дуже складний сайт. У чому зручності роботи? По суті ви відсуваєте від себе основну турботу по натягування коду на дизайн. Це робить один раз в index.php. Сам же модуль повинен тільки працювати і приносити користь. Централізація збору основної інформації з бази або конфігураційного файлу, глобальні змінні сайту, інформація про користувача і т.д. З іншого боку є недоліки (хоча при певному погляді вони не здаються вадами), скажімо треба чітко стежити за тим які імена змінних використовуються до модуля, щоб не перезаписати, випадково, їх усередині модуля. Один раз у мене таке трапилося. Після такого випадку, я взяв для себе за правило називати системні змінні в такому вигляді $ sys_імя змінної. Інший очевидний недолік це труднощі реалізації різних варіантів дизайну для різних модулів. Але! Тут є вихід теж.

Якщо взяти за правило, що кожен модуль зобов'язаний сам вивести шапку і низ сайту, то вам вже надається свобода по вибору що і як виводити.

Наприклад, наші прості модулі можна модифікувати в такому варіанті.

Як робити в даному і конкретному випадку вирішувати Вам. Я ж просто спробував направити тих, хто починає писати на php, а може і тих, хто вже пише, на певний варіант або стиль програмування.