diplomsiedler: templates

Hallo,

dank fastix verwende ich momentan das folgende script:

oeffnen eines templates

$importfile = fopen("template.html" , "r" );
#Die Datei wird zum lesen geöffnet.

$str = fread ($importfile);
#Jetzt steht der Inhalt von template.html in $str.

fclose($importfile);

und geschlossen

$template = str_replace("[NAME]",$name,$str);
#Ersetze in $str "[NAME]" durch $name

Wobei $name zuvor aus einer Datenbank gelesen wird.
Wie kann ich mehrere Felder aus der Datenbank in $str schreiben. Geht das? Z.B. will ich auch noch [VORNAME] ersetzen?

Danke,
diplomsiedler

  1. Hallo diplomsiedler,

    $template = str_replace("[NAME]",$name,$str);
    #Ersetze in $str "[NAME]" durch $name

    Wobei $name zuvor aus einer Datenbank gelesen wird.
    Wie kann ich mehrere Felder aus der Datenbank in $str schreiben. Geht das? Z.B. will ich auch noch [VORNAME] ersetzen?

    was spricht denn dagegen, die gleiche Funktion einfach nochmal mit anderen Parametern zu verwenden?

    Grüße aus Darmstadt,
    Benjamin

    --
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
    1. Schreiben der Dateien

      for ($i=1; $i<5 ; $i++)
      {
       $row = mysql_fetch_object ($result);
          $name[$i] = $row->name;
          $urlname[$i] = $row->urlname;
          $offerID[$i] = $row->offerID;
          $merchantCategory[$i] = $row->merchantCategory;

      # Ersetzen der Platzhalter im Template

      $template = str_replace("[NAME]",$name[$i],$str);
          # Ersetze in $str "[NAME]" durch $name[$i]

      $template = str_replace("[merchantCategory]",$merchantCategory [$i],$str);
          $template = str_replace("[offerID]",$offerID[$i],$str);

      [...]

      Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?

      Danke im Voraus und Gruß aus Hamburg,
      diplomsiedler

      1. Hallo diplomsiedler,

        # Ersetzen der Platzhalter im Template

        $template = str_replace("[NAME]",$name[$i],$str);
            # Ersetze in $str "[NAME]" durch $name[$i]

        $template = str_replace("[merchantCategory]",$merchantCategory [$i],$str);
            $template = str_replace("[offerID]",$offerID[$i],$str);
        [...]
        Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?

        Logisch, weil du den Rückgabewert der Funktion str_replace immer wieder in $template schreibst, im Funktionsaufruf  selbst aber $str als zu bearbeitenden String angibst, das kann ja nicht funktionieren. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.

        Grüße aus Darmstadt,
        Benjamin

        --
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
        1. Logisch, weil du den Rückgabewert der Funktion str_replace immer wieder in $template schreibst, im Funktionsaufruf  selbst aber $str als zu bearbeitenden String angibst, das kann ja nicht funktionieren. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.

          Irgendwie habe ich das nun auch geschnallt, aber datt bekomme ich nicht.
          diplomsiedler

        2. Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.

          Wie denn?

          1. Hallo diplomsiedler,

            Ersetze alle Vorkommnisse von "$template" durch "$str" oder umgekehrt, und dein Problem dürfte behoben sein.

            Wie denn?

            $template = str_replace("[NAME]",$name[$i],$str);

            Ersetze in $str "[NAME]" durch $name[$i]

            $template = str_replace("[merchantCategory]",$merchantCategory [$i],$template);
                                                                                ^^^^^^^^^
            $template = str_replace("[offerID]",$offerID[$i],$template);
                                                             ^^^^^^^^^

            Überlege mal, wie Dein voriger Code reagiert hätte:

            Ersetzung           $str                           $template
            [NAME]              [NAME] [Category] [offerID]    Hans [Category] [offerID]
            [Category]          [NAME] [Category] [offerID]    [NAME] irgendeine [offerID]
            [offerID]           [NAME] [Category] [offerID]    [NAME] [Category] 24678

            Du musst natürlich immer mit dem Ergebnis der vorigen Ersetzung weitermachen, sonst kann es nicht funktionieren.

            Christian

            --
            Hast Du einen Beitrag? Nur her damit!
            http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
            SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
            sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
            1. Christian, ich danke Dir!
              !!!Dieses Forum ist und bleibt - dank seiner User - einfach das Beste!!!
              Gruß,
              diplomsiedler

      2. Hier taucht das Problem auf. Der Austausch findet immer nur mit der letzten Variable statt. Hier also die [offerID]. Was mache ich falsch?

        Mist.

        $exportfile = fopen($DateiNeu , "w+" ) ;
            #Die Datei wird zum schreiben geöffnet.

        fputs($exportfile,$template) ;
            #In die Datei wird der Inhalt geschrieben

        fclose($exportfile) ;
            # und geschlossen

        Hier taucht der Fehler aus.
        Also ich bekomme es nicht hin die Mehr als eine Variable im Template zu ersetzen.
        diplomsiedler

    2. Moin!

      $template = str_replace("[NAME]",$name,$str);
      #Ersetze in $str "[NAME]" durch $name

      was spricht denn dagegen, die gleiche Funktion einfach nochmal mit anderen Parametern zu verwenden?

      Da spricht die Tatsache dagegen, dass das nicht allgemeingültig verwendet werden kann. Was ist, wenn in der ersten Operation der Platzhalter mit einem Wert ersetzt wird, der später wieder als gültiger Platzhalter angesehen wird?

      Also: [NAME] wird durch "[VORNAME]" ersetzt, und dann wird [VORNAME] (und auch der schon ersetzte [NAME]) durch einen Vornamen ersetzt - nicht unbedingt wünschenswert.

      - Sven Rautenberg

      --
      "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
      1. Hallo Sven,

        Da spricht die Tatsache dagegen, dass das nicht allgemeingültig verwendet werden kann. Was ist, wenn in der ersten Operation der Platzhalter mit einem Wert ersetzt wird, der später wieder als gültiger Platzhalter angesehen wird?

        ja, es ist zwar richtig, dass dadurch garantiert Probleme auftreten werden, aber dann muss man als Programmierer irgendwie sicherstellen, dass eine solche Syntax vom verarbeitenden Skript maskiert wird und sowas nicht passieren kann. Template-Engines arbeiten doch ähnlich, oder? (Ich habe mich noch mit keiner näher befasst, daher weiß ich das nicht genau). Ich persönlich halte das daher eher für ein geringeres Problem.

        Grüße aus Darmstadt,
        Benjamin

        --
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[