Подскажите, как проверить URL на вхождение строки? К примеру мне нужно отобразить блок, прописанный в page.tpl только в карточке товара, т.е. надо проверить условие, что URL содержит строку "/products/".
Подскажите, как проверить URL на вхождение строки? К примеру мне нужно отобразить блок, прописанный в page.tpl только в карточке товара, т.е. надо проверить условие, что URL содержит строку "/products/".
{$uri = $smarty.server.REQUEST_URI} {$check = preg_replace('!^/products/!', '', $uri)} {if $check != $uri} мой блок {/if}
Покажет блок если uri страницы начинается с /products/.
Тот же код на чистом Smarty (без php функции preg_replace).
{$uri = $smarty.server.REQUEST_URI} {$check = $uri|regex_replace:'!^/products/!':''} {if $check != $uri} мой блок {/if}
Код проверки вхождения /products/ на любой позиции uri.
{$uri = $smarty.server.REQUEST_URI} {$check = $uri|replace:'/products/':''} {if $check != $uri} мой блок {/if}
То же с php функцией str_replace.
{$uri = $smarty.server.REQUEST_URI} {$check = str_replace('/products/', '', $uri)} {if $check != $uri} мой блок {/if}
Вобще можно было одной строкой.
{if preg_match('!^/products/!', $smarty.server.REQUEST_URI)} мой блок {/if}
Но функции preg_match почему-то нет в списке разрешенных для шаблона.
Предложение разработчику добавить в шаблоне настройку чтобы самому задавать разрешенные php функции.
Например если в emulator.php шаблона есть свойство $php_functions оно заносится в policy Smarty.
Люди!!!!!!!!!!!!!!!!!!!
Вы же программситы. Или мартышки? Менеджер нажмёт на товаре галку "Особый URL" и ваша проверка полетит к чёрту. Потому что из uri исчезнет приставка "/products/".
100 лет назад уже придумали, как на Смартях выбросить флаг другому tpl, чтобы там включился блок. Всего 2 строки надо.
product.tpl
... {$block1=true scope=global} ...
page.tpl
... {if !empty($block1)} ваш блок 1 {/if} ...