Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]czysty php - problem z pętlą foreach w smartach, pokazuje pierwszy znak
casperii
post 20.11.2019, 10:37:33
Post #1





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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

  1. foreach (array($value['tablica']) as $row){
  2. 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 ?

Ten post edytował casperii 20.11.2019, 10:38:00
Go to the top of the page
+Quote Post
nospor
post 20.11.2019, 10:42:26
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
casperii
post 20.11.2019, 10:48:05
Post #3





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


@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

Ten post edytował casperii 20.11.2019, 10:51:43
Go to the top of the page
+Quote Post
nospor
post 20.11.2019, 11:04:21
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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}


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
casperii
post 20.11.2019, 11:15:06
Post #5





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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



Ten post edytował casperii 20.11.2019, 11:36:18
Go to the top of the page
+Quote Post
nospor
post 20.11.2019, 11:19:09
Post #6





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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


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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
casperii
post 24.11.2019, 22:55:55
Post #7





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
Tomplus
post 25.11.2019, 07:14:45
Post #8





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post
nospor
post 25.11.2019, 12:33:48
Post #9





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
casperii
post 26.11.2019, 14:52:30
Post #10





Grupa: Zarejestrowani
Postów: 680
Pomógł: 28
Dołączył: 14.08.2014

Ostrzeżenie: (0%)
-----


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



Go to the top of the page
+Quote Post
nospor
post 26.11.2019, 15:56:47
Post #11





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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. 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. 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 (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. echo $row3['newId'] . ' - ' . $row3['descTwo'] . '<br>';
  8. }
  9. }
  10. echo '<br><br>';
  11. $link[] = $val;
  12. }



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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 10:38