Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [smarty] wyswietlanie miast wg liter
marianekxx
post 16.12.2010, 13:47:22
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 16.12.2010

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


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.

Ten post edytował marianekxx 16.12.2010, 14:35:23
Go to the top of the page
+Quote Post
nospor
post 16.12.2010, 15:00:31
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"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
marianekxx
post 16.12.2010, 15:28:56
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 16.12.2010

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


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
Go to the top of the page
+Quote Post
nospor
post 16.12.2010, 18:44:39
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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)


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

"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
marianekxx
post 17.12.2010, 01:31:26
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 16.12.2010

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


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).
Go to the top of the page
+Quote Post
nospor
post 17.12.2010, 07:01:39
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


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

"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: 21.06.2025 - 04:12