#php #directory #smarty
#php #каталог #smarty
Вопрос:
Я не могу назначить свою собственную функцию PHP. (У меня просто есть доступ к файлу TPL).
Пока я получил {$smarty.server.PHP_SELF}
, который возвращает что-то вроде /foo/bar.xin
. С помощью встроенных функций я хотел бы получить /foo/
.
Комментарии:
1. Можете ли вы использовать
{php}
теги (которые в будущем устареют)?2. Да, я могу, насколько я знаю. Я заменю их, как только получу доступ к PHP.
3. Если вы можете, то вы можете выполнить свои собственные манипуляции с помощью PHP. Я не решаюсь предложить ответ, поскольку 1) Я не знаю контекста, в котором вы хотите использовать значение, 2) У меня нет доступа к анализатору Smarty.
Ответ №1:
Как я уже отмечал, {php}
теги устарели, но вы можете сделать следующее:
{php}
$php_self = $_SERVER['PHP_SELF'];
$path = substr($php_self, 0, strrpos($php_self, '/'));
// assign a variable to Smarty
$this->assign('path',$path);
{/php}
Path: <strong>{$path}</strong>
Я не смог протестировать это, поскольку в моем распоряжении нет анализатора, но это следует примеру на странице документации Smarty:
Комментарии:
1. Спасибо за ответ, но
$path
отображается как empty / null, т. Е. не отображается, и я не уверен, как это отладить.echo/print
в{php}
теге также не отображается, как и{$path}
за его пределами.2. @Lazlo — Вы уверены, что вам разрешено использовать
{php}
теги? Это может быть включено / выключено тем, кто управляет используемым вами объектом Smarty.3. Тогда, возможно, это не так, извините за путаницу.
4. @Lazlo — Я не уверен, пытаетесь ли вы отобразить значение или что-то еще, но вы можете использовать модификаторы строк , чтобы потенциально обрезать имя файла в PHP_SELF.
5. @Jared: Я предполагаю, что
|truncate:length
мог бы это сделать, но как получить длину?
Ответ №2:
{$smarty.server.PHP_SELF | dirname}
вернет, /foo
предполагая, что функция dirname включена (см. php_modifiers
в настройках безопасности Smarty).
Ответ №3:
{$smarty.server.DOCUMENT_ROOT}
вернет путь к серверу