#php #parsing #smarty
#php #синтаксический анализ #smarty
Вопрос:
Используя приведенный ниже php-код, я могу получить текущий URL-адрес, выполнить синтаксический анализ и получить часть строки.Но этот код не поддерживается в моем файле шаблона smarty.Код smarty, который я преобразовал, не работает должным образом.
php-код:
<?php
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url_path=$url;
$parsed = parse_url($url);
$path = explode('/', $parsed['path']);
$resulturl = $parsed['scheme'] . '//' . $parsed['host'] .'/'. $path[1] . '/';
$outurl = $path[1];
?>
if ($outurl == "album") {
<h6>Sample text one </h6>
}
else
{
<h6>Sample text two </h6>
}
Интеллектуальный код:
{php}
$url={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}
$url_path=$url;
$parsed = parse_url($url);
$path = explode('/', $parsed['path']);
$resulturl = $parsed['scheme'] . '//' . $parsed['host'] .'/'. $path[1] . '/';
$outurl = $path[1];
{/php}
{if $outurl == 'album'}
<h6>Sample text one </h6>
{else}
<h6>Sample text two </h6>
{/if}
Комментарии:
1. Smarty — это язык шаблонов. Это не шаблонная логика. Выполните этот тип логики 1st и передайте простые данные в шаблон.
Ответ №1:
Вы делаете это неправильно. Smarty предназначен для отделения действий PHP от отображения. Что вам нужно сделать, это просто:
PHP-файл:
<?php
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url_path=$url;
$parsed = parse_url($url);
$path = explode('/', $parsed['path']);
$resulturl = $parsed['scheme'] . '//' . $parsed['host'] .'/'. $path[1] . '/';
$outurl = $path[1];
$smarty->assign('outurl', $outurl);
Файл шаблона Smarty:
{if $outurl == 'album'}
<h6>Sample text one </h6>
{else}
<h6>Sample text two </h6>
{/if}
Использование {php}
тега в шаблонах Smarty теперь устарело, и в текущей версии вы можете использовать его только с помощью класса BC, а не стандартного класса. В вашем случае я не вижу смысла использовать этот тег в шаблоне Smarty, потому что вы можете просто сделать это в файле PHP и перейти $outurl
к файлу шаблона.
Комментарии:
1. Я пробовал то же самое на своем сайте prestashop, но код php закомментирован и не может получить $ outurl . Следовательно, функциональность не работает.@ Марчин Набиалек
2. Не может быть, чтобы это не сработало. Проверяли ли вы значение $outurl перед его присвоением Smarty? Вы должны протестировать код, используя
$smarty->assign('outurl', 'album');
or$smarty->assign('outurl', 'album2');
, он работает нормально, так что ваша проблема, вероятно, где-то в другом месте3. Я думаю, что я допустил ошибку при передаче значения $outurl. Как передать значение outurl в файл шаблона? Куда мне нужно поместить этот код $smarty->assign(‘outurl’, ‘album’); @Marcin Nabialek
4. @user3489161 Сначала вы, конечно, должны создать объект Smarty, но вы можете выполнить это назначение сразу после вычисления значения — как в моем ответе. Если это не работает, вероятно, вы делаете что-то еще в своем коде или используете какой-то фреймворк, и без полного кода невозможно определить, что вы делаете неправильно
5. Привет, я получаю ошибку вывода неопределенного индекса. Я поместил php-код в php-файл моей корневой папки prestashop. Теперь моя проблема в том, что я включил файл php в свой заголовок.tpl php не работает. Поэтому мне нужно знать, как передать значение только в файл header.tpl.@ Марчин Набиалек