выполнить sprintf не в шаблоне

  • Автор темы Just4Fun
  • Дата начала

Just4Fun

Guest
выполнить sprintf не в шаблоне

У меня такая задача:

file: error.php
PHP:
$smarty->assign('error',"{#error_0001#}");
$smarty->display("error.tpl");
Сама ошибка:
Найдено %s ошибок

как мне в error.php сделать sprintf, что бы шаблон получил:
PHP:
{eval var=$error|sting_format:"hello"}

либо что-то вроде этого...

p.s. кол-во для замены может быть бесконечным.
(Найдено %s ошибок в %d файлах....)
 

alexhemp

Новичок
не надо код писать - напиши словами что тебе конкретно требуется сделать.
 

Just4Fun

Guest
в общем выполнить sprintf не в шаблоне а в php.

что-то вроде:
$smarty->sprintf("{#error_message#}","некий текст");

Задача:
» выполнить sprintf с сообщением {#error_message#}(Найдено %s ошибок). Аналог: {"Найдено %s ошибок"|sting_format:"некий текст"}.
 

nw

Новичок
Может я не совсем понял задачу, а что если по схеме:
$errnum = 20;
$raw_errmsg = "Найдено %errnum% ошибок";
$errmsg = str_replace("%errnum%",$errnum,$raw_errmsg);
$smarty->assign("ERRMSG",$errmsg);

В шаблоне:
{$ERRMSG}

-~{}~ 08.09.05 08:25:

Либо, для чистоты метода, можно хранить $raw_errmsg в отдельном ресурсе в виде того же Smarty-шаблона и вместо str_replace делать $smarty->fetch(...)

-~{}~ 08.09.05 08:30:

Ищу трудные пути :)
$errmsg = sprintf(".....");
$smarty->assign("ERRMSG",$errmsg);
 

alexhemp

Новичок
Just4Fun

Ты опять код пишешь. Ты СЛОВАМИ объясни что тебе нужно. Может тебе никакой sprintf и не нужен.
 

Just4Fun

Guest
alexhemp
заменить все %s,%d и т.п. на слово в переменной смарти.

{#error_0001#} - переменная видна только смарти, а мне ее в пхп изменить нужно...

куда ж уже проще...

2nw
PHP:
$smarty->assign("ERRMSG",sprintf("найдена %s ошибка в %d файлах",'_get_url',5));
Но тут такое дело, у меня мультиязычность, поэтому вместо "найдена %s ошибка в %d файлах", переменная должна быть, а она в global.lng, а содержимое global.lng видит только смарти.
 

kvf77

Red Devil
Just4Fun

внутри шаблонов есть функция assign - почитай в доке. ей можно переопределить значение переменной
 

alexhemp

Новичок
Just4Fun
Теперь мне примерно понятно что ты имеешь ввиду.
Ты хочешь хранить языко-зависимые строки в конфиге но ипользовать их не как константы, а как шаблоны.

Это описано в документации, с примером
http://smarty.php.net/manual/en/language.function.eval.php

Никаких sprintf в php не нужно - передавай текст ошибки (можешь читать его из конфига через get_config_vars).


Да, и не нужно использовать синтаксис sprintf - так только больше все запутаешь

в конфиге пиши

Error = "найдена {$error.text} ошибка в {$error.count} файлах"

Далее в php

$smarty->assign('error', array('text'=>"текст ошибки", 'count' => 5));

Ну и в шаблоне

{eval var=#Error#}

и все
 
Сверху