eucalipt
@eucalipt
Самоделкин.

Как использовать шаблоны в PHP?

Что-то я частенько начал натыкаться на некую шаблонизацию (?) в кодах других разработчиков.
Сейчас поясню.
Например, есть у меня подключаемая шапка:
<header id="header">
	<section>
		<div class="sandwich-holder"><span data-content="flaticon sandwich"></span></div>
		<div id="home-button">SITE NAME</div>
	</section>
	<section>
		<?php
			$main = new Main;
			
			if ($main->IsUser()) {
				$login = $main->GetLogin();
				$avatar = $main->GetAvatar();
				$currentLocation = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
				
				print <<<ANDY
					<div id="user-box">
						<span class="ava" style="background: url('/images/avatars/$avatar'); background-size: cover;"></span>
					</div>
ANDY;

			} else {
				print("<a class='enter'>Вход</a>");
			}
		?>
	</section>
</header>


Так вот, в последнее время этот код начинает казаться мне каким-то уродливым. Эти 20 строчек кода, чтобы вывести одну только аватару пользователя, если он вошел или кнопку входа, если нет.

Где-то в других кодах я видел, например, что-то типа этого (сразу говорю, что что-то похожее, могу ошибиться в символах):
<header id="header">
	<section>
		<div class="sandwich-holder"><span data-content="flaticon sandwich"></span></div>
		<div id="home-button">$%SITE_NAME$</div>
	</section>
	<section>
		$%BUTTON_OR_AVA$
	</section>
</header>


Как вы можете видеть, такой код куда более привлекателен. Подскажите, стоит ли вообще (может и так все нормально, и я зря парюсь) этим баловаться, и, если стоит, то в какую вообще сторону смотреть?
  • Вопрос задан
  • 2593 просмотра
Решения вопроса 1
DevMan
@DevMan
Не стоит, а обязательно.
Шаблонизаторов много, самые популярные - пожалуй smarty и twig.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
На самом деле, разумеется, тип шаблонизатора не имеет ни малейшего значения.

Первичен подход к проблеме. И качество прокладки между стулом и монитором.
Говнокодер всегда будет говнокодить. И если дать ему шаблонизатор, не позволяющий писать РНР в шаблоне, то у него будут горы HTML в контроллере.

Программист же вызовет сниппет
<section><? ins('button_or_ava') ?></section>
При этом у сниппета будет свой шаблон
<? if ($user): ?>
          <div id="user-box">
            <span class="ava" style="background: url('/images/avatars/<?=$user->avatar?>'); background-size: cover;"></span>
          </div>
<? else: ?>
    <a class='enter'>Вход</a>
<? endif ?>
Ответ написан
Ваш ответ на вопрос

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

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