Получение имени каталога только из path в Smarty

#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:

http://www.smarty.net/docs/en/language.function.php.tpl

Комментарии:

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}  
  

вернет путь к серверу