PHP повторяет HTML-код с включенным дополнительным PHP

У меня есть блоки HTML-кода в базе данных MySQL, и моя структура должна распечатать их в шаблоне PHP, который будет выводиться в браузер. Для этого я делаю этот вызов:

</tr>
    <!-- Section 3 -->
    <?php echo SIN_SiteView::get('section3') ?>
<tr>

Который получает код либо от APC, либо от MySQL, теперь полученный код выглядит так:

<td height="280" colspan="2" bgcolor="#00abd2">
<a href="#">
    <img src="<?php echo SIN_Utilities::l("image", "home_flash.png")?>" width="710" height="280" border="0" />
</a>

As you can see I need to run all images through a method known as "l" which I use to easily change images paths. Now the issue is if I echo that block of code it will simply be echoed as a string and not work.

Я попытался окружить php с помощью «. [код] .' и удаление php, но это тоже не сработало. Есть ли у кого-нибудь идеи о том, как я мог бы правильно повторить это на странице.

Спасибо.

ОБНОВЛЕНИЕ: я думаю, что мне нужно использовать команду eval() благодаря некоторым комментариям, я просто не понимаю, как это реализовать в моей ситуации. Будем очень признательны за любые простые примеры, например, как изменить эту строку:

<?php echo SIN_SiteView::get('section3') ?>

Чтобы повторить весь блок, представленный выше, еще раз спасибо.


person Alex Angelini    schedule 08.08.2010    source источник
comment
Можете ли вы включить немного больше кода? В частности, некоторые окружающие php (вне html). Вы можете поставить что-то вроде ...[html]..., чтобы обозначить, что между этим и тем, что вы показываете, есть большой блок кода только для html, но наличие этого дополнительного кода может сильно помочь.   -  person Jeffrey Blake    schedule 08.08.2010
comment
Проверьте php.net/manual/en/function.eval.php   -  person Brandon Horsley    schedule 08.08.2010
comment
Кроме того, поскольку вы не используете сокращение <?= SIN_Utilities::l("image", "home_flash.png") ?>, вам, вероятно, понадобится точка с запятой перед ?>. Однако это не вызовет этой проблемы.   -  person Jeffrey Blake    schedule 08.08.2010


Ответы (3)


Я думаю, вы хотите eval, а не echo. См. этот немного другой вопрос.

Мое решение было бы eval '?>'.$myhtml.'<?php'.

person Borealid    schedule 08.08.2010

Добавляет ли маркетинговая команда код php в сохраняемый вами html?

Если нет, может быть, вы могли бы изменить свой <?php echo FUNCTION() ?> на @FUNCTION() и превратить свой SIN_SiteView::get() в свой собственный интерпретатор шаблонов?

Однако я согласен с cHao; вероятно, было бы проще принять один из пакетов шаблонов и преобразовать ваши данные.

person KMW    schedule 08.08.2010
comment
Как стажер, я думаю, что причина, по которой они заставляют меня писать это от руки, заключается в том, чтобы завершить проект, но также и в качестве учебного опыта, я думаю, что использование готового пакета было бы намного проще (я мог бы даже использовать предварительно созданную CMS) но строить это вручную - своего рода точка. И да, маркетинговая команда должна иметь возможность изменять фотографии, загруженные php, поэтому да, они должны иметь возможность контролировать это. - person Alex Angelini; 08.08.2010

Вам потребуется использовать eval для оценки встроенного PHP. Однако это потенциально довольно рискованно (eval — это зло и т. д.), особенно если какой-либо извлекаемый контент исходит от пользователя.

например: По крайней мере, что мешает пользователю встроить...

<?php die(); ?>

...в контенте, в который они входят.

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

Некоторые обновления:

  1. Если вы новичок в PHP, я бы порекомендовал переосмыслить. Скорее всего, нет необходимости использовать eval. (Если нет динамически настраиваемого контента для каждого пользователя, он вам не нужен.) Чего вы пытаетесь достичь?

  2. Какая конкретная ошибка/проблема у вас возникла? (Я предполагаю, что вы используете var_dump или print_r для целей отладки и т. д.) Поскольку контент, который вам нужно оценить, не является чистым PHP (это HTML с PHP), вам необходимо встроить закрыть и (повторно) открыть теги, как показано @Borealid.

person John Parker    schedule 08.08.2010
comment
Я создаю очень простую систему CMS для маркетинговой команды, они единственные, кто имеет доступ к тому, что находится в БД, и я сомневаюсь, что они испортят свой собственный сайт. :) - person Alex Angelini; 08.08.2010
comment
Всегда есть альтернатива. Например, один из полутора миллионов пакетов шаблонов. - person cHao; 08.08.2010
comment
@Alex - Скажем так, eval - это иногда необходимое зло - пока вы знаете о проблемах, которые это может вызвать, вы, по крайней мере, знаете, во что ввязываетесь. :-) - person John Parker; 08.08.2010
comment
Кажется, это то, что мне нужно, у меня просто проблемы с пониманием того, как реализовать это в моем коде (извините, я очень новичок в PHP) - person Alex Angelini; 08.08.2010