Andy5590: content skript + str_replace

Hi,

ich bin gerade dabei eine Webseite zu entwickeln.
Ich habe eine HTML-Datei in welcher im content-div der String "{content}" steht.

Diesen String möchte ich gerne durch mein content-script ersetzten.

Also das Ersetzten:

$main['content'] = include('core/content.php');
$main['template'] = 'templates/standard/index.html'

$template = file_get_contents($main['template']);

str_replace('{content}',$main['content'],$template);

Meine content.php:

if(isset($_GET['mod']) AND isset($mods[$_GET['mod']])){
  include($mods[$_GET['mod']]);
} else {
  include(mods/home.php);
}

Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
also "{content}" durch eine "1" ersetzt wird.
Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.

Kann mir da jemand weiterhelfen?
thx,
Andy

  1. Hi,

    Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
    also "{content}" durch eine "1" ersetzt wird.

    das ist die Rückgabe Deines include().

    Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.

    Nämlich exakt dort, wo Du die Datei inkludierst.

    Kann mir da jemand weiterhelfen?

    Wenn Du kein include() verwenden möchtest, dann verwende keines. Wie man Dateien einliest, scheinst Du zu wissen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. das ist die Rückgabe Deines include().

      Die Rückgabe meines includes als String ist "1"?

      Nämlich exakt dort, wo Du die Datei inkludierst.

      Ich inkludiere die Datei aber in mein content-div (da wo die 1 steht), deswegen versteh ich das nicht ganz.

      Wenn Du kein include() verwenden möchtest, dann verwende keines. Wie man Dateien einliest, scheinst Du zu wissen.

      Wie kann ich es ohne include() lösen?

      Bin noch Anfänger.

      Thx,
      Andy

      1. Grüße,

        Wie kann ich es ohne include() lösen?

        http://de.php.net/manual/en/function.file-get-contents.php
        SO
        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
        1. $main['content'] = file_get_contents('core/content.php');
          anstatt
          $main['content'] = include('core/content.php'); ??

          andy

          1. Hat sonst noch jemand ne Idee?

            1. Hello,

              Hat sonst noch jemand ne Idee?

              Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.

              dann brauchst Du nur noch zwei Häkchen spendieren und ein paar spitze Klammern usw...

              $main['content'] = '<?php include('core/content.php'); ?>';
              $main['template'] = 'templates/standard/index.html'

              Harzliche Grüße vom Berg
              http://bergpost.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

              1. Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.

                ja dass ich aus einer HTML-Datei eine php-Datei machen kann und das dann so löse ist klar, nur wollt ich das vermeiden.

                Ich will ja, dass in meiner HTML-Datei {content} steht, und das dann bewirkt, dass die content.php hier reingeladen wird.
                So wie das in den meisten Content Management Sytemen der Fall ist.

                thx,
                andy

                1. Hello,

                  Ich will ja, dass in meiner HTML-Datei {content} steht, und das dann bewirkt, dass die content.php hier reingeladen wird.
                  So wie das in den meisten Content Management Sytemen der Fall ist.

                  Dann brauchst Du also eine Funktion, die zwar wie include() die eingebundene Datei parst, aber das Ergebnis nicht in die Datei schreibt, sondern in eine Variable

                  function get_parsed($file)
                  {
                     ob_start();
                     include ($file);
                     return ob_get_clean();
                  }

                  Das Parsen findet zum Laufzeitpunkt der Funktion statt.

                  $main['content'] = get_parsed('core/content.php');
                  $main['template'] = 'templates/standard/index.html'

                  $template = file_get_contents($main['template']);

                  str_replace('{content}',$main['content'],$template);

                  Probier mal aus, ob das funktioniert.
                  Das Problem wird nur sein, dass der Eingebundene File keine Redeclares enthalten darf, also keine Funktionsdefinitionen von Funktionen, die schon vorhanden sind im Script oder von Konstanten, die schon vorhanden sind im Script. Ich habe es aber noch nicht ausprobiert (mache ich jetzt)

                  Außerdem musst Du dringend darauf achten, dass keine Eingaben von außen in dem File landen.

                  Harzliche Grüße vom Berg
                  http://bergpost.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

                  1. Hi,

                    danke funktioniert!
                    Aber die content.php musste ich in meine index.php auch mit dieser Funktion includen.

                    Gruß,
                    Andy

                    1. Hello,

                      danke funktioniert!
                      Aber die content.php musste ich in meine index.php auch mit dieser Funktion includen.

                      Das ändert aber nichts daran, dass Dein Konzept nicht in Ordnung ist.

                      Entweder, du arbeitest mit aktiven Inhalten. Dann steht eben überall dort, wo etwas eingebunden werden soll ein "include()" oder Du willst ein passives System von Templates, das von einer Ersetzungsmaschine durchgearbeitet wird, dann musst Du aber auch Rekursion berücksichtigen und eigene Funktionen erfinden, die nicht vom PHP-Parser, sondern von Deiner Ersetzungsmaschine abrgearbeitet werden.

                      Ich hatte Dich ja darauf hingewiesen, dass Funktions- und Variablendeklarationen aus den derartig includierten Dateien trotzdem ins globale Scope des Scriptes übertragen werden. Wenn sie dort schon vorhanden sind, bekommst Du einen Redeclaration Error.

                      Und wenn Du in Deinen eingebundenen Dateien auf PHP-Code versichten kannst, und nur solange weiter erstezt, wie {CONTENT} und seine Brüder drinstehen, dann bist Du auf dem richtigen Wege.

                      Wenn also Deine Datei, die bei {CONTENT} eingesetzt wird ihrerseit ein {MENU} enthält, dann  usst Du das eben auch noch ersetzen lassen usw.

                      Dann reicht aber fread()

                      Harzliche Grüße vom Berg
                      http://bergpost.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
                      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

              2. Moin!

                Hat sonst noch jemand ne Idee?

                Klar, mach aus der HTML-Datei eine php-Datei oder sage Deinem Webserver, dass er sie durch den PHP-Parser schicken soll.

                dann brauchst Du nur noch zwei Häkchen spendieren und ein paar spitze Klammern usw...

                Jetzt erzählst du Müll, dabei war der eingeschlagene Weg so gut. Uhrzeitbedingt?

                $main['content'] = '<?php include('core/content.php'); ?>';
                $main['template'] = 'templates/standard/index.html'

                Wie soll das funktionieren?

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Hello,

                  Jetzt erzählst du Müll, dabei war der eingeschlagene Weg so gut. Uhrzeitbedingt?

                  $main['content'] = '<?php include('core/content.php'); ?>';
                  $main['template'] = 'templates/standard/index.html'

                  Wie soll das funktionieren?

                  So wie ich es geschrieben habe. Das muss man dann naürlich auch lesen.

                  Er schreibt statt {content}  <?php include('core/content.php'); ?>  in die "HTML"-Datei, lässt diese anschließend parsen und gut ist's

                  Harzliche Grüße vom Berg
                  http://bergpost.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          2. Grüße,

            $main['content'] = file_get_contents('core/content.php');

            genau

            MFG
            bleicher

            --
            __________________________-
            Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
            Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
            Boccaccio
      2. Hi,

        Die Rückgabe meines includes als String ist "1"?

        exakt.

        Ich inkludiere die Datei aber in mein content-div (da wo die 1 steht), deswegen versteh ich das nicht ganz.

        Du inkludierst die Datei dort, wo include() steht. Das ist der Zweck dieser Funktion.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Grüße,

    $main['content'] = include('core/content.php');

    ich weis nicht recht was include() so zurückgibt.. 1?

    $main['template'] = 'templates/standard/index.html'

    $template = file_get_contents($main['template']);

    hast du den wert ausgeben lassen?

    str_replace('{content}',$main['content'],$template);

    mixed str_replace ( mixed $search, mixed $replace, mixed $subject [, int &$count] )

    lass dir
    $main['content']
    mit echo ausgeben..was steht drin?

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. Hi,

      wenn ich $main['content'] ausgeben steht auch 1 da.

      gruß,

  3. Hi,

    $main['content'] = include('core/content.php');

    Hast du dir hier mal $main['content'] ausgeben lassen?
    Include gibt den Fileinhalt (hier von content.php) nicht als String zurück, sondern gibt ihn direkt (wie mit echo) aus.
    Was du in $main['content'] speicherst ist nur der Rückgabewert von include und der ist in deinem Fall anscheinend 1.

    Das funktioniert aber nur dahingehend, dass das zu ersetztende Wort
    also "{content}" durch eine "1" ersetzt wird.
    Der Inhalt der home.php bzw. news.php wird ganz oben außerhalb aller divs angezeigt.

    Das hat include so an sich.  Du musst den Inhalt der Datei anders in deine Variable einlesen. fread() scheint dafür brauchbar zu sein.

    mfG,
    steckl

    1. Hi,

      $main['content'] = fread('core/content.php',???);

      wie geht das?

      Andy

      1. Hi,

        $main['content'] = fread('core/content.php',???);

        Das von Bleicher vorgeschlagene file_get_contents() ist wohl fread() einfacher zu verwenden wie fread().

        mfG,
        steckl

        1. Das von Bleicher vorgeschlagene file_get_contents() ist wohl fread() einfacher zu verwenden wie fread().

          habe gerade $main['content'] = file_get_contents('core/content.php'); gesetzt.
          Doch leider funktioniert das so nicht (es passiert garnichts wenn ich auf meine menüpunkte klicke) :(

          Andy