Archief - [Drupal] Joker in PHP?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

-BVR-

Legacy Member
Hallo

Nog niet zo lang geleden heb ik hier met veel hulp de volgende code kunnen fabriceren:
PHP:
<div 
id="node-<?php print $node->nid; ?>" 
class="fotonode 
<?php 
  $fotos= "/fotos";
  $currentpage = $_SERVER['REQUEST_URI']; 
  if($fotos==$currentpage)
  {print "fotopagina";} 
?>">
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.

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?

-BVR-

Legacy Member
Bv202 zei:
Had ik al geprobeerd, maar lukt niet met deze code:
PHP:
<div 
id="node-<?php print $node->nid; ?>" 
class="fotonode 
<?php 
  $fotos= array('/fotos', '/fotos-2011');
  $currentpage = $_SERVER['REQUEST_URI']; 
  if($fotos==$currentpage)
  {print "fotopagina";} 
?>">
(Denk niet dat het uitmaakt om hier double quotation marks te gebruiken).

Ook zou een jokeroptie beter zijn.

Dieterg

Legacy Member
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
PHP:
<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";
?>">

Kan zijn dat er een syntax foutje inzit!

edit: dju toch!

Natuurlijk kan het volgende ook
PHP:
(in_array($currentpage, $fotos)) : print "fotopagina";

-BVR-

Legacy Member
Mam zei:
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

*knip code*

Kan zijn dat er een syntax foutje inzit!

Nice, dit werkt:
PHP:
<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";}}
?>">

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.

Bedankt voor je hulp (+rep) ik hoop op een uitleg!

Dieterg

Legacy Member
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:

PHP:
$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";
}

Dit is slechts een voorbeeld, voor meer uitleg kan ik u het best doorverwijzen naar: PHP: foreach - Manual!

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!

dJeez

Legacy Member
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.org

-BVR-

Legacy Member
dJeez zei:
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.org

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&#039;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.

:)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan