Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][CSS]Podział wyników z zapytania
Forum PHP.pl > Forum > Przedszkole
lukko
Witam,


Kod
print '<div style="float: left; height: 25px;">';
print '<a href="index.php?id='. $numer .'">'. $nazwa .'</a>.' "><br>';
print '</div>';


Ten wycinek kodu wyświetla mi zbiór linków pobranych z bazy.

Ale paskudnie się to wyświetla. Jak zrobić by wyświetliło się 10 linków w jednej tabeli czy tam divie, kolejne 10 w tabeli obok itd.
thek
Choćby tak, że określisz szerokość tego diva i co X rekordów go zamkniesz otwierając nowy. Oczywiście divy też będą mieć float nadany. By to zobrazować:
  1. <div style="width:250px; float:left">
  2. <a href="link">link</a>
  3. <a href="link">link</a>
  4. <a href="link">link</a>
  5. <a href="link">link</a>
  6. <a href="link">link</a>
  7. </div>
  8. <div style="width:250px; float:left">
  9. <a href="link">link</a>
  10. <a href="link">link</a>
  11. <a href="link">link</a>
  12. <a href="link">link</a>
  13. <a href="link">link</a>
  14. </div>
grassmen
A ja bym to wziął w pętle (for lub dowolną) zapiął tabelę wyświetlił i co i=10 czy ile tam chcesz zamknął <tr> lub całą <table>
lukko
thet tak to nie bo te linki mi z bazy lecą:
  1. while ($rekord = mysql_fetch_assoc ($wynik)) {
  2. $numer = $rekord['id_numer'];
  3. $nazwa = $rekord['nazwa'];
  4.  
  5.  
  6. print '<div style="float: left; height: 25px;">';
  7. print '<a href="index.php?id='. $numer .'">'. $nazwa .'</a><br>';
  8. print '</div>';
  9. }
  10.  


grassmen zgadza się jakąś pętlą, tylko nie mogę tego ogarnąć do końca snitch.gif

Ma ktoś jakiś przykład?
exood
Cytat
  1. while ($rekord = mysql_fetch_assoc ($wynik)) {
  2. $numer = $rekord['id_numer'];
  3. $nazwa = $rekord['nazwa'];
  4.  
  5.  
  6. print '<div style="float: left; height: 25px;">';
  7. print '<a href="index.php?id='. $numer .'">'. $nazwa .'</a><br>';
  8. print '</div>';
  9. }
  10.  


  1. $i = 0;
  2. $ile = ceil(count($wynik));
  3. //$ile = ceil(mysql_num_rows($wynik));
  4. while ($rekord = mysql_fetch_assoc ($wynik)) {
  5. $i++;
  6. $numer = $rekord['id_numer'];
  7. $nazwa = $rekord['nazwa'];
  8.  
  9.  
  10. print '<div style="float: left; height: 25px; width: 50%;">';
  11. print '<a href="index.php?id='. $numer .'">'. $nazwa .'</a><br>';
  12. if($i == $ile){
  13. print '</div><div style="float: left; height: 25px; width: 50%;">';
  14. }
  15. print '</div>';
  16. }
  17.  


wyświetlanie w dwóch kolumnach.
lukko
OK super a jak bym chciał na warunek: max 10 linków w jednej kolumnie i jak przekroczy to tworzy nową kolumnę z max10 linkami itd...
thek
A co to za problem, by całość leciała w pętli? Ja Ci tylko zaprezentowałem jak ma wyglądać kod html w źródle strony, nie że tak ma być na sztywno w pliku php. To jak zrealizujesz te operacje zależy od wyobraźni i stopnia separacji kodu od prezentacji. Albo w pętli while robisz generowanie kodu, albo pakujesz to do 2 wymiarowej tablicy pokroju:
  1. $podzial = array( [0] => array(tutaj_10_linków), [1] => array(tutaj_10_linków), [2] => array(tutaj_10_linków) )

i dopiero w widoku całość wrzucasz w html wedle upodobań. Zwracając uwagę na fakt, że te 10 dla ostatniego elementu tablicy to tylko wartość maksymalna i może być wyników 5 choćby. tak więc widok zrobi Ci wtedy count( $podzial ) floatowanych divów, które w pętli while wyświetlą wszystkie linki zawarte w $podzial[0], $podzial[1] itd.

Zauważ, że exood zaproponował Ci rozwiązanie, które podałem jako pierwsze, czyli z mieszaniem kodu php i html.
Noż ludzie. Trochę własnego myślenia, a nie czekanie na podanie kodu na tacy mad.gif
exood
Cytat(lukko @ 24.02.2010, 10:32:05 ) *
OK super a jak bym chciał na warunek: max 10 linków w jednej kolumnie i jak przekroczy to tworzy nową kolumnę z max10 linkami itd...


  1. $i = 1;
  2. while ($rekord = mysql_fetch_assoc ($wynik)) {
  3. $i++;
  4. $numer = $rekord['id_numer'];
  5. $nazwa = $rekord['nazwa'];
  6.  
  7.  
  8. print '<div style="float: left; height: 25px;">';
  9. print '<a href="index.php?id='. $numer .'">'. $nazwa .'</a><br>';
  10. if($i == 10){
  11. $i = 1;
  12. print '</div><div style="float: left; height: 25px;">';
  13. }
  14. print '</div>';
  15. }
  16.  


z tym że jak chcesz wyświetlać obok siebie jak ci się trafi długa lista to ci się nie zmieści wszystko...
thek
No to niech nada temu floatowanemu divowi zawierającemu linki szerokość jak ja zrobiłem na 250px w przykładzie + skracanie anchor textu linka by się w 250px mieścił, a na bank kilka kolumn wejdzie. No i pamiętaj exood, że linków może być 56, a Ty dzielisz tylko po 10 linkach. Tu trzeba użyć modulo, które po 10 zrobi tę nową kolumnę smile.gif Inna sprawa, że zrobienie tego na końcu pętli przy pełnych dziesiątkach w stylu 30, 60, 110 zrobi jedna kolumnę kompletnie pustą. Tworzenie nowej kolumny musi być na samym początku while i w przypadku liczby w stylu limit+1, czyli 41, 111, 241 tworzyło by nową kolumnę, zamykając jednocześnie starą. Jak?
  1. <div style="float:left; width:250px">
  2. <?php
  3. $limit = 10;
  4. $i = 1;
  5. while( $wyniki ) {
  6. if($i > $limit AND $i%10 == 1) {
  7. echo '</div><div style="float:left; width:250px">';
  8. }
  9. echo 'tutaj robisz te linki swoje';
  10. $i++;
  11. }
  12. ?>
  13. </div>
Tylko nie pisz, że nie działa. Specjalnie tak zrobiłem byś dostosował mój przykład do swoich potrzeb, a nie kopiuj-wklej. I warunek if MUSI tak być, by nie zamknęło pierwszego div od razu, bo usunięcie sprawdzenia $limit w stosunku do $i zrobi Ci pierwszą kolumnę pustą. Stąd $i musi być większe niż $limit, czyli pierwszy if wykona się przy wierszu limit + 1 a nie od razu pierwszym smile.gif Po prostu programuj więcej i myśl trochę.
exood
Cytat(thek @ 24.02.2010, 11:25:39 ) *
No i pamiętaj exood, że linków może być 56, a Ty dzielisz tylko po 10 linkach.


pisałem na szybko i mi umknęła jedna linijka winksmiley.jpg już poprawione
lukko
Podziękować:
  1. print '<div style="float:left; width:250px">';
  2. $limit = 10;
  3. $i = 1;
  4. while( $rekord = mysql_fetch_assoc ($wynik1)) {
  5. $numer = $rekord['id_numer'];
  6. $nazwa = $rekord['nazwa'];
  7. if($i > $limit AND $i%10 == 1) {
  8. echo '</div><div style="float:left; width:250px">';
  9. }
  10. echo '<a href="index.php?id='. $numer .'">'. $nazwa .'</a><br>';
  11. $i++;
  12. }
  13. print '</div>';


thek
Tylko pamiętaj o jednym... Następny element ZA tymi divami niech ma clear:both bo inaczej trochę więcej na stronie zacznie Ci "pływać" biggrin.gif
lukko
Nie no spoko linków jest 85, jeszcze numeracje tych linków potrzebuje tongue.gif ale już se włączę tą myślącą biggrin.gif i pętelkę pomęczę 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.