Eksperymentuję ze Smartym, ale mam problemy z pętlą foreach, nie działa i nie mogę zrozumieć, dlaczego. Oto mój kod:

Default.tpl

    <select name="user">
    {html_options values=$id output=$names selected="5"}
</select>

<table>
{foreach $names as $name}
{strip}
   <tr bgcolor="{cycle values='#eeeeee,#dddddd'}">
      <td>{$name}</td>
   </tr>
{/strip}
{/foreach}
</table>

<table>
{foreach $users as $user}
{strip}
   <tr bgcolor="{cycle values='#aaaaaa,#bbbbbb'}">
      <td>{$user.name}</td>
      <td>{$user.phone}</td>
   </tr>
{/strip}
{/foreach}
</table>

I default.php

<?php

include('Smarty.class.php');

//create object
$smarty = new Smarty;

$smarty->template_dir = 'C:\xampp\htdocs\smarty\templates';
$smarty->config_dir = 'C:\xampp\htdocs\smarty\config';
$smarty->cache_dir = 'C:\xampp\php\smarty\cache';
$smarty->compile_dir = 'C:\xampp\php\smarty\templates_c';

$smarty->assign('names', array('Bob', 'Jimmy', 'Freddy', 'Walter', 'Jerry'));

$smarty->assign('users', array(
                        array('name' => 'bob', 'phone' => '555-3425'),
                        array('name' => 'jim', 'phone' => '555-4364'),
                        array('name' => 'joe', 'phone' => '555-3422'),
                        array('name' => 'jerry', 'phone' => '555-4973'),
                        array('name' => 'fred', 'phone' => '555-3235')
));

//display information
$smarty->display('default.tpl');
?>

Podczas testowania otrzymuję następujący błąd:

Błąd krytyczny: Błąd Smarty: [w default.tpl wiersz 16]: błąd składni: nieprawidłowa nazwa atrybutu: '$names' (Smarty_Compiler.class.php, wiersz 1550) w C:\xampp\php\Smarty\libs\Smarty. class.php w wierszu 1094.

To samo dzieje się z $users. Ponieważ wiem, że wartości przemijają, bo to działa, nie mogę zrozumieć, co się dzieje.

Z góry dziękuję.

Edycja: wziąłem ten przykład ze strony smarty.

0
Cláudio Ribeiro 27 wrzesień 2012, 18:31

2 odpowiedzi

Najlepsza odpowiedź

Wygląda na to, że przykład na stronie smarty nie działa. Oto, co musiałem zrobić, aby działało:

    <table>
    {foreach from=$names item=name}
    {strip}
       <tr bgcolor="{cycle values='#eeeeee,#dddddd'}">
          <td>{$name}</td>
       </tr>
    {/strip}
    {/foreach}
</table>

<table>
    {foreach from=$users item=user}
    {strip}
       <tr bgcolor="{cycle values='#aaaaaa,#bbbbbb'}">
          <td>{$user.name}</td>
          <td>{$user.phone}</td>
       </tr>
    {/strip}
    {/foreach}
</table>
1
Cláudio Ribeiro 27 wrzesień 2012, 18:46
{foreach name=$names}
.
.
.
.
<td> {$name} </td>

Tak to działa. Nigdy nie próbowałem sposobu, w jaki używałeś foreach w smarty.

1
geekman 27 wrzesień 2012, 18:38