Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z smarty
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
gandziorz
Witam,
Chciałem w smarty użyć formy która wyświetla preferencje.
W SMARTY (w *.tpl) użyłem:
  1. {section name=preferencje loop=$preferencje.id}
  2. <input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
  3. {/section}

W php:
  1. <?php
  2. $query = "SELECT * FROM `preferencje` ORDER BY `id`";
  3. $result = mysql_query($query);
  4. $preferencje = array ();
  5. while ($row = mysql_fetch_array($result)){
  6. $preferencje['id'] = $row['id'];
  7. $preferencje['nazwa']= $row['nazwa'];
  8. }
  9. $smarty->assign('preferencje', $preferencje);
  10. ?>

Wszystko OK bo pokazuje 7 <input... a 7 jest w bazie. Tylko że w tych 7 zawsze jest ostatnia kategoria jaka jest w bazie. A nie 1,2,3,4,5,6.
Zobaczcie sami:
http://www.newptr.xorg.pl/dodaj.html
Sabistik
Przenoszę na gotowe rozwiązania.
AxZx
w petli while w php zrob
  1. <?php
  2. $preferencje[]['id'] = $row['id'];
  3. $preferencje[]['nazwa']= $row['nazwa'];
  4. ?>
gandziorz
Cytat(AxZx @ 6.01.2007, 19:35:45 ) *
w petli while w php zrob
  1. <?php
  2. $preferencje[]['id'] = $row['id'];
  3. $preferencje[]['nazwa']= $row['nazwa'];
  4. ?>

No i mi wcale nic nie wyświetla.
AxZx
no bo w szablonie masz
Kod
{section name=preferencje loop=$preferencje.id}
<input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
{/section}


zamiast
Kod
{section name=preferencje loop=$preferencje}
<input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
{/section}
gandziorz
Cytat(AxZx @ 6.01.2007, 20:11:20 ) *
no bo w szablonie masz
Kod
{section name=preferencje loop=$preferencje.id}
<input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
{/section}


zamiast
Kod
{section name=preferencje loop=$preferencje}
<input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
{/section}

Poprawiłem ale i tak nie wyświetla się w kodzie ani nazwa ani id.
  1. <?php
  2. $query = "SELECT * FROM `preferencje` ORDER BY `id`";
  3. $result = mysql_query($query);
  4. $preferencje = array ();
  5. while ($row = mysql_fetch_array($result)){
  6. $preferencje[]['id'] = $row['id'];
  7. $preferencje[]['nazwa']= $row['nazwa'];
  8. }
  9. ?>

Smarty:
  1. <?php
  2. {section name=preferencje loop=$preferencje}
  3. <input type=checkbox name="{$preferencje.id}" {if $frm.preferencje.id}checked{/if}>{$preferencje.nazwa}<br>
  4. {/section}
  5. ?>
ikioloak
1. sprawdz przez print_r w kodzie php przed dodawaniem do szablonu czy aby na pewno tablica ma taka zawartosc jak chcesz.

2. zobacz w manualu smarty jak wyglada instrukcja section:
Kod
{section name=customer loop=$custid}
  id: {$custid[customer]}<br />
{/section}

Dostrzegasz roznice? smile.gif
AxZx
co do 1 podpowiedzi to sie zgadzam:)
zanim cokolwiek na forum czlek napisze powinien umiec sam sprawdzic co moze byc nie tak.

co do 2 to nie zgodze sie ze tylko tak mozna

tak tez jest dobrze:
Kod
{section name=customer loop=$custid}
  id: {$custid.customer}<br />
{/section}
gandziorz
Cytat(ikioloak @ 6.01.2007, 20:45:04 ) *
1. sprawdz przez print_r w kodzie php przed dodawaniem do szablonu czy aby na pewno tablica ma taka zawartosc jak chcesz.

2. zobacz w manualu smarty jak wyglada instrukcja section:
Kod
{section name=customer loop=$custid}
  id: {$custid[customer]}<br />
{/section}

Dostrzegasz roznice? smile.gif

Tak tylko jak ktoś zacznie wysyłać ($_POST) to będzie musiał od nowa zaznaczać jak coś źle wypełnił.
ikioloak
AxZx nie wiem co tym kodem chcesz osiagnac. Poprawnym rozwiazaniem tutaj bedzie wg mnie:
Kod
{section name=i loop=$preferencje}
<input type=checkbox name="{$preferencje[i].id}">{$preferencje[i].nazwa}<br>
{/section}

pomijajac to checked bo nie wiem co reprezentuje $frm
AxZx
oczywiscie sie z toba nie zgadzam

mozna tak i tez bedzie dobrze
Kod
{foreach item=dane from=$dane_z_php}
<input value="{$dane.id}" name="{$dane.name}" />
{/foreach}


Cytat
Tak tylko jak ktoś zacznie wysyłać ($_POST) to będzie musiał od nowa zaznaczać jak coś źle wypełnił.


mozesz utworzyc tablice z ID ktore wybral user w formularzu
przeslac ja do szablonu smarty i w petli ktora wyswietla te checkboxy sprawdzac czy id z petli jest w tablicy z id zaznaczonych checkboxow.
ikioloak
Cytat(AxZx @ 6.01.2007, 21:55:38 ) *
oczywiscie sie z toba nie zgadzam

mozna tak i tez bedzie dobrze
Kod
{foreach item=dane from=$dane_z_php}
<input value="{$dane.id}" name="{$dane.name}" />
{/foreach}

(...)

AxZx krecisz. Wiem jak dziala foreach. Wczesniej byla mowa o section i z section dales przyklad.
Kubus
Ja bym zrobila tak winksmiley.jpg
Cytat
  1. <?php
  2. array_push ($preferencje['id']) = $row['id'];
  3. array_push ($preferencje['nazwa']) = $row['nazwa'];
  4. ?>

I chyba w samym szablonie masz blad, ale koledzy pomagaja smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.