Синтаксический анализ URL-адреса и получение части URL-адреса с помощью smarty

#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.@ Марчин Набиалек