Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]czysty php - problem z pętlą foreach w smartach

Napisany przez: casperii 20.11.2019, 10:37:33

Panowie przejdę do rzeczy, otóż w czystych phpie mam kod który dziala:

  1. foreach (http://www.php.net/array($value['tablica']) as $row){
  2. http://www.php.net/echo $row['imie'] . ' - ' . $row['nazwisko'] . '<br>';
  3. }


natomiast już w smarcie pokazuje tylko pierwszy znak - wydaje mi się, że smarty odbiera to jako string a nie array i nie wiem jak zmusić w smartach by pokazywało całość:


  1. {foreach ...... }
  2. {foreach from=$var.tablica item="value"}
  3. {$value.imie}
  4. <br>
  5. {/foreach}
  6. {/foreach}


ktoś pomoże ?

Napisany przez: nospor 20.11.2019, 10:42:26

Chyba dokumentacja sie klania...
nie item="value"
a: item=value

Napisany przez: casperii 20.11.2019, 10:48:05

@nospor wydaje mi sie, że to nie ma większego znaczenia. Jak było tak jest nadal - tylko pierwszy znak



dodanie w foraech key="key"

  1. {$key} - > {$value} a teraz {$value.imie}


daje na outpucie:


imie => Jan a teraz J
nazwisko => Kowals a teraz K

Napisany przez: nospor 20.11.2019, 11:04:21

A pokaz caly kod bo mogles cos namieszac po drodze. Pokaz zarowno w php jak tworzysz te tablice i przypisujesz do smarty oraz calosc tego smarty bo widze masz tam petle jakas nad

ps: no skoro {$value} daje ci Jan to logiczne ze masz tam tylko tekst a nie tablice i ze {$value.imie} bedzie ci lecial po tekscie a nie po tablicy...

ps2: takze cos mi sie wydaje ze zamiast
{foreach from=$var.tablica item="value"}
{$value.imie}
<br>
{/foreach}

powinno byc poprostu
{$var.imie}
{$var.nazwisko}

Napisany przez: casperii 20.11.2019, 11:15:06

@nospor:

  1.  
  2. {foreach from=$link item=val key=i}
  3. {$val.name}
  4. <http://december.com/html/4/element/br.html>
  5. {foreach from=$val.Other item=var}
  6. {$var.fName}
  7. <http://december.com/html/4/element/br.html>
  8. {foreach key="key" from=$var.tablica item=value}
  9. {$value.imie}
  10. <http://december.com/html/4/element/br.html>
  11. {/foreach}
  12. <http://december.com/html/4/element/br.html>
  13. {/foreach}
  14. <http://december.com/html/4/element/br.html>
  15. {/foreach}


Napisany przez: nospor 20.11.2019, 11:19:09

nie
{foreach key="key" from=$var.tablica item=value}
{$key} => {$value} --- {$value.imie}
<br>
{/foreach}


a:
{$var.tablica.imie}
{$var.tablica.nazwisko}

Napisany przez: casperii 24.11.2019, 22:55:55

Dzięęęęęęęęękuje! jak zawsze bardzo mi pomogłeś smile.gif

@nospor a jeszcze takie pytanie, a co jeśli w:
{$var.tablica} mam więcej elementów (imion) ? to w jaki sposób mam to wyświetlić skoro foreachem mi pobiera tylko pierwszy znak ?

Napisany przez: Tomplus 25.11.2019, 07:14:45

@casperii
Nie wiem czy zauważyłeś, ale FOREACH to jest pętla, więc wyświetli ci wszystkie imiona które są w $var.tablica.

Napisany przez: nospor 25.11.2019, 12:33:48

Cytat
to w jaki sposób mam to wyświetlić skoro foreachem mi pobiera tylko pierwszy znak
oj zes sie uczepil tego pierwszego znaku.... miales wtedy pierwsze znaki bo leciales po tekscie a nie tablicy. Sadzilem ze juz to przerobilismy.

Skoro masz wiecej imion to jak je teraz dodajesz? Bo przeciez nei wkladasz wszystkie ciagle w index IMIE bo nadpisujesz jeden za drugim. Pokaz nowa strukture

Napisany przez: casperii 26.11.2019, 14:52:30

@Tomplus to ja wiem co to jest foreach - i nawet tak miałem - tyko , że po przekazaniu do smarty (TPL) - chwyta mi to jako string i lecąc foreachem pokazuje mi pierwszą literkę.

Dobra zacznijmy od początku bym miał pewność , że dobrze rozumiem / robię to:

PHP:

  1. <?php
  2.  
  3. $tablica = http://www.php.net/array();
  4. while($row = $sql->fetch(PDO::FETCH_ASSOC)){
  5. $nrAuto = $row['nrAuto'];
  6.  
  7. if (!http://www.php.net/isset($tablica[$nrAuto]))
  8. $tablica[$nrAuto] = http://www.php.net/array(
  9. 'name' => $row['name'],
  10. 'nrAuto' => $row['nrAuto'],
  11. 'model' => http://www.php.net/array()
  12. );
  13.  
  14. if (!http://www.php.net/empty($row['auto']))
  15. $tablica[$auto]['model'][] = http://www.php.net/array(
  16. 'desc' => $row['desc'],
  17. 'kolor' => http://www.php.net/array(
  18. 'newId' => $row['newid'],
  19. 'descTwo' => $row['descTwo']
  20. )
  21. );
  22. }
  23.  
  24.  
  25.  
  26. foreach ($tablica as $idCat => $val){
  27. http://www.php.net/echo '<strong>' . $val['nrAuto'] . ' - ' . $val['name'] . ' - ' . $val['model'] . '</strong>';
  28. foreach ($val['model'] as $value){
  29. http://www.php.net/echo $value['desc'] . ' - ' . $value['kolor'] . '<br>';
  30.  
  31. foreach (http://www.php.net/array($value['model']) as $row3){
  32. http://www.php.net/echo $row3['newId'] . ' - ' . $row3['descTwo'] . '<br>';
  33. }
  34. }
  35. http://www.php.net/echo '<br><br>';
  36. $link[] = $val;
  37. }
  38. }
  39. ?>


Uzyskujemy tablice:
O ile w (powtórzę ponownie) czystym phpie działa tak przerzuceniu do tpl - nie działa jak trzeba.
Zdaje sobie sprawę , że smarty ostatnią petlę widzi jako string a nie array - tylko czy w smartach istnieje konwersja stringa do array ?


  1. foreach ([b]http://www.php.net/array([/b]$value['model'][b])[/b] as $row3){
  2. http://www.php.net/echo $row3['newId'] . ' - ' . $row3['descTwo'] . '<br>';
  3. }




Napisany przez: nospor 26.11.2019, 15:56:47

Juz ci mowilem: smarty widzic cos jako tekst, tylko dlatego ,ze tekst mu zapodajesz. Zrozum to w koncu. Nie zwalaja winy na smarty gdy sam nie ogarniasz za bardzo co masz

Kolejna sprawa: nie wkladaj BBCODE (pogrubienia) w kod php, bo tylko zaciemniasz kod....

Trzecia sprawa: nie podales jak to w smarty to obrabiasz

No i poczwarte: nie, w php tez to ci nie dziala. Przechodzi ci ten kod w php, tylko dlatego ze czyste stare php jest mniej restrykcyjne niz smarty. W tym "czystym" php stworzyles niestety pare bledow

Takze podsumowujac: przestan szukac w winy w smarty. Zacznij wpierw moze zrozumiec, jak wyglada twoja struktura danych, bo z tym masz niesamowity problem

Dobra, zebym nei byl goloslowny

  1. foreach ($tablica as $idCat => $val){
  2. http://www.php.net/echo '<strong>' . $val['nrAuto'] . ' - ' . $val['name'] . ' - ' . $val['model'] . '</strong>'; //!!!!! $val['model'] to tablica. Po grzyba wkladasz to do tekstu? Przeciez to ci da tekst 'array' i nic wiecej
  3. foreach ($val['model'] as $value){
  4. http://www.php.net/echo $value['desc'] . ' - ' . $value['kolor'] . '<br>'; //!!!!! $value['kolor'] to tablica. Po grzyba wkladasz to do tekstu? Przeciez to ci da tekst 'array' i nic wiecej
  5.  
  6. foreach (http://www.php.net/array($value['model']) as $row3){ //!!!!$value['model'] wogole nie istnieje!!!!. A ty jeszcze robic z tego tablicu w rezultacie otrzymasz array(null) .... caly ten foreach jest totalnie zbedny!!
  7. http://www.php.net/echo $row3['newId'] . ' - ' . $row3['descTwo'] . '<br>';
  8. }
  9. }
  10. http://www.php.net/echo '<br><br>';
  11. $link[] = $val;
  12. }



A o to poprawny kod php
  1. foreach ($tablica as $idCat => $val){
  2. http://www.php.net/echo '<strong>' . $val['nrAuto'] . ' - ' . $val['name'] . ' - MODELE:</strong>';
  3. foreach ($val['model'] as $value){
  4. http://www.php.net/echo $value['desc'] . ' - KOLORY:<br>';
  5. http://www.php.net/echo $value['kolor']['newId'] . ' ' . $value['kolor']['descTwo'] . '<br>';
  6. }
  7. http://www.php.net/echo '<br><br>';
  8. }


Prosze, majac ten POPRAWNY kod php, moze w koncu bez problemu przeniesiesz to do smarty, bez tworzenia sztucznych pustych tablic itp


I sprobuj tez zapamietac (a juz to przerabialismy w pierwszym kodzie z poczatku twojego tematu), ze nie pokazdej tablicy sie iteruje FOREACH.
np tutaj:
$value['kolor']['newId']
juz sie nie tworzy dodatkowego FOREACH jak to probowales nieudolnie zrobic. Jak znasz indeksy, ktore chcesz wyciagnac to FOREACH jest zbedny. FOREACH jest tyko dla danych DYNAMICZNYCH

A, i jeszcze jedno bardzo wazne:
Wlacz wyswietlanie wszystkich bledow

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)