Буду благодарен за критику! PHP

Mex-Vision

Бессмертный
Iron Lord
Победитель в номинации 2022
Победитель в номинации 2021
Победитель в номинации 2020
Победитель в номинации 2019
Победитель в номинации 2017
Сообщения
829
Розыгрыши
0
Репутация
448
Реакции
539
Баллы
1 613
Всем привет, на днях решил попрактиковаться в php, а именно, поставил себе задачу, сделать простейший шаблонизатор для php.
Я в этом новичок, и хотелось бы услышать ваше конструктивное мнение о моем коде.
Внимание! Я не прошу писать код за меня, мне самому интересно разобраться в этом.

<?php
include "core/template.php";
?>
<?php
$site_url = " "; // Адресс вашего сайта
$template_name = "default"; // Имя папки с вашим шаблоном
$site_title = "Имя сайта!"; // Имя вашего сайта
?>
<?php
include "config/config.php";

// Главная страница шаблона
$template = file_get_contents("template/".$template_name."/index.html");

// Файлы шаблона
$menu = file_get_contents("template/".$template_name."/menu.html");
$content = file_get_contents("template/".$template_name."/content.html");

if($_SERVER['REQUEST_URI'] == "/index.php"){
$site_title = $site_title;
$template = str_replace('{content}', $content, $template);
}
elseif($_SERVER['REQUEST_URI'] == "/index.php?f=news"){
$site_title = "Новости";
$template = str_replace('{content}', 'Тут будут новости!', $template);
}
else{
$site_title = "Страница не найдена!";
$template = str_replace('{content}', 'Страница не найдена!', $template);
}

$template = str_replace('{title}', $site_title, $template);
$template = str_replace('{template}', $site_url."/template/".$template_name, $template);
$template = str_replace('{menu}', $menu, $template);
$template = str_replace('{url}', $site_url, $template);

// Показываем шаблон (index.html)
echo $template;
?>
Все как бы работает, но насколько это правильно?
 
Я почему-то абсолютно не уверенный в этом участке кода, не костыль ли?
if($_SERVER['REQUEST_URI'] == "/index.php"){
$site_title = $site_title;
$template = str_replace('{content}', $content, $template);
}
elseif($_SERVER['REQUEST_URI'] == "/index.php?f=news"){
$site_title = "Новости";
$template = str_replace('{content}', 'Тут будут новости!', $template);
}
else{
$site_title = "Страница не найдена!";
$template = str_replace('{content}', 'Страница не найдена!', $template);
}
 
Обычно шаблон делится на 3 части - header, content, footer

Как вариант - создать папку шаблона в котором будут хранится его ресурсы (изображения, css, js и тд), а так же заветный header.php и footer.php.
В index.php подключаем сверху соответственно header, снизу - footer, например через require_once.

Все что между - будет динамически изменяемый контент.

Что бы избавиться от костыля расфасовываем страницы по папкам, получится подобная структура:
  • index.php
  • news
    • index.php
  • articles
    • index.php
Соответственно в каждом index-файле необходимо подключать footer и header шаблона. Страницы будут доступны по адресам типа
Для универсальности - можно в config-файл добавить путь до папки шаблона который будет подставляться в require_once, параметры для работы в бд и прочую мелочевку которая в процессе рендера не будет изменяться.
 
Зачем плодить 1оо5оо переменных когда можно все это держать в массиве?
$site_url = " "; // Адресс вашего сайта
$template_name = "default"; // Имя папки с вашим шаблоном
$site_title = "Имя сайта!"; // Имя вашего сайта
Типо так ?
PHP:
$config = array['template' => 'default',
'site_title' => 'Имя сайта!',
'site_url' => 'http://myphp.me',
];

include "config/config.php";
Зачем двойные кавычки?
Старайся использование двойных свести на ноль, я их вообще не использую, взял за правило!


$template = str_replace('{title}', $site_title, $template);
$template = str_replace('{template}', $site_url."/template/".$template_name, $template);
$template = str_replace('{menu}', $menu, $template);
$template = str_replace('{url}', $site_url, $template);
А ведь можно так...
$template = str_replace(array('{template}', '{menu}', '{url}'), array($site_url.'/template/'.$template_name, $menu, $site_url), $template);

if($_SERVER['REQUEST_URI'] == "/index.php")
}
Ну...
index.php? уже не найдет
Там посмотри в документации есть функции для парсинга URL

if/else/elseif... очень много у тебя будет elseif, лучше уже используй
 
Зачем плодить 1оо5оо переменных когда можно все это держать в массиве?

Типо так ?
PHP:
$config = array['template' => 'default',
'site_title' => 'Имя сайта!',
'site_url' => 'http://myphp.me',
];


Зачем двойные кавычки?
Старайся использование двойных свести на ноль, я их вообще не использую, взял за правило!



А ведь можно так...
$template = str_replace(array('{template}', '{menu}', '{url}'), array($site_url.'/template/'.$template_name, $menu, $site_url), $template);


Ну...
index.php? уже не найдет
Там посмотри в документации есть функции для парсинга URL

if/else/elseif... очень много у тебя будет elseif, лучше уже используй
Я бы всетаки ушел от смены контента посредством условий и switch, обычно это используют в фильтрах, и то можно этого избежать (полотна параметров в адресе) передавая параметры в ajax-запросе.

Вообще в битриксе заложена неплохая идея по работе с шаблонами посредством компонентов, если бы еще он не был такой помойкой в плане кода...
 
Вообще в битриксе заложена неплохая идея по работе с шаблонами посредством компонентов, если бы еще он не был такой помойкой в плане кода...
на самом деле это велосипед, возьми любой фреймворк, там уже за тебя всё сделали.
 
Назад
Сверху Снизу