[ kelja @ 09.03.2010. 12:14 ] @
Elem, muka naterala da se pod stare dane bakcem i sa ovim. "Minor template modification" je preraslo u nesto malko vise.
Uzgred, upotreba Smarty-ja valjda podrazumeva i laksi rad dizajnerima, sto bas i nisam primetio na osnovu ovih sablona na kojima radim. :D

U cemu je problem?

Klijent je trazio da malo izmenim ovaj template:
http://bit.vc/

sto sam, nekako, i uradio, pa je onda zamolio i da zamenim default captchu nekom boljom, i to ovom:

http://code.google.com/p/3dcaptcha/

(Uzgred, ne bih rekao da je default captcha tako slaba, naposletku, taj skript se placa: http://www.gentlesource.com/short-url-script/)

E sad, taj 3d captcha skript kreira naravno $_SESSION varijablu zvanu: $_SESSION['3DCaptchaText'], ali ova nije dostupna u Smarty okruzenju. Testirao sam skripticu bez Smarty-ja i radi fino, samo da kazem.

Probao sam malo prljavog hardcodinga, kazu da to ne valja :D, ali nista:
Code:
              {php}

//echo $_SESSION['3DCaptchaText'];
if(isset($_POST['u'])) { // url text field, da pojasnim




if(empty($_POST['captchatext'])) { //captcha text field
echo 'Please enter the text you see in the image above';

}

if($_POST['captchatext']==$_SESSION['3DCaptchaText']){
//echo $_SESSION['3DCaptchaText'];
//echo $_POST['captchatext'];
echo 'ok';
}
else die('no');
}
{/php}       


ako imate neko brzo i lako resenje, bio bih zahvalan. :)
[ dakipro @ 09.03.2010. 12:22 ] @
samo jedno kratko pred kod, zasto $_SESSION['3DCaptchaText'] nije dostupna u smartiju, kreira se valjda pre outputa templejta?
{$smarty.session.3DCaptchaText} nema nista?
[ kelja @ 09.03.2010. 12:47 ] @
@dakipro, dva templejta su u igri:
layout template, i form template.
Evo kako izgleda form template kod:
Code:
  <div id="s6l_content">
    {if $message}
    <div class="s6l_frontend_error_message">
      {foreach from=$message item=item}
        <div class="s6l_frontend_error_message_item">{$item}</div>
      {/foreach}
    </div>
    {/if}
    
     {if $show_form == 1}
    <form {$form.attributes}>
    {$form.hidden}        
    
    <dl class="s6l_short_url_form">

      <dt>{$form.u.label}</dt>
      <dd>{$form.u.html}<input type="image" src="./template/blue/image/go.gif" alt="" style="vertical-align:middle;" /><a style='margin-left:6px;color:#999;text-decoration:underline;font-size:13px;' href="?a=y">{$txt_advanced}</a>
        <!--<span id="s6l_advanced"><a href="?a=y">{$txt_advanced}</a></span>-->
        {if $form.u.error}<div class="s6l_error_message">{$form.u.error}</div>{/if}
        {if $message}
        <div class="s6l_frontend_error_message">
          {foreach from=$message item=item}
            <div class="s6l_frontend_error_message_item">{$item}</div>

          {/foreach}
        </div>
        {/if}
        
      </dd>
    
    {if $show_advanced_settings}
      <dt>{$form.u_id.label}</dt>
      <dd>{$form.u_id.html}
        {if $form.u_id.error}<div class="s6l_error_message">{$form.u_id.error}</div>{/if}
      </dd>
    {/if}
    
    </dl>    
      {call_module trigger="frontend_comment_form" data="$page_data"}
      
 
      

      <img src="template/blue2/3DCaptcha.php" alt="captcha" /> <!--ovde skript poziva textgen.php koji generise tekst za captcha image -->

     <p> Please enter Word you see on image:
      <input name="captchatext" type="text" /></p>
         


    </form>
              {php}
// moje drljanje
//echo $_SESSION['3DCaptchaText'];
if(isset($_POST['u'])) {




if(empty($_POST['captchatext'])) {
echo 'Please enter the text you see in the image above';

}

if($_POST['captchatext']==$_SESSION['3DCaptchaText']){
//echo $_SESSION['3DCaptchaText'];
//echo $_POST['captchatext'];
echo 'ok';
}
else die('no');
}
{/php}       
    
    {if $show_short_url}    
      <div class="s6l_label" style="margin-top:0em;margin-left:67px;">{$txt_short_url_text} {$output_message}</div>      

      <div id="s6l_result">
        <form name="newurlform">
        <input id="output_text" type="text" name="newurl" value="{$output_url}" {literal}onfocus="if (typeof(document.layers) == 'undefined' || typeof(textarea_selected) == 'undefined') {textarea_selected = 1; document.newurlform.elements['newurl'].select();}"{/literal} />
        <!--{if $twitter_link == 'Y'}  <a href="{$twitter_home_url}?status={$output_url}">Twitter it</a>{/if}-->

        </form>
      </div>
      <div id="s6l_statistics">
        {$length_statistics}<br /><br />
        {$txt_statistics_link}: <a href="{$output_url}{$statistics_trigger}">{$output_url}<strong>{$statistics_trigger}</strong></a>  
      </div>
    {/if}
    
  </div>

    

    {/if}


vidis, ovo nisam ni probao, nemam pojma o Smarty-ju. (Znam, znam, citaj help, i to:D))
[ krksi @ 16.03.2011. 13:34 ] @
a zasto jednostavno ne odradis tu lokigu u php skripti koja poziva taj tpl
tako da umesto :

Code:

{php}

//echo $_SESSION['3DCaptchaText'];
if(isset($_POST['u'])) { // url text field, da pojasnim




if(empty($_POST['captchatext'])) { //captcha text field
echo 'Please enter the text you see in the image above';

}

if($_POST['captchatext']==$_SESSION['3DCaptchaText']){
//echo $_SESSION['3DCaptchaText'];
//echo $_POST['captchatext'];
echo 'ok';
}
else die('no');
}
{/php}


uradis

Code (php):


controller.php

$captchaIspravna = 0;
$postojiCaptcha = 0
$setovano = 0;

if(isset($_POST['u']))
    $setovano = 1;


if(!empty($_POST['captchatext'])){
    $postojiCaptcha = 1;

     if($_POST['captchatext']==$_SESSION['3DCaptchaText'])
           $captchaIspravna = 1;
}
$smarty->assign("setovano", $setovano);
$smarty->assign("captchaIspravna", $captchaIspravna);
$smarty->assign("postojiCaptcha", $postojiCaptcha);
 


i zatim u tpl-u samo stavis

Code:

{if $setovano==1}

    {if $postojiCaptcha==0}
          Please enter the text you see in the image above
    {/if}

    {if $captchaIspravna==1}
          ok
    {else}
          no
    {/if}
{/if}
[ VladaSu @ 17.03.2011. 10:22 ] @
Ima mali bug:
Code (php):

 if($_POST['captchatext']==$_SESSION['3DCaptchaText']){
...
 

Sta ako ja posaljem post bez da sam otisao na stranicu gde se generise captcha?
Onda ce nista biti jednako nista i proci cu proveru.
[ krksi @ 17.03.2011. 12:09 ] @
pa dobro, onda samo proveri da li postoji $_SESSION['3DCaptchaText'] i to je to.

Ja sam mislio da ima problem sa prikazom smarty-ja i da to nece da radi, pa sam se na to fokusirao a ne na proveru.
[ krksi @ 17.03.2011. 12:26 ] @
p.s.
a i pogledaj malo bolje kod jer se

if($_POST['captchatext']==$_SESSION['3DCaptchaText'])

nece ni izvrsiti ako je $_POST['captchatext'] prazan
[ VladaSu @ 17.03.2011. 13:07 ] @
Nisi skontao sta sam mislio. Fali mu jedan elseif kod poslednje if-a. Bug nije vezan za njegov problem vec captcha moze da se probije.
Objasnicu ti preko $_GET-a jer je lakse.

Imas stranicu register.php gde kada odes dobijes u sesiji npr. $_SESSION['3DCaptchaText'] = 'abcd';
I onda ti moras da ukucas u $_GET['captchatext'] = 'abcd';

Sta se desva ako je ne odem na cist register.php vec direktno odmah i prvi put ukucam register.php?action=save_registration&name=Pera???????
Onda nece nista biti u $_SESSION['3DCaptchaText'] nece bit ni $_GET['captchatext'] i to je jednako i proci ce.



[ krksi @ 17.03.2011. 13:22 ] @
izgleda da te opet nisam skontao

nije mi jasno kako ce proci to jednako ako ne prodje prvo proveru u

!empty($_POST['captchatext']) ?

aj je $_POST['captchatext'] prazna, onda se ni $_POST['captchatext']==$_SESSION['3DCaptchaText'] nece ispitivati.
[ VladaSu @ 17.03.2011. 13:42 ] @
Pozivam se na njegov kod. Kroz tvoj nece proci. Moze da prodje ako se posle greske captcha ne isprazni...
A i izmedju ostalog te provere bi trebao da odredti u php-u a ne u tpl-u.
U tpl samo ispise greske.
[ krksi @ 17.03.2011. 13:50 ] @
ja sam mislio da pricamo o mom kodu ....

Citat:
VladaSu:A i izmedju ostalog te provere bi trebao da odredti u php-u a ne u tpl-u.
U tpl samo ispise greske.


slazem se, nego ja sam samo hteo da napravim pandan njegovom kodu, cisto da proba da li hoce tako da radi ili ne, jer koliko sam skontao, on je imao problem sa smartijem i nije hteo da ispisuje sesiju