Есть файлы, в которых идет html разметка и php код, сейчас они выглядят так:
<? if (...) { ?>
<div>...</div>
<? }else{ ?>
<span>...</span>
<? } >?
Или например:
<div>html code <?=$string;?> html <?=$num;?> code</div>
Не очень как-то... Как можно это все оформить по красивее? Какие есть варианты?
Принципиально более красивых вариантов нет. И не должно быть. В коде должна сохраняться гибкость и возможность выполнять определенные синтаксические конструкции.
Можно поменять на
{% if (...) %}
<div>...</div>
{% else %}
<span>...</span>
{% } %}
и
<div>html code {{ $string }} html {{ $num }} code</div>
но это следует делать не ради того чтобы стало "покрасивее" (что спорно), а потому что такой синтаксис будет поддерживаться шаблонизатором, предоставляющим много других полезных функций
Шаблоны на PHP могут стать более читаемыми (красивыми) если использовать альтернативный синтаксис циклов и условных операоров.
<?php if (true): ?>
...
<?php endif ?>
<?php foreach ($items as $item): ?>
<?= htmlspecialchars($item->name) ?>
<?php endforeach ?>
Обратите внимание, что можно опустить точку с запятой перед закрывающим дескриптором. Кроме того, шорттег <?= работает даже если шорттеги отключены.
Хочу ещё заметить, что читать шаблоны станет проще, если разбить их на небольшие компоненты. И готовить данные для шаблона заранее (исключить из кода шаблона бизнес-логику).
Смотрите как здорово:
/**
* Подключение файла с буферизацией вывода
* @param string $file
* @param array $params
* @return string
*/
function ob_include(): string
{
extract(func_get_arg(1));
ob_start();
require func_get_arg(0);
return ob_get_clean();
}
echo ob_include(__DIR__ . '/list.phtml', ['items' => $items]);
list.phtml:
Список редисок:
<ul>
<?php foreach($items as $item): ?>
<li><?= ob_include(__DIR__ . '/item.phtml', ['item' => $item]) ?></li>
<?php endforeach ?>
<ul>
item.phtml:
<div>
<?= htmlspecialchars($item->name) ?>
</div>
Продвижение своими сайтами как стратегия роста и независимости