Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit eigenem Template System!

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit eigenem Template System!

    Hallo Leute!

    Ich arbeite gerade an einer Template-Funktion um eine URL zu ersetzen!
    Habe eine PHP-Funktion die aus einem Array eine URL auf Mod_Rewrite-Basis oder je nach Einstellung auch ganz normale URL's erzeugt und zurück gibt!

    Nun habe ich im Display-Part meines Templates System das ersetzen von URL's eingebaut! URL's werden im Template wie folgt eingebunden/ersetzt!

    Code:
    <a href="http://www.php.de/php-fortgeschrittene/{url=array(screen=news,mode=more,...)}">Weiter lesen!</a>
    Nun ich möchte ich, dass innerhalb einer URL-Definition eine Variable ersetzt wird.

    Variablen werden mit {$variable} im Template definiert!

    Hier ein kleines Template Beispiel:

    Code:
    <a href="{url=array(screen=news,mode=more,newsid={$newsid})}">Weiter lesen!</a>
    Im Display-Part liegt die Funktion für das ersetzten der Variablen vor der Funktion der URL's.

    Rein theoretisch müsste er dann die Variable ersetzen und dann die URL bilden!

    Wenn ich das dann ausführe, wird nur der Platzhalter für die Variable entfernt und die URL gebildet.

    Weiß jemand woran das liegen kann?

    Gruss Nickstar


  • #2
    Du schreibst ganz deutlich, dass du ein eigenes Template-System verwendest. Woher, glaubst du, könnten wir auch nur ansatzweise wissen, was dein eigenes Template-System beim Parsen falsch macht, wenn wir das Ding kein stückweit kennen ...?

    Kommentar


    • #3
      Upps ganz vergessen! =)

      Also die wichtigstens Teile meiner Display-Funktion:

      Variablen ersetzen:

      PHP-Code:
      if(count($this->variable) != '0'){
          foreach(
      $this->variable AS $keyVariable => $valVariable){
              
      $patternVariable '/\{\\$'.$keyVariable."\}/";
              
      $content preg_replace($patternVariable$valVariable$content);
          }

      in $this->variable stehen alle Variablen die zuvor mit ->assign($key, $value) eingefügt wurden!

      URL ersetzen:

      PHP-Code:
      if(preg_match("/\{url=array\((.*)\)\}/"$content)){
          
      preg_match_all("/\{url=array\((.*)\)\}/"$content$arrUrl);
          
      $arrAllUrls = array();
          
      $x 0;
          foreach(
      $arrUrl[1] AS $valUrl){
              
      $parts = array();
              
      $parts explode(","$valUrl);
              
      $explodeParts = array();
              
      $urlParts = array();
              foreach(
      $parts AS $var => $val){
                  
      $explodeParts explode("="$val);
                  
      $urlParts[$explodeParts[0]] = $explodeParts[1];
              }
                              
              
      $arrAllUrls[$x]['pattern'] = "{url=array($valUrl)}";
              
      $arrAllUrls[$x]['replacement'] = PageUtilities::makeURL($urlParts);
              
      $x++;
          }
                          
          foreach(
      $arrAllUrls AS $replaceUrl){
              
      $content str_replace($replaceUrl['pattern'], $replaceUrl['replacement'], $content);
          }

      PageUtilities::makeURL ist die FUnktion die aus einem Array eine URL bildet!

      Hoffe du kannst damit mehr anfangen!

      Verbesserungsvorschläge sind auch gerne gesehen!

      Gruss Nickstar

      Kommentar


      • #4
        hi

        Also
        PHP-Code:
         $patternVariable '/\{\\$'.$keyVariable."\}/"
        Hier sind zwei unterschiedliche Quotes verwendet. Tippfehler?
        Danach sehe ich keinen Fehler.
        Oder hab ich das falsch Verstanden und es soll mehr als nur dieses "{url=array(screen=news,mode=more,newsid={$newsid} )}"
        in der URL ersetzt werden?

        Kommentar


        • #5
          Danke für den Hinweis mit den Quotes!

          Also es soll so ablaufen! Es wird {$newsid} mit der NewsId ersetzt!

          Danach sollte es so aussehen:

          Code:
          <a href="{url=array(screen=news,mode=more,newsid=1)}">Weiter lesen!</a>
          jetzt soll die URL-Definition in eine URL umgewandelt werden!

          Heißt aus der Definition wird:

          - mit Mod_Rewrite

          Code:
          <a href="http://example.de/news/more/1/">Weiter lesen!</a>
          - und ohne

          Code:
          <a href="http://example.de/index.php?screen=news&mode=more&newsid=1">Weiter lesen!</a>
          Das wären die Schritte die nötig sind!

          Kommentar


          • #6
            Also dein Script macht doch genau das von dir verlangte mit der Template Variable.
            Das einzige was hier noch etwas falsches machen kann ist der Aufrug PageUtilities::makeURL($urlParts) und dieser Aufruf gibt nicht das
            zurückgegeben, wie du es haben willst.

            Kommentar


            • #7
              Das macht er aber! Wenn ich eine URL-Definition ohne Variable habe, läuft alles so wie es soll nur wenn halt eine Variable mit eingebaut ist!

              Kommentar


              • #8
                Wenn eine Template Variable mit eingebaut ist, was passiert dann?
                Wird diese nicht ersetzt? Falls ja überprüfe dann, ob deine
                PHP-Code:
                if(count($this->variable) != '0'){
                    foreach(
                $this->variable AS $keyVariable => $valVariable){ 
                auch das macht, was es soll (ist das Array 'variable' auch so gesetzt wie es soll?).

                Da ich nun nicht deine This

                Kommentar


                • #9
                  Also ich habe bei meiner Funktion zum ersetzen der URLs ein Array wo das Pattern und das Replacement drin ist!

                  Hier mal der Dump ohne Variable:

                  Code:
                  array(2) {
                      ["pattern"]=>
                      string(29) "{url=array(screen=teamspeak)}"
                      ["replacement"]=>
                      string(39) "http://localhost/*/teamspeak/"
                  und hier mit:

                  Code:
                    array(2) {
                      ["pattern"]=>
                      string(45) "{url=array(screen=contact,mail=xxxxx,track=)}"
                      ["replacement"]=>
                      string(44) "http://localhost/*/contact/xxxxx//"
                  für mich heißt das, dass er den Platzhalter der Variable rausnimmt und einfach weiter macht!

                  EDIT:

                  Normalerweise sollte es auch so aussehen:

                  In der URL-Definition steht track={$test}

                  Code:
                    array(2) {
                      ["pattern"]=>
                      string(45) "{url=array(screen=contact,mail=xxxxx,track=value)}"
                      ["replacement"]=>
                      string(44) "http://localhost/*/contact/xxxxx/value/"

                  Kommentar

                  Lädt...
                  X