Ankündigung

Einklappen
Keine Ankündigung bisher.

include innerhalb von return Funktion

Einklappen

Neue Werbung 2019

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

  • Happykeppi
    hat ein Thema erstellt include innerhalb von return Funktion.

    include innerhalb von return Funktion

    Hallo,

    ich hoffe ihr könnt mir weiterhelfen und meine (wahrscheinlich anfängerhafte) Frage beantworten. Ich benutze das Skript SilverNews für ein Pressearchiv und möchte dieses per benutzerdefiniertem Header und Footer in meine Seite einbinden bzw. integrieren. Nun ist es so, dass die beiden Teile per Funktion eingebunden werden, die wiederum per return Kommando nur reinen Quellcode ausgibt, d.h. php Kommandos werden nicht geparst. Wenn ich den Inhalt der Dateien, welche ich includen möchte, dort reinstelle, funktioniert alles. Allerdings würde ich gerne zur einfacheren Verwaltung bestimmte Teil des Headers/Footers per include einbinden und nicht statisch im Code hinterlegen. Gibt es eine Möglichkeit innerhalb des return Kommandos einen include einzusetzen? Ich habe schon einiges probiert, aber bin leider nicht weitergekommen. Würde es eventuell helfen, wenn ich das Skript abändere, auf die return Funktion verzichte und stattdessen per echo sowohl den HTML Teil also auch den include ausgebe?

    Ich habe auch schon versucht die Dateien außerhalb der Header und Footer Funktion einzubinden, aber irgendwie erscheint bei der späteren Ausgaben dann alles am Anfang des Quellcodes, was mir das gesamte Layout verhagelt, da verschachelte DIVs nicht mehr in der richtigen Reihenfolge geschlossen werden.

    Hier sind die, aus meiner Sicht, relevanten Codezeilen:

    index.php
    PHP-Code:
    // Header
    $title $newsboard->title;
    $newsboard->header .= $tpl_global->header($title);

    if (
    $newsboard->config['enable_topstrip'] == '1')
    {
        
    $date $newsboard->make_date(time());
        
    $newsboard->header .= $tpl_global->topstrip($date);
    }

    // Footer
    $newsboard->year date('Y');
    /* Please note that in order to our licence you are not allowed to alter or remove the following line! */
    $newsboard->copyright();

    if (
    $newsboard->config['enable_stats'] == '1')
    {

        
    $vars['queries'] = $sql->querycount;
        
    $vars['extime'] = $timer->stop();
        
    $vars['extime'] = $newsboard->make_number($vars['extime'], 4);
        
    $newsboard->footer .= $tpl_global->debug($vars);
        
    }

    $newsboard->footer .= $tpl_global->footer(); 
    tpl_global.php
    PHP-Code:
    function header($title) {
    global 
    $newsboard;
    return <<<TEMPLATE
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>
    {$title}</title>

    [....]

    TEMPLATE;

    tpl_global.php
    PHP-Code:
    function footer() {
    global 
    $newsboard;
    return <<<TEMPLATE
    </div>
    </div>
    </div>
    <div id="epo-foot">
    <div id="epo-footcontent">
    <span class="footleft">Last Update: 05/03/2010</span>

    [...]

    </html>

    TEMPLATE;

    (In den jeweiligen Templates sind schon Sachen von mir drin. Standardmäßig sind diese leer)

    Danke für jede Hilfe im Voraus!!!

  • Happykeppi
    antwortet
    Okay, dann werde ich versuchen es über diese Funktion zu realiseren

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ja, dann bleibt wirklich nur der Weg über den Output buffer. [MAN]ob_start[/MAN]

    Einen Kommentar schreiben:


  • Happykeppi
    antwortet
    Nicht ganz Den zuletzt geposteten Code würde ich nicht includen sondern so wie er da steht in die entsprechenden Funktionen (Header / Footer) schreiben. Mit dem HTML Code-Teil ist dies auch kein Problem, aber das php include für header.html, navi.html und footer.html wird dann anscheinend nicht geparst.

    Wäre es vielleicht noch eine Möglichkeit die drei HTML Dateien in Variablen einzulesen und dann an der entsprechenden Stelle - zwischen den DIV Containern - einzufügen?

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Und die Boxen inkludierst Du jetzt auch nochmal? Inkludierst also Code, der Code (als HTML getarnt) inkludiert? Warum so umständlich?

    Einen Kommentar schreiben:


  • Happykeppi
    antwortet
    Zunächst einmal vielen Dank für die Antworten!

    Zitat von nikosch Beitrag anzeigen
    Bitte markier doch mal im Code, wor Du Dir was vorstellst. Kann gerade nicht ganz folgen.
    Vielleicht hilft es, wenn ich grundsätzlich zeige, worauf ich hinaus möchte. Normalerweise füge ich für den Header und Footer folgendes ein:

    Header
    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>XYZ</title>
    <!--[if !IE]><!--><link rel="stylesheet" type="text/css" href="../epo2010.css"><!--<![endif]-->
    <!--[if IE 8]><link rel="stylesheet" type="text/css" href="../epo2010.css"><![endif]-->
    <!--[if lt IE 8]><link rel="stylesheet" type="text/css" href="../epo2010ie7.css"><![endif]-->
    <link rel="stylesheet" type="text/css" href="../html/style.css">
    <link rel="stylesheet" type="text/css" href="../html/site.css">
    </head>
    <body style="margin: 0px;">
        <div id="wrapper">
    <?php include ("../header/header.html"); ?>
    <div id="epo-content">
    <?php include ("../navi/navi_xyz.html"); ?>
    <div id="epo-main">
    Footer
    PHP-Code:
        </div>
    </div>
    <?php include ("../footer/footer.html"); ?>
    </div>
    [Bevor irgendwelche Fragen entstehen: Ich habe html Dateien mit integrieten php includes, die ich per htaccess auch durch den PHP Parser schicke.]

    Wenn ich die Codezeilen aber innerhalb des returns eingebe, dann werden meine include nicht geparst und bleiben 1:1 im Quelltext stehen.

    Allerdings scheint das ganze Skript ein wenig buggy zu sein. Ich habe nämlich in der Zwischenzeit, wie oben bereits angedeutet, versucht das Ganze per echo zu lösen, wie es auch in anderen Skripten, die ich verwende, der Fall ist. Diese Variante klappt soweit alles taucht dann der Footer aufeinmal zwischen Header und Haupttext auf, was das ganze Layout zerstört Aber gut, dies wäre schon eine andere/die nächste Baustelle.

    Gibt es eine Möglichkeit den oben angefügten Code innerhalb des return einzufügen? Darüberhinaus bin ich natürlich auch für Alternativen offen.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Er hat doch returns. Da braucht normalerweise keinen OB.

    Einen Kommentar schreiben:


  • chorn
    antwortet
    Ich habe das so verstanden, dass er die Templates + weiteren Code in eine Datei auslagern und als String zurückgeben möchte. Was spricht dabei gegen den Outputbuffer? Auf was bezogen ist der Outputbuffer eine Keule? Habe das von dir in anderen Threads als Tipp gesehen.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Bitte markier doch mal im Code, wor Du Dir was vorstellst. Kann gerade nicht ganz folgen.

    @chorn: Nicht immer gleich die große Buffer-Keule auspacken. Das sollte man wirklich für den Notfall aufheben.

    Einen Kommentar schreiben:


  • chorn
    antwortet
    Du kannst alle Ausgaben die PHP, also auch die eingebundenen Dateien machen, mit ob_start() etc. abfangen. Siehe Manual auf php.net.

    Einen Kommentar schreiben:

Lädt...
X