[Smarty] inteligentne wybieranie zmiennej z pliku conf.

Odpowiedz Nowy wątek
2009-07-09 13:56
0

Witam was.

Postanowilem uzywac Smarty w swoich projektach i juz natrafilem na problem.

Glownie chodzi o to ze mam zapisane jakies tam zmienne w pliku konfiguracyjnym config.confm sa tam komunikaty ktore wyswietlam na stronie.
Problem sprawia mi wyswietlanie tych zmiennych.
Przykladowo mamy jakas tam operacje ktora sie wykonuje: np. logownie, usuwanie komentarza itp.
W szablonie mam wyswietlic odpowiedni komunikat w zaleznosci czy sytuacja sie powiodla czy nie.

Robie to nastepujaco:

{if $result=='success'}
<h1>{#success#}</h1>
{else}
<h1>{#fail#}</h1>
{/if}

Jak widac w zmiennej $result jest wynik operacji success( powiodla sie ) / fail ( nie powiodla sie )
Czy da sie to zrobic jakos prosciej aby smarty juz sam sobie wybral ta zmienna? Cos w stylu:

<h1>{#{$result}#}</h1>

Dzieki za wszelkie propozycje ;-)

Czy naprawde nikt nie potrafi mi nic odpowiedziec?

Pozostało 580 znaków

2009-07-09 17:57
0

a co za problem w zależności co wyszło to odpowiednią treść wpisać w zmienną result??

Pozostało 580 znaków

2009-07-09 20:28
0

Poniewaz inna osoba tworzy plik configuracyjny oraz inny plik jest ladowany w zaleznosci od jezyka a nie chce komplikowac.

Pozostało 580 znaków

2009-07-10 09:52
0

Jak masz angielski plik lang.en.php:

<?php
$lang['fail'] = 'failed';
$lang['success'] = 'success';
?>

I polski lang.pl.php:

<?php
$lang['fail'] = 'nie powiodla sie';
$lang['success'] = 'ukonczona';
?>

To w zależności od langa ustawionego przez użytkownika do skryptu inkludujesz stosowny plik. Potem pod {#success#} podpinasz $lang['success'].


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-07-10 09:57
0

No to stwórz prefilter który pozamienia np wszystkie "{#symbol#}" na "{ $messages.symbol}". Smarty pozwala dość łatwo rozszerzać składnie. Tu przykład używany przez mnie w tych kilku przypadkach gdy foreach sie nie nadaje i potrzebne jest coś w stylu array() wewnątrz smarty:

function smarty_unroll_prefilter_callback($match) {
        $values = explode(',', $match[1]);
        $result = '';
        foreach($values as $v) {
                $result .= str_replace('%%', $v, $match[2]);
        }
        return $result;
}
function smarty_unroll_prefilter($source){
        return preg_replace_callback('|<unroll *values="([^"]+)" *>(.*?)</unroll>|s',
                'smarty_unroll_prefilter_callback',$source);
}

I przykładowe zastosowanie:

<unroll values="test,test2">
 <img src="{$images.%%} alt=""/>
</unroll>

przed dalszym przetworzeniem zamieni się w:

 <img src="{$images.test} alt=""/>
 <img src="{$images.test2} alt=""/>

Pozostało 580 znaków

2009-07-10 10:15
0
{eval assign="{#`$result`#`$smarty.rdelim`"}

Spróbuj tak. Jak nie będzie działało (bo nie wiem jak jest z eval i argumentem assign), to tak:

{assign var='ReturnSmarty' value="{#`$result`#`$smarty.rdelim`"}
{eval var=$ReturnSmarty}

:)

Pozostało 580 znaków

2009-07-10 13:28
0

Dzieki wszystkim za pomoc

Jednak najbardziej przypadlo mi do gustu rozwiazanie bordeux. :d
Dokladnie o to mi chodzilo. Dzieki wielkie [green]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0