Tabel splitsen en meerdere pagina's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Jan Koehoorn

Jan Koehoorn

23/08/2022 18:30:51
Quote Anchor link
Ray Mond op 23/08/2022 18:28:52:
Wat ik begrijp gaat dat om aantal items en dan welke pagina en dan naar de volgende pagina toch?


Nee. Die regel zorgt ervoor dat op een pagina van 30 items er na nr 10 en nr 20 een tussen-lijn geprint wordt.
 
PHP hulp

PHP hulp

05/10/2022 00:46:31
 
- Ariën  -
Beheerder

- Ariën -

23/08/2022 18:39:32
Quote Anchor link
Eigenlijk wel grappig, want je liet eerst al zien dat je de rijen om en om kleurt, met deze code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if($i%2 == 0)
    {

        $color = "row1"; // Kleur 1
    }
    else
    {
        $color = "row2"; // Kleur 2
    }
?>


Die code kan je dan met een kleine aanpassing ook gebruiken voor het splitsen van de een rij om tussen elke tien records een advertentie te tonen. Los van dat kan je rijen ook prima met CSS om-en-om kleuren.
Gewijzigd op 23/08/2022 18:40:28 door - Ariën -
 
Ray Mond

Ray Mond

23/08/2022 18:43:29
Quote Anchor link
@Jan dat is inderdaad wel wat ik wou dat de hele tabel zichtbaar is, 10 records aangeeft, vervolgens een stuk voor de advertentie wat Ariën aangeeft...

Bij die van jou Jan vraag ik me dan af hoe ik die er precies tussenkrijg en de manier wat Ariën inderdaad aangeeft klopt, zo gebruik ik het nu voor de kleuren maar om dan een heel tabel te doen????

Sorry dat het misschien wat 'dom' overkomt ... ik snap best wel haha maar hier heb ik toch wat moeite mee geloof ik :)
 
Ivo P

Ivo P

23/08/2022 18:52:24
Quote Anchor link
Bij je kleurtjes kijk je of een getal deelbaar is door 2 ( $i % 2 geeft rest 0).

Nu wil je om de 10 regels iets doen.
Dus dan zou je willen weten of de teller $i deelbaar is door 10.

En in dat geval voeg je een </table> toe.

En als je daarna checkt of $i % 10 gelijk is aan 1 (dus je hebt regel 11) dan weet je dat je een <table> nodig hebt.
En dat geldt precies zo voor teller = 1, of 21.

(aangenomen dat je teller bij 1 begint te tellen.
Begin je met $1 =0, dan moet je dus je tabel afsluiten bij $i % 10 === 9 en beginnen als $i % 10 === 0)
 
Ray Mond

Ray Mond

23/08/2022 18:55:31
Quote Anchor link
De teller begint inderdaad bij 1 dat klopt helemaal, maar ik dacht zelf dat ik dan de tabel echt zou moeten verdelen in 3 stuks? Aangezien ik er dan advertentieruimte tussen wil hebben.

Wanneer ik het doe met </table> dan komt er natuurlijk niet iets tussen toch?
 
Jan Koehoorn

Jan Koehoorn

23/08/2022 19:57:48
Quote Anchor link
Mijn vorige voorbeeld, iets aangepast zodat het met <table> tags werkt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$get
        = (object) $_GET;
$pag_size   = 30;
$group_size = 10;

if ( ! empty($get->pag)) {
    $number_first = ($get->pag - 1) * $pag_size + 1;
    $number_last  = $number_first + $pag_size;
}

?>


<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style>
        body {font: 14px Verdana;}
        table { border-collapse: collapse; border: 1px solid #666; margin:  10px 0;}
        td { padding: 8px; }
    </style>
</head>

<body>
<?php
if ( ! empty($number_first)) {
    printf('<table>');
    for ($i = $number_first; $i < $number_last; $i++) {
        printf('<tr><td>This is item nr:</td><td> %d</td></tr>', $i);

        if ($i % $group_size === 0 && ($pag_size * $get->pag) !== $i) {
            printf('</table><table>');
        }
    }

    printf('</table>');
}

?>

</body>

</html>


Edit:
Nog een tip: je kunt table-rows heel makkelijk om en om kleuren met deze simpele CSS regel. Geen php logica voor nodig dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
tr:nth-child(even) { background: lightblue; }
Gewijzigd op 23/08/2022 20:01:49 door Jan Koehoorn
 
Ray Mond

Ray Mond

23/08/2022 20:07:12
Quote Anchor link
Ik snap ergens bovenstaande code wel maar dan loop ik natuurlijk tegen het volgende aan...

Tussen de tables door wou ik advertentie ruimtes maken... die kan ik hier nu natuurlijk niet tussenplaatsen dan toch?
 
- Ariën  -
Beheerder

- Ariën -

23/08/2022 21:30:49
Quote Anchor link
Waarom zou dat niet kunnen?
je hoeft eigenlijk je tabel niet te beëindigen. Je kan ook een colspan op je td plaatsen als het steeds het tiende item is.
 
Ivo P

Ivo P

24/08/2022 08:52:36
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
  function include_ad()
  {

       echo '<div>advertentie</div>';
  }

?>
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title></title>
    <style>
        body {font: 14px Verdana;}
        table { border-collapse: collapse; border: 1px solid #666; margin:  10px 0;}
        td { padding: 8px; }
    </style>
</head>

<body>
<?php
  $maxregels
= 10;
 
   $i = 0;
   while ($row = $return->fetch_object()) :
      $i++;
      if($i % $maxregels === 1) {
          <
table>
      }
  
   ?>

   <tr>
      <td><?= $i ?></td>
      <td>je data uit $row</td>
   </tr>
   <?php  if($i % $maxregels === 0) : ?>
      </tabel>
       <?php include_ad() ?>
   <?php endif ?>

<?php
   endwhile;
   // hadden we mogelijk de tabel nog niet afgesloten wegens bijv. 15 records?
   if($i % $maxregels !== 0) : ?>

    </table>
   endif; ?>

?>

</body>

</html>
Gewijzigd op 24/08/2022 09:32:09 door Ivo P
 
Ad Fundum

Ad Fundum

24/08/2022 09:32:39
Quote Anchor link
Gaat het niet een beetje ver om modulo uit te leggen terwijl de operator ('%') ook gewoon in de PHP handleiding staat?
https://www.php.net/manual/en/language.operators.arithmetic.php

Ray Mond op 23/08/2022 20:07:12:
[...]Tussen de tables door wou ik advertentie ruimtes maken[...]

Hoe het resultaat moet worden hangt af van of je de advertenties als een rij in de tabel wilt hebben, of dat je echt de hele tabel wilt afsluiten en na de advertentie een nieuwe tabel wilt beginnen. Visueel hoeft het geen verschil te maken, maar 'men' heeft lang geleden bedacht dat HTML-tabellen niet voor opmaak gebruikt mogen worden. Als je dat gewoon lekker wel doet, kan je in de foreach lus iets als dit opnemen (let op, incomplete pseudo code!):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
let mut index = 0;
let ads = 10;
for rij in data {
  buffer.push_str("<tr>[inhoud van rij]</tr>");
  if (index % ads) == 0 {
    buffer.push_str("<tr><td colspan="4">[advertentie]</td></tr>");
  }
  index += 1;
}
?>

Het gaat even om het idee. Het getal 4 is het aantal kolommen in de tabel.
Gewijzigd op 24/08/2022 12:47:59 door Ad Fundum
 
Ray Mond

Ray Mond

25/08/2022 10:10:54
Quote Anchor link
Heb alles geprobeerd, bij 1 result is het wel goed... bij meerdere dan zit het niet in de tabel...

Ook wanneer ik alles aanpas dan werken de tellingen weer niet op de andere pagina's..

Blijkt dus best wel lastig te zijn om dit werkend te krijgen samen met 3 tabellen?

En wat ik zag van Ivo was ook leuk met de function_ad alleen dan is het wel 1 vast advertentie overal toch?
 
- Ariën  -
Beheerder

- Ariën -

25/08/2022 11:08:53
Quote Anchor link
Ray Mond op 25/08/2022 10:10:54:
Heb alles geprobeerd, bij 1 result is het wel goed... bij meerdere dan zit het niet in de tabel...

Ook wanneer ik alles aanpas dan werken de tellingen weer niet op de andere pagina's..

Blijkt dus best wel lastig te zijn om dit werkend te krijgen samen met 3 tabellen?

Je moet één tabel maken, en met die module-operator splits je die steeds af, of je gebruikt een colspan...

Quote:
En wat ik zag van Ivo was ook leuk met de function_ad alleen dan is het wel 1 vast advertentie overal toch?

Klopt, maar je kan eventueel een telling maken en verschillende advertenties tonen
 
Ivo P

Ivo P

25/08/2022 22:23:06
Quote Anchor link
als je in die functie iets doe als

SELECT * from advertenties ORDER BY RAND() LIMIT 1

krijg je een willekeurige advertentie. (mogelijk dus dubbelen. En dat kun je met wat extra fantasie ook wel weer oplossen.)

Bedoeling van de aanroep was "regel hier dat er een advertentie komt". Hoe je dat doet
- uit je database
- hard coded
- uit een advertentie netwerk

is aan jou
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.