Задать вопрос

Правильно ли делать такую структуру проекта?

Учу php, делаю сайт с админкой. Правильно ли делать структуру в таком виде?

В корне index.php, в нем подключаю
include 'inc/functions.php';
include 'inc/get_functions.php';
include 'inc/main_tpl.php';


В functions.php специфичные функции вроде перевода строки в транслит, кропа и ресайза фоток.

В get_functions.php функции для получения данных из БД. Например:
  • get_page_list для получения списка страниц,
  • get_page получения страницы по ее id,
  • get_page_title заголовок страницы по ее id,
  • и т. д.


В main_tpl.php выводится содержимое страницы модуля (страницы, фото, каталог) в зависимости от $_GET запроса:
$_GET['section']) ? include 'modules/' . $_GET['section'] . '/index.php'


Каждый модуль в отдельной папке. Например, модуль фотогалереи в /modules/photo/*.
У каждого модуля свой index.php и файлы с шаблонами для вывода:
  • photos_list_tpl.php выводит список фотографий,
  • photos_add_tpl.php форма загрузки фотографий
  • photos_view_tpl.php просмотр выбранной фотографии
  • и т. п.


Для запросов в БД использую библиотеку SafeMySQL.

Стоит ли так дробить и все get функции собирать в файле inc/get_functions.php? Или будет правильней функции каждого модуля писать в самих модулях? И в целом как можно улучшить структуру?
  • Вопрос задан
  • 280 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Нет, неправильно.

- get_functions.php ужасное название, винегрет внутри. все эти функции разложить по своим модулям.
- inc/main_tpl.php подключается слишком рано. сначала надо закончить работу с данными, а только потом начинать вывод. Это азбука.
- 'modules/' . $_GET['section'] . '/index.php' инклюдится слишком поздно. модуль надо инклюдить ДО начала вывода. При этом основной шаблон должен вызываться не в индексе, а в модуле. модуль решает, бует ли он что-то выводить, если да - то присваивает переменной имя своего шаблона и вызывает основной шаблон, который в себе инклюдит шаблон модуля. Подробнее: phpfaq.ru/tech/tpl
- в include 'modules/' . $_GET['section'] . '/index.php' тебе напихают такого, что на ежика станешь похож. имя модуля надо обязательно валидировать. в идеале по белому списку.

В остальном нормально, только обычно все кроме индекса кладут выше корня.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Для начала делайте как делается, а не как правильно. Всякие RightWay потом учить будете. Пока вам нужно получить общие представления как всё работает, набить СВОИХ шишек и уже с пониманием всего переходить к "тяжёлой артиллерии".
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
Нет. Сейчас тебе расскажут про PSR, MVC и всё остальное.
Держись. Желательно обеими руками.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы