Сайт на PHP+MySQL, как красиво подключать другие страницы?

NZ
На сайте с 19.04.2017
Offline
0
1395

Здравствуйте. Для учебных целей хочу сделать простой сайтик на PHP и MySQL, чтобы с самого начала код был оптимальным, удобным, красивым (не говнокод короче).

Думаю над такой схемой:

  • Сделаю базу с таблицами pages (id, title, description, content) и seo_urls (id, seo, page_id). В pages будут храниться статьи, а seo нужно для ЧПУ.
  • В index.php будет подключаться config.php (данные к базе), header.php, разбираться URL по слэшу: explode('/', $url), делаться запрос к таблице seo для поиска id страницы, если страница найдена делаю запрос к pages и вывожу содержимое статьи с этим id. В конце подключаю footer.php.

Но я хочу сделать несколько страниц с php кодом: обратной связи, поиска по статьям (короче где будет не только HTML но еще запросы к базе и т.п). Вот как это грамотно сделать? Пока что ничего умнее чем сделать проверку в index.php не придумал:

if ($pageid == 1) {

include("contact.php");
exit;
}
if ($pageid == 2) {
include("search.php");
exit;
}

Интуиция говорит что эти include в index.php как раз говнокод:( Как бы сделали профи?

tommy-gung
На сайте с 22.11.2006
Offline
287
#1

1. это все можно нужно сделать в одной таблице

Здесь не могла быть ваша реклама
I
На сайте с 01.05.2015
Offline
72
#2

NikolayZvyakin,

первое что нужно сделать прочитать это

вторым почитать, что такое ООП и попробовать познать дзен какого нибудь паттерна (напрмиер)

совет, не начинайте в учебных целях, решать свою задачу, пока не прочитаете и не осознаете как минимум про БД, ООП и шаблоны проектирования.

JH
На сайте с 29.06.2013
Offline
48
#3

Ну если хотите с include начать, то вот этот способ получше


$pages = [ 1 => "contact.php",
2 => "search.php"
//и так далее
];
if (array_key_exists($pageid,$pages)) {
include($pages[$pageid]);
exit;
}
M
На сайте с 04.12.2013
Offline
223
#4

NikolayZvyakin, объедините таблицы, сделайте слаг неотъемлемой частью страницы – по нему и ищите в БД. Добавьте вариативное/обязательное поле, содержащее базовое имя обработчика (если поля нет или оно пустое, можно к примеру использовать слаг), чтобы можно было делить страницы на группы. Пример: первая таблица тут.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
MK
На сайте с 18.08.2005
Offline
126
#5
Но я хочу сделать несколько страниц с php кодом: обратной связи, поиска по статьям (короче где будет не только HTML но еще запросы к базе и т.п). Вот как это грамотно сделать? Пока что ничего умнее чем сделать проверку в index.php не придумал

Такой план как?


$conf['pages']=[ 'search'=>['searchclass.php','sanitize_req'=>'q'],
'admin'=>['adminclass.php','user'=>'logined','userrole'=>'admin'],
'user'=>['usrclass.php','user'=>'logined','userrole'=>'all']
]
.......
$sections = explode('/', trim($url,'/'));
$class = (!empty($sections[0])) ?
(isset($conf['pages'][$sections[0]]) && !empty($conf['pages'][$sections[0]][0])) ? $conf['pages'][$sections[0]][0] : 'dbrouter' ) : 'indexclass'
$page = new $class($conf);

Суть в том, что если есть 1 сегмент урл - обработчик в зависимости от наличия в $conf['pages'] правил для него, а если он не описан в $conf['pages'], то обработчик таблицы базы данных с правилами для урлов. Иначе (/) - indexclass.

Будет полезно:

autoload

нет
danforth
На сайте с 18.12.2015
Offline
153
#6

Делайте как хотите, главное добейтесь работоспособности. Не говнокод у вас сейчас не выйдет. Потом все перепишете, и не раз. Главное - делайте выводы, улучшайте, расширяйте. Ещё выучите ООП, а также SOLID и GRASP. Так быстрее придете к красивому коду.

Рефакторинг - практически бесконечный процесс.

Junior Web Developer
L
На сайте с 10.02.2015
Offline
221
#7
ibatanov:
совет, не начинайте в учебных целях, решать свою задачу, пока не прочитаете и не осознаете как минимум про БД, ООП и шаблоны проектирования.

Человеку нужно задачу решать...

Ну и дети учаться ходить без костылей, коим ваше ООП и шаблоны в общем-то являются :)

---------- Добавлено 20.04.2017 в 14:22 ----------

По делу, как сделано у меня:

Каждый раздел в nginx направляется на свою точку входа.

Потом у страниц подключается общие шапка и подвал.

При этом у меня как бы нету ни статей, ни "статичных" страниц.

На одном сайте все статьи-статика размещаются в нейтральном разделе /info/, который роутит на файл /info.php

В принципе, можно роутить на /info/index.php

Правильно ли это или нет?

Хз, мне удобно.

Ну, а если Вы решите делать роутинг на приложении, то вынесите правила в отдельный файлик вроде routes.php, хотя можно и в общем файле конфигов держать.

Ну а еще можно все роутить т.н. датабейсикалли :)

TF-Studio
На сайте с 17.08.2010
Offline
334
#8

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

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
NZ
На сайте с 19.04.2017
Offline
0
#9

Все спасибо! буду делать

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий