[PHP] Verschillende achtergrondkleuren voor elke rij

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Anoniem: 158856

Topicstarter
Ik heb een vraagje met betrekking tot php en mysql. Heb al een tijdje gezocht ernaar, maar ik kan er niks over vinden (waarschijnlijk zoek ik verkeerd, zou niet weten hoe je dit moet noemen).

Het is de bedoeling om een titel uit een MySQL database te halen en die in een div te zetten. Vervolgens worden er tien van die div's onder elkaar gezet. Daarna moeten ze verschillende achtergrondkleuren krijgen, dus rij (div) 1 is donkergrijs, rij 2 is lichtgrijs.

Op het moment heb ik de volgende (simpele) code:

code:
1
2
3
4
5
6
<?php $articles = mysql_query("SELECT * FROM `vg_articles` WHERE `news`='Yes' AND `saved`!='1' ORDER BY `timestamp` DESC LIMIT 4,11", $dbh);
while ($row = mysql_fetch_array($articles))
    {       
    echo '<div class="nieuws5">'.$row[title].'</div>';
    }
?>


Kan iemand mij opweg helpen in de goede richting? (ik hoop dat dit niet valt onder vragen naar complete scripts of iets dergelijks, als dat wel zo is kan ie verwijderd worden denk ik)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Array maken met daarin de twee kleuren die je hebben wil, tellertje bijhouden dat je elke iteratie ophoogt en daarna mod 2 doet (uitgaande van twee kleuren uiteraard).

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 08:50

Knutselsmurf

LED's make things better

Je moet twee verschillende HTML-classes maken, eentje voor de even en eentje voor de oneven rijen. Daarna hoef je in je while-loop alleen maar te controleren of de huidige rij even of oneven is.

offtopic:
Duidelijk dan dit kan ik het niet omschrijven zonder de hele boel te verklappen.

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21:55
Je kunt gebruik maken van de %-operator. Dan krijg je bijvoorbeeld zoiets:
PHP:
1
2
3
4
5
6
7
8
9
$i = 1;
while($row = mysql_fetch_object($result)) {
  if ($i % 2 == 0) {
    $backcolor = '#FFFFFF';
  } else {
    $backcolor = '#E1F0FF';
  }
  $i++;
}


//dit is zo uit de losse pols geschreven

[ Voor 13% gewijzigd door Sybr_E-N op 10-01-2006 20:37 ]


Acties:
  • 0 Henk 'm!

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Hiervoor heb ik ooit een stukje code gemaakt:

PHP:
1
2
$bgcolor++; 
$bgcolor%2 ? $bgcolorclass = "bgcolor1" : $bgcolorclass = "bgcolor2";


(deze code in een while zetten)

...en niet vergeten om de classes 'bgcolor1' en 'bgcolor2' te vermelden in de CSS, of deze te vervangen voor een achtergrondkleur in hex formaat, wanneer je het bij html laat.

[ Voor 31% gewijzigd door Upsal op 10-01-2006 20:40 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 11-06 11:24

TheBorg

Resistance is futile.

Ik die het altijd zo:
PHP:
1
2
3
4
5
$iRowCount = 0;
while (mysql_fetch_something) {
    if ($iRowCount % 2) $sColor = 'class_eenkleur';
    else $sColor = 'class_eenanderekleur';
}


Uiteindelijk komen alle voorbeelden op hetzelfde neer. Het zit im in de %2.

[ Voor 53% gewijzigd door TheBorg op 10-01-2006 20:43 ]


Acties:
  • 0 Henk 'm!

Anoniem: 25556

Waarom ingewikkeld doen met een tellertje etc?

PHP:
1
2
3
4
5
6
7
8
<? 
$backcolor='#FFFFFF';
while($row = mysql_fetch_object($result)) { 
    $backcolor = $backcolor=='#FFFFFF'?'#E1F0FF':'#FFFFFF';
    // print hier je row met $backcolor als kleur
  } 
} 
?>

[ Voor 36% gewijzigd door Anoniem: 25556 op 10-01-2006 20:41 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 11-06 00:38

NMe

Quia Ego Sic Dico.

Omdat het met een tellertje makkelijker te herschrijven is naar meerdere kleuren. :P

@Upsal: "$bgcolor%2" is geen boolean expressie, en vandaar vind ik het persoonlijk erg slordig om hem wel zo te gebruiken. Het returnt 1 of 0, niet true of false, al werkt het inderdaad wel beiden.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Anoniem: 25556

-NMe- schreef op dinsdag 10 januari 2006 @ 20:42:
Omdat het met een tellertje makkelijker te herschrijven is naar meerdere kleuren. :P
En waarom zou je dat willen doen? :)

Acties:
  • 0 Henk 'm!

Anoniem: 26306

Anoniem: 25556 schreef op dinsdag 10 januari 2006 @ 20:40:
Waarom ingewikkeld doen met een tellertje etc?
Omdat je misschien ooit weleens 3 of 4 kleuren wilt? Waarschijnlijk niet, maar het kan.
PHP:
1
2
3
4
5
6
$colors = ( 'red', 'green', 'blue' );
$rownr = 0;
foreach ( $rows as $row ) {
   $color = $rownr++ % count ( $colors );
   // ...
}

[ Voor 6% gewijzigd door Anoniem: 26306 op 10-01-2006 20:46 ]


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 11-06 11:24

TheBorg

Resistance is futile.

Anoniem: 25556 schreef op dinsdag 10 januari 2006 @ 20:40:
Waarom ingewikkeld doen met een tellertje etc?
PHP:
1
2
3
if ($something == $whatever) $sColor = "row_darkyellow";
elseif ($iRowCount % 2) $sColor = 'row_white';
else $sColor = 'row_yellow';

[ Voor 10% gewijzigd door TheBorg op 10-01-2006 20:45 ]


Acties:
  • 0 Henk 'm!

Anoniem: 158856

Topicstarter
thanks voor de snelle antwoorden. Dankzij jullie is het perfect gelukt. Heb gebruik gemaakt van een teller, werkt perfect :D

Acties:
  • 0 Henk 'm!

Anoniem: 25556

TheBorg schreef op dinsdag 10 januari 2006 @ 20:45:
[...]

PHP:
1
2
3
if ($something == $whatever) $sColor = "row_darkyellow";
elseif ($iRowCount % 2) $sColor = 'row_white';
else $sColor = 'row_yellow';
Nofi, maar wat een onleesbare code.. verder nog niet werkend ook, want je verhoogt de $iRowCount nergens :P

PHP:
1
2
3
4
5
6
7
if ($something == $whatever)  {
    $sColor = "row_darkyellow";
} elseif ($iRowCount % 2) {
    $sColor = 'row_white';
} else {
    $sColor = 'row_yellow';
}


Zo al een stuk leesbaarder, maar het blijft wazige code :P

[ Voor 35% gewijzigd door Anoniem: 25556 op 10-01-2006 20:54 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-06 16:30

Bosmonster

*zucht*

Of om er dan nog maar een tegenaan te gooien

PHP:
1
2
3
4
5
$altcolor = false;
while (...) {
   $color = $altcolor ? 'kleur1' : 'kleur2';
   $altcolor = !$altcolor;
}


Als het dan toch maar om een simpele row-switch gaat is dat hele modulo en rowcounts bijhouden een beetje zonde van die enorme bak resources die het kost :P

[ Voor 12% gewijzigd door Bosmonster op 10-01-2006 20:59 . Reden: foutje ]


Acties:
  • 0 Henk 'm!

Anoniem: 2955

en in de toekomst doen we dit met css counters

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Bosmonster schreef op dinsdag 10 januari 2006 @ 20:56:
Of om er dan nog maar een tegenaan te gooien

PHP:
1
2
3
4
5
$altcolor = false;
while (...) {
   $color = $altcolor ? 'kleur1' : 'kleur2';
   $altcolor = !$altcolor;
}


Als het dan toch maar om een simpele row-switch gaat is dat hele modulo en rowcounts bijhouden een beetje zonde van die enorme bak resources die het kost :P
Dat is dus de oplossing die ik al neergezet had, alleen is de mijne dan nog mooier omdat je daar geen overbodige variabele bij gebruikt ;)

Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 11-06 11:24

TheBorg

Resistance is futile.

Anoniem: 25556 schreef op dinsdag 10 januari 2006 @ 20:52:
Zo al een stuk leesbaarder, maar het blijft wazige code :P
Brand maar los als je er iets elegants van kan maken. :)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Anoniem: 25556 schreef op dinsdag 10 januari 2006 @ 21:11:
[...]


Dat is dus de oplossing die ik al neergezet had, alleen is de mijne dan nog mooier omdat je daar geen overbodige variabele bij gebruikt ;)
Voordeel is wel dat je geen string hoeft te vergelijken maar gewoon een boolean waarde uitleest, waardoor tevens de code makkelijker te lezen/veranderen is :)

Acties:
  • 0 Henk 'm!

Anoniem: 25556

Erkens schreef op dinsdag 10 januari 2006 @ 21:33:
Voordeel is wel dat je geen string hoeft te vergelijken maar gewoon een boolean waarde uitleest, waardoor tevens de code makkelijker te lezen/veranderen is :)
Of ik nu doe:
PHP:
1
if (mybool) { //iets }

of:
PHP:
1
if (mystring=="blaat") { //iets}


Beide zijn even makkelijk te lezen of te veranderen. Beetje een kul-argument als je 't mij vraagt. Maar goed, we waren toch al gevorderd tot copulatie met mieren voor gevorderden :)

[ Voor 3% gewijzigd door Anoniem: 25556 op 10-01-2006 21:36 ]


Acties:
  • 0 Henk 'm!

Anoniem: 158856

Topicstarter
ok, thanks allemaal, heb hem nu zonder tellertje gemaakt:

code:
1
2
3
4
$i = false;
(....)
$div = $i ? '3' : '4';
$i = !$i;


de 3 en 4 staan voor de div nummer (hou ik de kleurtjes ff in de stylesheet voor nu, weet niet of dit veel uitmaakt...). Werkt iig perfect :*)

[ Voor 7% gewijzigd door Anoniem: 158856 op 10-01-2006 21:53 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Anoniem: 25556 schreef op dinsdag 10 januari 2006 @ 21:36:
Beide zijn even makkelijk te lezen of te veranderen. Beetje een kul-argument als je 't mij vraagt. Maar goed, we waren toch al gevorderd tot copulatie met mieren voor gevorderden :)
tuurlijk niet, als je nu die classnames/kleuren wilt veranderen moet je 3 strings aanpassen (true je kan een constante gebruiken). Maar een boolean is imo gewoon handiger ;)

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 10-06 21:14
Je kunt het ook met javascript oplossen. Zie A List Apart: Zebra Tables. Kan in bepaalde gevallen zijn voordeel hebben boven een serverside oplossing.

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Je kan het ook met XML/XSL oplossen door modulo DAAR toe te passen, heb je tenminste niet je HTML in je PHP...

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
HTML tussen php code is niet erg, alleen moet je het wel scheiden van de rest van je logica. DB calls tussen de HTML output is iig bad practice. Verplaats dat minstens naar een aparte functie (in een apart bestand) die een associatieve array construeert en dat terug geeft. Daarmee kun je dan je HTML opbouwen.

[ Voor 6% gewijzigd door Michali op 11-01-2006 09:56 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-06 16:30

Bosmonster

*zucht*

prototype schreef op woensdag 11 januari 2006 @ 09:14:
Je kan het ook met XML/XSL oplossen door modulo DAAR toe te passen, heb je tenminste niet je HTML in je PHP...
Wat maakt het nou uit of je control structures gebruikt van PHP of van XSL. Het scheiden heeft betrekking op je databasegebeuren en overige logica.

Acties:
  • 0 Henk 'm!

  • prototype
  • Registratie: Juni 2001
  • Niet online

prototype

Cheer Bear

Het is -zoals met meer dingen- meer een kwestie van smaak, daar ik HTML in PHP beschouw als bad practice ook al wordt het MVC patroon hier alsnog mee gehandhaafd. Zo vind ik dat je het scheiden gerust door mag voeren in views; een XML view kan icm XSL elke mogelijke view aannemen die je maar wil, zoals met PHP elke view gegenereerd kan worden icm een database.
Met die XML view heb je iig duizenden meer opties dan 'm puur naar XHTML te genereren, e.g. integreren met andere applicaties. Daar komt nog bij dat XSL een standaard is voor template zaken, exact hetgeen dat dan hierbij toepasbaar is. In dit geval is het zelfs te beschouwen als een markup taal, die een markup bestand gebruikt als bron om markup code te genereren itt programmeertaal die de markup code voor presentatie genereert (op PHP->XML na). Dit houdt onder andere in dat je met een gerust hart alles kan zend encoden bij wijze van spreken, zonder dat je de gebruiker tekort doet van z'n mogelijkheden om de layout aan te passen. Natuurlijk kun je er ook voor kiezen om die php bestanden die verantwoordelijk zijn voor de view niet te encoden, maar foutjes maak je snel en dat komt de veiligheid van je code vaak niet ten goede; je view zal hoogstwaarschijnlijk controller en model code importeren, en je stelt de gebruiker dan misschien in staat om die code te gebruiken, iets dat je misschien niet wenselijk vond in de eerste plaats. Leuke bijkomstigheid van standaarden als XSL is dat degene die de layout wil aanpassen, niet meer in het bijzonder PHP kennis nodig heeft, daar die wel XSL kennis nodig heeft. Dit ligt dichter bij XHTML dan PHP imho. Nogmaals, geheel subjectief :)

[ Voor 5% gewijzigd door prototype op 11-01-2006 13:50 ]


Acties:
  • 0 Henk 'm!

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Zou je wellicht hier een voorbeeld van kunnen geven? De url die je post vertelt daar namelijk niets over.

It's scientifically known, that base improves the tase of cheezes!


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Upsal schreef op dinsdag 10 januari 2006 @ 20:38:
Hiervoor heb ik ooit een stukje code gemaakt:

PHP:
1
2
$bgcolor++; 
$bgcolor%2 ? $bgcolorclass = "bgcolor1" : $bgcolorclass = "bgcolor2";


(deze code in een while zetten)

...en niet vergeten om de classes 'bgcolor1' en 'bgcolor2' te vermelden in de CSS, of deze te vervangen voor een achtergrondkleur in hex formaat, wanneer je het bij html laat.
Compacter:
PHP:
1
$bgcolor++ % 2 ? $bgcolorclass = "bgcolor1" : $bgcolorclass = "bgcolor2";

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Nog compacter :P
PHP:
1
$bgcolorclass = $bgcolor++ % 2 ? "bgcolor1" : "bgcolor2";

Noushka's Magnificent Dream | Unity

Pagina: 1