Problem mit Konstante in Script

Alles, was PHP betrifft, kann hier besprochen werden.

Problem mit Konstante in Script

Postby airis » 23. April 2005 12:06

Hallo Zusammen,
ich habe folgende Zeile in einem Script:
Code: Select all
PAGE_FOOTER  => implode("",file("$Stemplate/footer.php"))

Da ich an einem Languae-Packet arbeite möchte ich die Seite
"footer.php" so ersetzten:
Code: Select all
PAGE_FOOTER  => implode("",file("$Stemplate/". href23"))

Folgende Fehlermedungen erscheinen,
Warning: file(template/ht.href23) [function.file]: failed to open stream: No such file or directory in D:\1server\xampp\htdocs\phplinks\add.php on line 118
Warning: implode() [function.implode]: Bad arguments. in D:\1server\xampp\htdocs\phplinks\add.php on line 118

die Hauptseite “add.php” öffnet allerdings ohne “footer.php”.

Kann mir jemand sagen wie es richtig ist?
Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 23. April 2005 12:36

Hi Airis,

erst mal 'ne Frage. Was soll dieser Code machen?
Code: Select all
PAGE_FOOTER  => function()

Hab ich jedenfalls so noch nie gesehen...

Code: Select all
implode("",file("$Stemplate/". [b]href23"[/b]))

Hier fehlt ein Stringbegrenzer in der file()-Funktion.

Aber für eine genaue Antwort zwei Fragen:
1) du willst den Inhalt des Templatefiles der Konstanten PAGE_FOOTER zuweisen?
2) Was ist "href23"? Direkt der Name der Datei, die im Verzeichnis liegt das in $Stemplate abgespeichert ist?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 23. April 2005 13:01

Hallo Wiedmann,

wie Du weist, bin ich nicht der PHP-Spezialist.
Die "PAGE_FOOTER " steht mit anderen Seiten in folgendem Packet eines Link-Scriptes:
Code: Select all
$tpl->assign( array(
TEMPLATE => $Stemplate,
DOMAIN       => $Sdomain,
CHARSET      => $Scharset,
MWIDTH       => $Smain_width,
BGCOLOR      => $Sbgcolor,
ALIGN      => $Salign,
PAGE_HEADER  => implode("",file("$Stemplate/header.html")),
PAGE_FOOTER => implode("",file("$Stemplate/footer.php"))
));
show_menu();
show_here("","",$l_link_add);
show_search();


"href23" ist der Name der Konstanten die ich anstelle von "footer.php" einsetzen möchte, ich habe sie ist in meiner deutschen Language-Seite wie folgt definiert:
define("href23","footer.php?lang=de");


Zu Deinen Fragen:
Aber für eine genaue Antwort zwei Fragen:
1) du willst den Inhalt des Templatefiles der Konstanten PAGE_FOOTER zuweisen?
2) Was ist "href23"? Direkt der Name der Datei, die im Verzeichnis liegt das in $Stemplate abgespeichert ist?

Meine Konstante ist "href23", also die Seite "footer.php"

Ich hoffe es ist nun einigermaßen verständlich und Du kannst mir einen Tipp geben.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 23. April 2005 13:26

Code: Select all
$tpl->assign( array(
...
PAGE_FOOTER => implode("",file("$Stemplate/footer.php"))
));

Ah :-) irgendwie hatte ich schon einen Verdacht das dies Teile einer Array-Deklaration war...

BTW:
Code: Select all
define("href23","footer.php?lang=de");
...
PAGE_FOOTER => implode("",file("$Stemplate/".href23))

Das wird so aber nicht funktionieren, da der Footer ja nicht über eine URL aufgerufen wird. Den GET-Parameter "?lang=de" kannst du hier nicht benutzen.

Hast du eine Möglichkeit mehrere Footer zu machen (footer.de.php, footer.en.php, usw.)?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 23. April 2005 13:40

Hallo Wiedmann,

das ist ja eine Enttäuchung.
Ich kann mehrere Footer machen, kein Problem.

Speziell in dieser Seite wollte ich aber mehrere Konstanten einsetzten, z.B. hier:
Code: Select all
$tpl->define(   array(add => "add_1.php"));

und hier:
Code: Select all
$tpl->define(   array( add_sub => "add_sub.php" ));


das geht wohl dann alles nicht, oder?

Wie bekomme ich dann eine Verlinkung auf die einzelnen Länder-Seiten hin, wenn ich hier nichts machen kann?

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 23. April 2005 13:56

$tpl->define( array(add => "add_1.php"));

Gibt's die Zeile so schon, oder hast du das "define" hier erfunden. Du kannst ja nur solche Methoden benutzen welche die Klasse ($tpl) auch kennt. Dazu müsste man aber auch die Templateengine von dir kennen und können. (Vielleicht kennt die Engine ja auch Funktionen zur Mehrsprachigkeit)


Aber mal zu diesem Codebeispiel:
Code: Select all
$tpl->assign( array(
...
PAGE_FOOTER => implode("",file("$Stemplate/footer.php"))
));


Gehen wir davon aus, du hättest mehrere footer (footer.de.php, footer.en.php, usw.)´.

Du könntest jetzt eine Variable mit dem passendem Sprachkürzel belegen und damit den korrekten Footer einbinden:
Code: Select all
$lang = 'de';
$tpl->assign( array(
...
PAGE_FOOTER => trim(@file_get_contents($Stemplate.'/footer.'.$lang.'.php'))
));


Oder Für jede Sprache ein eigenes Directory "$Stemplate". Aber schau erst mal was dir die Templateengine da alles bietet.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 23. April 2005 14:16

Hi Wiedmann,

Zitat:
$tpl->define( array(add => "add_1.php"));

Gibt's die Zeile so schon, oder hast du das "define" hier erfunden. Du kannst ja nur solche Methoden benutzen welche die Klasse ($tpl) auch kennt. Dazu müsste man aber auch die Templateengine von dir kennen und können. (Vielleicht kennt die Engine ja auch Funktionen zur Mehrsprachigkeit)

Es steht so in dem Script aus dem Linkprogramm.
Die "function define" ist wie folgt definiert:

Code: Select all
function define ($file_array,$fname="") {

   if (!is_array($file_array)) {
        if (!file_exists($this->Root . $fname))
        {
            $this->errmsg(" There is no $fname file ");
        }
        $this->FileList[$file_array] = implode("",@file($this->Root . $fname));
    }
   
   else    {
       while ( list ($key,$val) = each ($file_array) ) {
            if (!file_exists($this->Root . $val))
            {
                $this->errmsg(" There is no $val file ");
            }
           $this->FileList[$key] = @implode("",@file($this->Root . $val));
        }
   }

}


Habe es zwischendurch mal mit einer Konstanten versucht und prompt sagt mir PHP:
Stemplate error : There is no add_1.php?lang=de file

Heist das, ich muss auch hier mehrere Seiten anlegen?

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 23. April 2005 14:36

Habe es zwischendurch mal mit einer Konstanten versucht und prompt sagt mir PHP: Zitat:
Stemplate error : There is no add_1.php?lang=de file

Heist das, ich muss auch hier mehrere Seiten anlegen?

Yup. Die Aufgabe einer Templateengine ist halt mal, das externe Dateien an passender Stelle in das aktuelle Script eingebunden werden (und nicht über den Browser und eine URL aufgerufen werden).

Also anstatt hier was "reinzupfuschen", würd ich schauen ob die Engine sowas von sich aus kann, oder eine andere nehmen, die diese Funktion bietet.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 23. April 2005 14:43

Hi Wiedmann,

heute ist es ein unbefriedigender Tag, war so happy mit der Language-Version. Nun klappt nichts.
Die Sprachübergabe streikt auch an manchen Stellen, werds wohl finden.

Ich Danke Dir für Deine Mühe und Ausführungen.

Viele Grüsse
Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest