Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] wyswietlanie miast wg liter
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
marianekxx
Witam wszystkich forumowiczow.
Jest to moj pierwszy post.

Mam problem z wyswietleniem danych w taki sposob jak na obrazku pod adresem: http://www.fotosik.pl/pokaz_obrazek/05e3d6851a9fac9b.html
Czyli wyswietlamy litere, a nastepnie w 3 kolumnach wyswietlamy nazwy maist dla dane litery.
Tylko tutaj wazna jest tez kolejnosc kolumn czyli:
1 2 3
4 5 6

a nie
1 3 5
2 4 6

O ile zrobienie tego bez szablonow smarty nei ejst zbyt trudne to ze smarty nie wiem jak to zrobic.

Mianowicie mam 2 tablice:
1. zawiera litery od a-z
  1. <?
  2. $tab_litery=array ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'Ś', 'T', 'U', 'W', 'Z', 'Ż');
  3. ?>

2. pobieram z bazy liste miast
  1. <?php
  2. $miasta= $db->get_results("SELECT * FROM miasta ORDER by miasta ", ARRAY_A);
  3. foreach($miasta as $m) {
  4.  
  5. .............
  6. }
  7. .................
  8. ?>

I teraz tak nie wiem czy do tablicy z nazwami miast dodac pole z litera miasta - czy zrobic to inaczej ?
Jak najpierw przygotowac dane (tablice) a pozniej wyswietlic je z pomoca smarty. ?

Poradzilem juz sobie z wyswietleniem danych w 3 kolumnach.
  1. <table>
  2. {section name=i loop=$miasta}
  3. {if $smarty.section.i.index is div by 3}<tr>{/if}
  4. <td>
  5. <a href="/miasto.php?id={$miasta[i].id}">{$miasta[i].nazwa}</a>
  6. </td>
  7. {if ($smarty.section.i.index+1) is div by 3}</tr>{/if}
  8. {/section}
  9. </table>
  10.  


Z gory dzieki za pomoc.
nospor
Cytat
I teraz tak nie wiem czy do tablicy z nazwami miast dodac pole z litera miasta - czy zrobic to inaczej ?
Najlepiej tablica w tablicy, gdzie najpierw idą litery a kazda litera zawiera miasta.
Tu o tym pisałem jak zrobic:
http://nospor.pl/grupowanie-wynikow.html
Przykład 2 - robi dokładnie to o co pytasz
marianekxx
Witam.
Dzieki za pomoc jednak mam z twoim przykladem maly problemik mianowicie do tablicy procz nazwa chcialbym przekazac z bazy dancyh jeszcze 2 pola: ID oraz WSPOLRZEDNE.
I nie wiem jak przeobic ten kod aby tym samym otrzymac tablice tego typu:

ze zamiast:
  1. [0] => Olecko
  2. [1] => Olsztyn


bedziemy mieli:

  1. [miasto] => Olecko
  2. [miasto] => Olsztyn


albo inaczej:
  1. [ID] => 2
  2. [miasto] => Olsztyn
  3. [wspolrzedne] = "23.555 45.5676767"


No i kolejnym problemem bedzie utowrzenie kodu szablonu SMARTY - jak tam zastosowac foreach albo lepiej section ?

Tak jak pisalem dopiero zaczynam ze smarty i z tablic tez sie ucze wiec prosze o wyrozumialosc.
Pozdrawiam
nospor
  1. //pobranie wszystkich danych
  2. $sql = 'select * from city '.
  3. 'order by NAME asc'; //sortujemy po nazwie
  4. $res = mysql_query($sql) or die(mysql_error());
  5.  
  6. //najpierw pozyskamy niezbędne dane
  7. $cities = array();
  8. while ($row = mysql_fetch_array($res)){
  9. $name = $row['NAME'];
  10.  
  11. //jeśli będziemy w bazie mieli miasta z nazwami zaczynającymi
  12. //się od polskich liter należy użyć modułu mb_string
  13. $firstLetter = strtoupper(substr($name,0,1));
  14.  
  15. //jeśli nie było jeszcze danej litery, to ją tworzymy
  16. if (!isset($cities[$firstLetter]))
  17. $cities[$firstLetter] = array();
  18.  
  19. //dodajemy kolejne miasta do danej litery
  20. $cities[$firstLetter][] = $row;
  21. }
  22. print_r($cities);

O to chodziło?

Co do smarty to będą dwa FOREACH. Jeden przeleci po literach a drugi po miastach w literach. Identyczna zasada jak w php (w kodzie co jest u mnie w arcie)
marianekxx
Witam.
Chodzilo mi o:
  1. $cities[$firstLetter][] = array('nazwa' => $st['nazwa'], 'name' => $name, 'id'=>$st['id']);
  2.  
  3.  
  4. //Ponadto uzylem aby polskie literki dobrze sortowalo
  5. mb_internal_encoding("UTF-8");
  6. $firstLetter = mb_substr($name,0,1);


I teraz mam problem z sortowaniem zarowno w skrypcie jak i phpmyadminie znakow cyrylicy ?
Moze jakies pomysly (sprawa tyczy sie dalej tych miast tylko w roznych wersjach jezykowych).
nospor
Przeciez to:
$cities[$firstLetter][] = array('nazwa' => $st['nazwa'], 'name' => $name, 'id'=>$st['id']);
to jest to samo co:
$cities[$firstLetter][] = $row;

Tylko, że moje krócej winksmiley.jpg
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-2024 Invision Power Services, Inc.