Как красиво вставлять php код в файл

171
17 декабря 2019, 10:20

Есть файлы, в которых идет html разметка и php код, сейчас они выглядят так:

<? if (...) { ?>
    <div>...</div>
<? }else{ ?>
    <span>...</span>
<? } >?

Или например:

<div>html code <?=$string;?> html <?=$num;?> code</div>

Не очень как-то... Как можно это все оформить по красивее? Какие есть варианты?

Answer 1

Принципиально более красивых вариантов нет. И не должно быть. В коде должна сохраняться гибкость и возможность выполнять определенные синтаксические конструкции.

Можно поменять на

{% if (...) %}
    <div>...</div>
{% else %}
    <span>...</span>
{% } %}

и

<div>html code {{ $string }} html {{ $num }} code</div>

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

Answer 2

Шаблоны на 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>
READ ALSO
mysql вывести за месяц

mysql вывести за месяц

Как вывести данные за текущий месяц?

185
После получения сайта через file_get_contents на нем не работает javascript

После получения сайта через file_get_contents на нем не работает javascript

Пытаюсь получить эту страницу при помощи file_get_contents: https://livetourroomee

150