Thread: [Drupal] Joker in PHP?
-
26-10-2011, 20:54 #1Deactivated user
- Registered
- 14/08/10
- Location
- Diest
- Posts
- 2,419
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 8/16
[Drupal] Joker in PHP?
Hallo
Nog niet zo lang geleden heb ik hier met veel hulp de volgende code kunnen fabriceren:
Dit werkt goed, maar nu heb ik een probleem: deze code check dus of de pagina waar ik op zit, dezelfde is als '/fotos' en als dat zo is wordt er een class toegevoegd. Nu zijn er echter paginas bijgekomen waar ik die class wil hebben, dus $fotos zou zowel /fotos als /fotos-2011, /fotos-2010, /fotos-2009 etc. moeten zijn.PHP Code:<div
id="node-<?php print $node->nid; ?>"
class="fotonode
<?php
$fotos= "/fotos";
$currentpage = $_SERVER['REQUEST_URI'];
if($fotos==$currentpage)
{print "fotopagina";}
?>">
Ten eerste weet ik al niet hoe ik een variabele meerdere waarden kan geven. Ten tweede, wat een betere oplossing is, zou ik eigenlijk niet handmatige alle pagina's willen toevoegen. Daarom dacht ik aan een joker, iets als $fotos = /fotos-*. Ik heb echt al veel gegoogeld enal, maar ik vind niks om dergelijke wildcard te gebruiken in PHP.
Iemand?no votes
-
-
26-10-2011, 21:12 #2no votes
-
26-10-2011, 21:19 #3Deactivated user
- Registered
- 14/08/10
- Location
- Diest
- Posts
- 2,419
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 8/16
Had ik al geprobeerd, maar lukt niet met deze code:
(Denk niet dat het uitmaakt om hier double quotation marks te gebruiken).PHP Code:<div
id="node-<?php print $node->nid; ?>"
class="fotonode
<?php
$fotos= array('/fotos', '/fotos-2011');
$currentpage = $_SERVER['REQUEST_URI'];
if($fotos==$currentpage)
{print "fotopagina";}
?>">
Ook zou een jokeroptie beter zijn.no votes
-
26-10-2011, 21:28 #4Approved 9-lifer
- Registered
- 08/01/05
- Location
- Turnhout
- Posts
- 1,182
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 9/9
Oké, als je een array maakt kan je de waarde in de array bereiken met 'ingangen'. $fotos[0] is dus eigenlijk '/foto's', $fotos[1] is dan weer 'fotos-2011'. Wat je dus moet gaan doen is met een foreach werken om elke ingang te controleren. Dus iets als volgt
Kan zijn dat er een syntax foutje inzit!PHP Code:<div
id="node-<?php print $node->nid; ?>"
class="fotonode
<?php
$fotos= array('/fotos', '/fotos-2011');
$currentpage = $_SERVER['REQUEST_URI'];
foreach ($fotos as $foto) ($foto == $currentpage) : print "fotopagina";
?>">
edit: dju toch!
Natuurlijk kan het volgende ook
PHP Code:(in_array($currentpage, $fotos)) : print "fotopagina";
Last edited by Dieterg; 26-10-2011 at 21:40.
-no votes
-
26-10-2011, 21:41 #5Deactivated user
- Registered
- 14/08/10
- Location
- Diest
- Posts
- 2,419
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 8/16
Nice, dit werkt:
Toch heb ik er vragen bij, want ik begrijp niet hoe het werkt. Waar wordt die $foto ergens gedefinieerd? Waar haalt hij die? Ik begrijp dat foreach alle items van een array checkt (?), maar dan niet hoe hij aan die $foto komt.PHP Code:<div
id="node-<?php print $node->nid; ?>"
class="fotonode
<?php
$fotos= array('/fotos', '/fotos-2011');
$currentpage = $_SERVER['REQUEST_URI'];
foreach ($fotos as $foto) {if($foto == $currentpage) {print "fotopagina";}}
?>">
Bedankt voor je hulp (+rep) ik hoop op een uitleg!no votes
-
26-10-2011, 21:51 #6Approved 9-lifer
- Registered
- 08/01/05
- Location
- Turnhout
- Posts
- 1,182
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 9/9
Ik zal de foreach even uitleggen:
een foreach lus is bedoeld om snel gegevens uit een array/list te halen. letterlijk vertaald 'voor elke fotoArray als foto'. Je gaat dus voor elk item in uw array iets doen. In uw geval checken of het gelijk is aan de currentpage.
Damn ik zou een slechte leraar zijn denk ik :P.
Je hebt in PHP ook nog andere soort arrays. Bv:
Dit is slechts een voorbeeld, voor meer uitleg kan ik u het best doorverwijzen naar: PHP: foreach - Manual!PHP Code:$eenArray['test'] = 10;
$eenArray['9lives'] = 12;
foreach($eenArray as $array => $value) {
echo "$array zal de eerste keer test printen en de tweede keer 9lives";
echo "$value zal de eerste keer 10 printen en de tweede keer 12";
}
Nu heb ik daar ook een functie in_array(). Eigenlijk kan je beter die gebruiken om dat je gaat checken of er iets IN de array zit en niet zozeer iets gaat doen met dat item.
Edit: als je het dan nog niet snapt kan ik u wel een deel van men cursus doormailen waar Arrays en foreach behandeld wordt!-no votes
-
26-10-2011, 23:25 #7Member
- Registered
- 17/07/02
- Location
- Sol System
- Posts
- 10,064
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 27/78
Ik begrijp eerlijk gezegd niet goed waarom je voor zo een hack gaat. Je kan perfect je theme aanpassen zodat je per content type een specifiek template kan gebruiken. Uw fotopagina's zouden in dat geval dus een specifiek content type worden, met een eigen template voor de weergave.
Theming nodes by content type | drupal.orgPSN: dJeezBE - Delicious bookmarks
Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alienoPastafarian by choiceno votes
-
27-10-2011, 00:49 #8Deactivated user
- Registered
- 14/08/10
- Location
- Diest
- Posts
- 2,419
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 8/16
Als ik dit niet doe, kan ik de fotoalbums (die nodes zijn) niet stijlen op de pagina's dat het nodig is. Op de fotos en de foto-2011-pagina is dat nodig, dat de node kleiner is, maar als ik die stijl zomaar zou toepassen, zou de fotoalbumpagina zelf ook veel kleiner zijn.
Zie: Foto's | De Notenbalkers Schaffen -> twee nodes, width: 25%;
Zie: Dagje zee - 2011 | De Notenbalkers Schaffen -> Eén node: width: 100% maar dus twee keer dezelfde node.
no votes

