Ankündigung

Einklappen
Keine Ankündigung bisher.

dynamische PHP Variable

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • dynamische PHP Variable

    Hallo,

    ich grüße alle Alteingessenen zu meinem ersten Forenbeitrag hier.

    Es wird eine dynamische Seite mit PHP generiert, die je nach URL Parameter eine anderen Content lädt. Nun möchte ich bestimmte SQL-Abfragen dieser Seite cachen (Fragment Caching).

    Normalerweise wäre das kein Problem, zum Verständnis

    PHP-Code:
    if (!$result $cache->load(result)):
    $result sql abfrage ...
    $cache->save($result);
    endif;
    $this->view->result $result
    Nun ist es aber so, dass der Content sich ja je nach Parameter ändert. Wenn ich also einmal den Cache mit Äpfeln fülle, zeigt er mir unter dem Parameter Banane immer noch das Äpfel-Ergebnis an. Ist ja auch logisch soweit.

    Meine erste Überlegung war, einfach den Parameter als Cache-Objekt zu verwenden, also so


    PHP-Code:
    if (!$parameter$cache->load(parameter)):
    $result sql abfrage ...
    $cache->save($parameter);
    endif;
    $this->view->result $parameter
    Was leider nicht klappt, da ich auf der Seite mehrere Abfragen cachen möchte und der Parameter nur einmal vorhanden ist.

    Ich habe es dann nach langem suchen so probiert:

    PHP-Code:
    if (!${obstsorte,$parameter}= $cache->load(${obstsorte,$parameter})):
    $result sql abfrage ...
    $cache->save(${obstsorte,$parameter});
    endif;
    $this->view->result = ${obstsorte,$parameter}; 
    Dieser Art der Erzeugung von dynamischen Variablen kannte ich bisher gar nicht und so recht verstehe ich sie auch nicht, bzw, klappt´s damit auch nicht.

    Nunja, deswegen bin ich hier. Vielleicht kann jemand diesen Knoten in meinem Kopf lösen?


  • #2
    Du brauchst doch gar keine dynamischen Variablen?

    PHP-Code:
    if (!$this->view->result $cache->load($obstsorte$parameter)):
       
    $this->view->result sql abfrage ...
       
    $cache->save($obstsorte$parameter$this->view->result);
    endif; 

    Kommentar


    • #3
      PHP-Code:
      if (!$this->view->result $cache->load($obstsorte$parameter)):
         
      $this->view->result sql abfrage ...
         
      $cache->save($obstsorte$parameter$this->view->result);
      endif; 
      So klappt es noch nicht. Sorry, das ich das nicht erwähnt hatte aber bei der Cache Methode

      ->cache(Param1, Param2)

      Ist Param 1 das Objekt und 2 ein freier Name (String). Das konntest du natürlich nicht wissen. Sorry!
      Der Hinweis war dennoch entscheidend

      So klappt es erstmal ...

      PHP-Code:
      if (!$RESULT$cache->load($obstsorte"obstsorte".$parameter)) :
         
      $RESULTsql abfrage ...
         
      $cache->save($RESULT"obstsorte".$parameter);
      endif;
      $this->view->result $RESULT

      Kommentar


      • #4
        Und jetzt ist auch das möglich

        PHP-Code:
        if (!$this->view->result$cache->load($obstsorte"obstsorte".$parameter)) :
           
        $this->view->resultsql abfrage ...
           
        $cache->save($this->view->result"obstsorte".$parameter);
        endif; 
        Meine Güte wirkt das jetzt alles einfach und logisch, ist ja fast schon zum schämen oO

        Kommentar


        • #5
          Da aber cache->load wohl nur ein Parameter hat (?) (würde zumindest Sinn machen), solltest du das eher folgendermaßen machen:

          PHP-Code:
          $SEP "|";/*oder sonstwas*/
          $cache->load($obstsorte.$SEP.$parameter);
          $cache->save($this->view->result$obstsorte.$SEP.$parameter); 
          "obstsorte" als fixer String wäre da falsch. Außerdem würde ich dir einen Separator zwischen Sorte und Parameter empfehlen, da die Obstsorten wohl nicht alle gleich viele Zeichen haben und sich das uU mit anderen Parametern und Sorten überschneiden kann. Oder, besser, du trennst Sorte und Parameter in deinem Cache.

          Kommentar

          Lädt...
          X