1. #1

    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:
    PHP Code:
    <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?
    no votes  

  2. #2
    Bv202's Avatar
    Registered
    10/12/06
    Location
    Antwerpen
    Posts
    3,721
    iTrader
    4 (100%)
    Mentioned
    0 Post(s)
    ...
    no votes  

  3. #3

    Registered
    14/08/10
    Location
    Diest
    Posts
    2,419
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    8/16
    Quote Originally Posted by Bv202 View Post
    This quote is hidden because you are ignoring this member. Show
    Had ik al geprobeerd, maar lukt niet met deze code:
    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";} 
    ?>">
    (Denk niet dat het uitmaakt om hier double quotation marks te gebruiken).

    Ook zou een jokeroptie beter zijn.
    no votes  

  4. #4
    Dieterg's Avatar
    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
    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";
    ?>">
    Kan zijn dat er een syntax foutje inzit!

    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  

  5. #5

    Registered
    14/08/10
    Location
    Diest
    Posts
    2,419
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    8/16
    Quote Originally Posted by Mam View Post
    This quote is hidden because you are ignoring this member. Show
    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 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";}}
    ?>">
    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!
    no votes  

  6. #6
    Dieterg's Avatar
    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:

    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";

    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!
    -
    no votes  

  7. #7
    dJeez's Avatar
    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.org
    PSN: dJeezBE - Delicious bookmarks
    Disclaimer: I am currently suffering from severe CSD (Compulsive Sarcasm Disorder). - L'onion fait la farce - Facile largire de alieno
    Pastafarian by choice
    no votes  

  8. #8

    Registered
    14/08/10
    Location
    Diest
    Posts
    2,419
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Reputation
    8/16
    Quote Originally Posted by dJeez View Post
    This quote is hidden because you are ignoring this member. Show
    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.

    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in