2013-06-14 3 views
0

Je suis en train de comprendre le développement d'applications web avec PHP et Smarty this is the bookSmarty pas clair

il y a un fichier departments_list.tpl

{* departments_list.tpl *} 
{load_presentation_object filename="departments_list" assign="obj"} 
{* Start departments list *} 

<div class="box"> 
    <p class="box-title">Choose a Department</p> 
    <ul> 
     {* Loop through the list of departments *} 
     {section name=i loop=$obj->mDepartments} 
     {assign var=selected value=""} 
     {* Verify if the department is selected to decide what CSS style to use *} 
     {if ($obj->mSelectedDepartment == $obj->mDepartments[i].department_id)} 
     {assign var=selected value="class=\"selected\""} 
     {/if} 
     <li> 
     {* Generate a link for a new department in the list *} 
     <a {$selected} href="{$obj->mDepartments[i].link_to_department}"> 
     {$obj->mDepartments[i].name} 
     </a> 
     </li> 
     {/section} 
    </ul> 
</div> 
{* End departments list *} 

Je ne comprends pas dans le fichier ci-dessus d'une ligne qui est

 {section name=i loop=$obj->mDepartments} 

comment fonctionne name=i fonctionne I ce qui est j'initialisés à et comment un départ de la boucle de i,

en second fichier ci-dessus utilise un fichier function.load_presentation_object.php

<?php 
// Plug-in functions inside plug-in files must be named: smarty_type_name 
function smarty_function_load_presentation_object($params, $smarty) 
     { 
     require_once PRESENTATION_DIR . $params['filename'] . '.php'; 
     $className = str_replace(' ', '',ucfirst(str_replace('_', ' ',$params['filename']))); 
     // Create presentation object 
     $obj = new $className(); 
     if (method_exists($obj, 'init')) 
     { 
     $obj->init(); 
     } 
     // Assign template variable 
     $smarty->assign($params['assign'], $obj); 
     } 
?> 

dans le fichier ci-dessus un paramètre $ params a été utilisé dans la dernière ligne

 $smarty->assign($params['assign'], $obj); 

pour autant que je peux comprendre à partir du fichier departments_list.tpl passe sur le paramètre à function.load_presentation_object.php comme

{load_presentation_object filename="departments_list" assign="obj"} 

donc lorsque le suivi est appelé

function smarty_function_load_presentation_object($params, $smarty) 

$ params = depratments_list et smarty $ = obj

Alors, comment $ smarty-> assign ($ params [ 'assign'], $ obj);

que fait $ params ['affecter'] ci-dessus?

Répondre

1
{load_presentation_object filename="departments_list" assign="obj"} 

traduit en php sera:

smarty_function_load_presentation_object(
    array(
     'filename' => 'departments_list', 
     'assign' => 'obj' 
    ), 
    $smarty 
); 

Tous les paramètres spécifiés dans Smarty sont passés comme tableau associatif en premier argument. Deuxième est toujours l'objet smarty actuel.

Quant à

{section name=i loop=$obj->mDepartments} 

est simple boucle for:

for ($i=0; $i < count($obj->mDepartments); $i++) { 
    $current = $obj->mDepartments[$i]; 
} 
+0

Merci pour l'explication '{section name = I' je n'ai pas donné i = 0 et plus au-dessus est le nom de la section si j'ai bien compris ici http://www.smarty.net/docsv2/fr/language.function.section.tpl ou est-ce une convention que quel nom jamais pointera dans ce cas le nom = i alors je dois commencer par 0 –

+1

Désolé pour une explication trompeuse - 'i' est le nom de la section, pas une valeur entière dans smarty. 'i' (notez que ceci est utilisé sans' $ ') pointera la section nommée et retournera l'index actuel. Si vous voulez partir d'un index autre que 0, utilisez 'start = 2' comme paramètre de section. –

+0

ok merci pour l'info –