Loop met kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick Bdo

Patrick Bdo

16/11/2012 18:11:40
Quote Anchor link
Een lijst met berichten verdeel ik over kolommen,

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
<?php
echo '<table><tr>';
$teller = 0;
$aantal = count($result);
foreach($result as $row) {
    echo '<td>';
    echo $row['bericht'];
    echo '</td>';
    $teller++;
    if((($teller % 4) == 0) and ($aantal > $teller)) {
        echo '</tr><tr>';
    }
}

echo '</tr></table>';                        
?>


Is het mogelijk om rijen om en om te wisselen met 3 en 4 kolommen?

Dus
bericht1 bericht2 bericht3
bericht4 bericht5 bericht6 bericht6
bericht7 bericht7 bericht8

Hoe krijg ik bovenstaande voor elkaar?

En is het mogelijk om de lege 4de plek van de rij met 3, op te vullen met standaardbericht?

Dus
bericht1 bericht2 bericht3 standaardbericht
bericht4 bericht5 bericht6 bericht6
bericht7 bericht7 bericht8 standaardbericht

Ik hoop dat jullie me verder kunnen helpen.
Alvast bedankt
 
PHP hulp

PHP hulp

22/12/2024 18:44:03
 
Eddy E

Eddy E

16/11/2012 19:52:44
Quote Anchor link
Wil je alleen het 6e bericht (ongeacht de inhoud) wel 2 kolommen geven?

2 manieren: colspan="2" in je HTML.
Of empty-cells in CSS.

Ik zou persoonlijk voor de eerste gaan, omdat je tabel dan overal even breed is (en dus geen gat komt).

En als je zeker te weten 4 kolommen weet: schrijf het per <tr> even statisch uit in je loop.
En soms vervang je de inhoud, anders niet.

Laat eens zien welke PHP-code je hebt gemaakt met de tips die ik je hierboven gaf.
 
Patrick Bdo

Patrick Bdo

16/11/2012 20:11:08
Quote Anchor link
Als HTML zou het er zo uit moeten zien,

<table width="200" border="1">
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td colspan="2">&nbsp;</td>
</tr>
</table>

En dan in een loop.

De 2de <tr> is simpel,

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
<?php
echo '<table><tr>';
$teller = 0;
$aantal = count($result);
foreach($result as $row) {
    echo '<td colspan="2">';
    echo $row['bericht'];
    echo '</td>';
    $teller++;
    if((($teller % 3) == 0) and ($aantal > $teller)) {
        echo '</tr><tr>';
    }
}

echo '</tr></table>';                        
?>


Maar hoe combineer ik de 1ste <tr> en de 2de in één loop.
 
Eddy E

Eddy E

16/11/2012 21:06:09
Quote Anchor link
Probeer dit eens:

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
<?php
    echo '<table><tr>';
    $teller = 0;
    $aantal = count($result);

    foreach($result as $row)
    {

        // raise teller
        $teller++;

        // if $i is odd: 2 colspan on last thing
        $colspan = 1;
        if($teller % 2 == 0 AND $teller % 3 == 0)
        {

            $colspan = 2;
        }


        // echo the row, with right colspan
        echo '<td colspan="' . $colspan . '">' . $row['bericht'] . '</td>';

        // end the row (table-row) accordenly
        if($teller % 3 == 0 OR $teller == $aantal)
        {

            echo '</tr><tr>';
        }
    }

    
    // end the table
    echo '</tr></table>';
?>


Mocht het 4-3-4-3-4 zijn etc, zet dan $teller dan op 1 i.p.v. 0.
Gewijzigd op 16/11/2012 21:15:29 door Eddy E
 
Patrick Bdo

Patrick Bdo

16/11/2012 21:15:29
Quote Anchor link
1 rij met 3 berichten en 1 rij met 4 berichten en dat om en om.
Net zo lang de database leeg is.

Je krijgt dan een bakstenen muur met op iedere baksteen een bericht
 
Eddy E

Eddy E

16/11/2012 21:15:49
Quote Anchor link
Aha, zie mijn vorige bericht (net gewijzigd).
 
Patrick Bdo

Patrick Bdo

16/11/2012 21:36:51
Quote Anchor link
Bedankt Eddy,

ik ben een stuk verder hiermee.
met teller op 1 krijg ik dit,
<table>
<tr>
<td colspan="1">bericht 1</td>
<td colspan="1">bericht 2</td>
<td colspan="1">bericht 3</td>
</tr>
<tr>
<td colspan="1">bericht 4</td>
<td colspan="2">bericht 5</td>
<td colspan="1">bericht 6</td>
<td colspan="1">bericht 7</td>
</tr>
<tr>
<td colspan="1">bericht 8</td>
</tr>
<tr>
<td colspan="1">bericht 9</td>
</tr>
</table>
 
Eddy E

Eddy E

16/11/2012 21:38:30
Quote Anchor link
Mmmm dat zit hem waarschijnlijk in de % 3.
Zet die teller weer terug op 0.
En verander regel 13 naar:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
if(($teller+1) % 2 == 0 AND $teller % 3 == 0)
?>


Toevoeging op 16/11/2012 21:40:34:

Oftewel: ga zelf eens even wat spelen.
 
Patrick Bdo

Patrick Bdo

16/11/2012 21:50:33
Quote Anchor link
Met deze kom ik het dichste bij,
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$teller
= 1;

if(($teller+1) % 2 == 0 AND $teller % 3 == 0)

if($teller % 4 == 0 OR $teller == $aantal)
?>


<table>
<tr>
<td colspan="1">bericht 1</td>
<td colspan="2">bericht 2</td>
<td colspan="1">bericht 3</td>
</tr>
<tr>
<td colspan="1">bericht 4</td>
<td colspan="1">bericht 5</td>
<td colspan="1">bericht 6</td>
<td colspan="1">bericht 7</td>
</tr>
<tr>
<td colspan="2">bericht 8</td>
</tr>
<tr>
<td colspan="1">bericht 9</td>
</tr>
</table>

Er staan maar 9 berichten in de database.
Ik ga morgen even testen met meer berichten (moet nu helaas naar m'n werk)

Ik ben in ieder geval een heel stuk verder. Bedankt
 
Eddy E

Eddy E

17/11/2012 06:49:22
Quote Anchor link
Verhoogd $teller++ as $column == 2
Probeer eens.

Toevoeging op 17/11/2012 08:35:59:

Nee anders.
Die -1 bij $teller weg.
Die %3 wordt %4
Waar je $columns =2 doet doe je $teller++;
 
Patrick Bdo

Patrick Bdo

17/11/2012 11:05:30
Quote Anchor link
Bedankt voor de moeite Eddy
Maar trapsgewijs en om en om, lukt niet met tabellen.
Wat ik ook probeer. Niet het gewenste resultaat.

Ben nu overgestapt naar div's

Ga proberen rij om rij "margin-left:"
Zodat bijv de oneven rijen verspringen naar rechts
Achtergrondplaatje van de overkoepelende div is dan de muur.

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
<?php
echo '<div style="background: url(/afbeeldingen/muur.png) repeat-y; max-width: 800px; border:1px solid black; margin: 0; padding: 0;">';

$teller = 0;
$aantal = count($result);
foreach($result as $row) {
    echo '<div style="float: left;">';
    echo '  <div style="width: 172px; height: 56px;>' . $row['bericht'] . '</div>';
    echo '</div>';
    $teller++;
}

echo '<div style="clear: left;"></div>';
echo '</div>';
?>
 



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.