Задать вопрос
Afranius
@Afranius
Из говорящих дольше живут те, что говорят меньше.

Можно ли писать функции в текст?

Суть такая. Пытаюсь писать большой проект. HTML-код идёт большими кусками.
Я его описываю как переменные в виде:
$pgrem = <<< PG_REM
код на html
PG_REM;
куски кода очень большие и некоторые элементы повторяются.
Затем я вывожу его типа
echo $pgrem
Соответственно, хочется в этот код вставлять переменные, а то и функции, выводящие результат в зависимости от текущих переменных.
Да, я знаю, что можно вставить ключевые значения и перед выводом текста вставлять замену этих значений, но это ещё более усложняет код. Есть ли другой способ вызывать функции при выводе такого текста? Допусттим, вывод разных вариантов страницы в зависимости от того, авторизован пользователь или нет.

P.S. Проверил, с переменными прокатывает, хотя и не всегда так как ожидалось. Например, если две переменных стоят вместе, то между ними надо ставить не точку, а пробел.
  • Вопрос задан
  • 410 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Откройте для себя такую штуку как "Шаблонизаторы". Они как раз и предназначены для декомпозиции объёмных страниц и переиспользования кода.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Извратиться можно, но это будет именно извращение.
Тем более что всё равно кроме функций понадобятся и управляющие конструкции - if, foreach.
И решение давно придумано. РНР умеет встраиваться в HTML. Поэтому вместо того, чтобы писать разрозненные куски HTML в переменные, весь HTML пишется в один php файл, в котором делаются вставки на РНР. после того, как РНР выполнил всю бизнес-логику, пишется одна строчка, include 'template.php'; и дальше выводится весь HTML. Грубый пример такого файла
<?php include 'top.php'; ?>
<h2><?=$pagetitle?></h2>
<ul>
<?php foreach($links as $row): ?>
  <li>
    <a href="<?= htmlspecialchars($row['link']) ?>">
      <?= htmlspecialchars($row['name'])?>
    </a>
  </li>
<?php endforeach ?>
<ul>
<?php include 'bottom.php'; ?>


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

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

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