Tabel splitsen en meerdere pagina's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

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

26/04/2024 16:36:56
 
- 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
 
Ray Mond

Ray Mond

09/10/2022 15:23:39
Quote Anchor link
@Ivo:

Hoe verwerk ik jouw deel in mijn bestaande?

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
<table class="tabel">
  <tr>
    <td class="tabelkop" style="width:5%;text-align: center;">Nummer</td>
    <td class="tabelkop" style="width:85%;text-align: center;">Naam en content</td>
  </tr>
  <?php
    $sql
= "SELECT * from websites WHERE `status` = '2' ORDER BY aantalin DESC LIMIT $start_from, $per_pagina_record";
    $return = $conn->query($sql );
                        
    while ($row = $return->fetch_object()){
        
    if($i%2 == 0)
    {

        $color = "row1"; // Kleur 1
    }
    else
    {
        $color = "row2"; // Kleur 2
    }
    ++
$i;
        
    echo '<tr class="'.$color.'"><td class="rank">'.$i.'</td><td class="col2">  <div style="text-align: center;"> <a href="index.php?uit='.$row->link_id.'" target="_blank"><img src="'.$row->banner.'" class="b468" alt="'.$row->site_naam.'"></a></div>  <a href="index.php?uit='.$row->link_id.'" target="_blank"><strong>'.$row->site_naam.'</strong></a><br>
    '
.$row->beschrijving.'  </td>
    </tr>'
; } ?>

</table>
 
- Ariën  -
Beheerder

- Ariën -

10/10/2022 15:44:00
Quote Anchor link
Welk deel bedoel je? Die query met RAND?
 
Ray Mond

Ray Mond

10/10/2022 15:57:54
Quote Anchor link
Het liefst met dat deel erin dat het 10 per tabel is op de pagina :P met de advertenties ertussen als het ware.
 
- Ariën  -
Beheerder

- Ariën -

10/10/2022 16:02:58
Quote Anchor link
Dat doe je min of meer toch al met je module operator?
Nu zet je om de regel row1 of row2 neer.

Als je dit aanpast naar: if($i%5 == 0), dan kan je om de vijf items een advertentie tonen.

Maar heb je de rest van dit topic al gelezen? Er staan onder andere ook goede tips in om die gekleurde rijen via CSS aan te pakken.
Gewijzigd op 10/10/2022 16:11:06 door - Ariën -
 
Ray Mond

Ray Mond

12/10/2022 12:00:37
Quote Anchor link
Ik had de rest gelezen inderdaad en snap wel dat kleuren via css te doen zijn maar aangezien dit om en om moet gebeuren zie ik geen andere optie?

Via css is het locked op kleur en dan heb je maar een bepaalde kleur... Nu is het mooi om en om.

Wat je hierboven aangeeft is op dit moment dan ook voor de kleuren inderdaad, daar kan je dus geen ads tussenzetten of iets dergelijks, dat gaat niet werken...

row1 en row2 zorgen enkel voor de kleuren, tekst komt niet in beeld...

De code werkt verder perfect hoor, dat is het niet, ik wil echter dus alleen na die 10 rows een spatie hebben eigenlijk, reclame vak er in en dan moeten de volgende 10 komen met advertentie ruimte
 
- Ariën  -
Beheerder

- Ariën -

12/10/2022 12:06:46
Quote Anchor link
Via CSS kan je prima om-en-om een rij kleuren.

- Ariën - op 19/08/2022 11:57:05:
Nog een goede tip:
Je hoeft echt niet met PHP te bepalen welke kleuren de rijen om en om zijn. Dan kan prima met CSS:

https://www.w3.org/Style/Examples/007/evenodd.en.html


Met de modulo-operator kan je prima om de xx aantal rijen een advertentie tonen. Beiden had overigens ook gekund, maar stijlen wil je liever semantisch afhandelen via CSS.
 
Adoptive Solution

Adoptive Solution

12/10/2022 12:11:05
Quote Anchor link
Omdat dit topic nog wel een paar maanden zal aanhouden zonder dat een oplossing in zicht is, hier mijn bijdrage:

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
<style>
tr:nth-child(odd) {
    background: #dcdcdc;
    }

tr:nth-child(even) {
    background: #dcdcaa;
    }
</style>

<table style="width:50%; border: 1px solid red;">

<tbody>

<?php

$aantalrecords
= 22; // opgehaald in database
$advertentie   = 5; // toon advertentie na zoveel regels

for ( $i = 0; $i < $aantalrecords; $i++ ):

    if ( $i % $advertentie == 0 && $i >= $advertentie ):
        echo '<tr><td>HIER ADVERTENTIE</td></tr>' . PHP_EOL;
    endif;


    echo '<tr><td><p>' . $i + 1 . ' data</p></td></tr>' . PHP_EOL;

endfor;

?>


</tbody>

</table>
 

Pagina: « vorige 1 2 3 volgende »



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.