Tabel splitsen en meerdere pagina's
Pagina: « vorige 1 2 3 volgende »
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.
Code (php)
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 -
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 :)
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)
Wanneer ik het doe met </table> dan komt er natuurlijk niet iets tussen toch?
Code (php)
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
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>
$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:
Gewijzigd op 23/08/2022 20:01:49 door Jan Koehoorn
Tussen de tables door wou ik advertentie ruimtes maken... die kan ik hier nu natuurlijk niet tussenplaatsen dan toch?
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.
Code (php)
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
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; ?>
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
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)
1
2
3
4
5
6
7
8
9
10
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;
}
?>
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
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?
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?
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
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
Hoe verwerk ik jouw deel in mijn bestaande?
Code (php)
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
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>
<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>
Welk deel bedoel je? Die query met RAND?
Het liefst met dat deel erin dat het 10 per tabel is op de pagina :P met de advertenties ertussen als het ware.
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 -
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 - 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
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.
Code (php)
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
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>
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>