Php code in _header.tpl einbinden

Hallo, ich versuche zur Zeit auf Oxid umzusteigen und habe leider keine Ahnung wie ich einen php code in die _header.tpl rein bekomme.
Ich hoffe ihr könnt mir weiter helfen.

Das soll in template


      {php}
function url_ausgabe() {
$get_var = "";
foreach($_GET as $key => $value) {
$get_var .= "?".$key."=".$value;
}
return $_SERVER['PHP_SELF']."&".$get_var;
}
if(stristr(url_ausgabe(), '1') )
{include("1.php");}
elseif(stristr(url_ausgabe(), '2') )
{include("2.php");}
elseif(stristr(url_ausgabe(), '3') )
{include("3.php");}
elseif(stristr(url_ausgabe(), '4') )
{include("4.php");}
elseif(stristr(url_ausgabe(), '5') )
{include("5.php");}
elseif(stristr(url_ausgabe(), '6') )
{include("6.php");}
else
{include("0.php");}
{/php}

Hallo,

ich gehe davon aus, dass du dir vorher gut überlegt hast, ob du damit Lücken aufmachste oder so!

Wenn du einfach PHP-Code in den Templates ausführen möchtest, kannst du das in OXID so machen:


[{php}]
deinphpcode
[{/php}]

In deinem Fall also so


[{php}]
  function url_ausgabe() {
    $get_var = "";
    foreach($_GET as $key => $value) {
      $get_var .= "?".$key."=".$value;
    }
    return $_SERVER['PHP_SELF']."&".$get_var;
  }
  if(stristr(url_ausgabe(), '1') )
  {include("1.php");}
  elseif(stristr(url_ausgabe(), '2') )
  {include("2.php");}
  elseif(stristr(url_ausgabe(), '3') )
  {include("3.php");}
  elseif(stristr(url_ausgabe(), '4') )
  {include("4.php");}
  elseif(stristr(url_ausgabe(), '5') )
  {include("5.php");}
  elseif(stristr(url_ausgabe(), '6') )
  {include("6.php");}
  else
  {include("0.php");}
[{/php}]

Gruß Joscha

das klappt leider noch nicht so ganz ich habe jetzt erstmal eine Datei included


[{ include file="1.php" }]

wie muss ich den Rest anpassen?
ich habe es so versucht nur ist dann der shop nicht mehr erreichbar


[{php}]
  function url_ausgabe() {
    $get_var = "";
    foreach($_GET as $key => $value) {
      $get_var .= "?".$key."=".$value;
    }
    return $_SERVER['PHP_SELF']."&".$get_var;
  }
  if(stristr(url_ausgabe(), '1') )
 [{ include file="1.php" }]
  elseif(stristr(url_ausgabe(), '2') )
[{ include file="2.php" }]
  elseif(stristr(url_ausgabe(), '3') )
  [{ include file="3.php" }]
  elseif(stristr(url_ausgabe(), '4') )
  [{ include file="4.php" }]
  elseif(stristr(url_ausgabe(), '5') )
  [{ include file="5.php" }]
  elseif(stristr(url_ausgabe(), '6') )
 [{ include file="6.php" }]
  else
  [{ include file="0.php" }]
[{/php}]  


[QUOTE=teodor;36041]das klappt leider noch nicht so ganz ich habe jetzt erstmal eine Datei included


[{ include file="1.php" }]

wie muss ich den Rest anpassen?
ich habe es so versucht nur ist dann der shop nicht mehr erreichbar


[{php}]
  function url_ausgabe() {
    $get_var = "";
    foreach($_GET as $key => $value) {
      $get_var .= "?".$key."=".$value;
    }
    return $_SERVER['PHP_SELF']."&".$get_var;
  }
  if(stristr(url_ausgabe(), '1') )
 [{ include file="1.php" }]
  elseif(stristr(url_ausgabe(), '2') )
[{ include file="2.php" }]
  elseif(stristr(url_ausgabe(), '3') )
  [{ include file="3.php" }]
  elseif(stristr(url_ausgabe(), '4') )
  [{ include file="4.php" }]
  elseif(stristr(url_ausgabe(), '5') )
  [{ include file="5.php" }]
  elseif(stristr(url_ausgabe(), '6') )
 [{ include file="6.php" }]
  else
  [{ include file="0.php" }]
[{/php}]  


[/QUOTE]
Das kann so auch nicht funktionieren, der Code hat viele Fehler…

Was willst Du denn erreichen?

Welche Werte werden den in $_GET übergeben?

[QUOTE=jkrug;36030]Hallo,

ich gehe davon aus, dass du dir vorher gut überlegt hast, ob du damit Lücken aufmachste oder so!


Wozu diese Verunsicherung???

Das ist doch ein prima Platz, um schnell eine Kleinigkeit zu lösen, wofür man sich mit einer Modullösung einen Wolf programmieren muss.

[QUOTE=avenger;36043]
Wozu diese Verunsicherung???

Das ist doch ein prima Platz, um schnell eine Kleinigkeit zu lösen, wofür man sich mit einer Modullösung einen Wolf programmieren muss.[/QUOTE]

@avenger: Keine Frage! Ich wollte es nur gesagt haben. Das sollte nicht verunsichern sondern nur als Anregung dienen. Auch wir haben solche Lösungen schon eingesetzt. Man muss eben nur Vor- und Nachteile abwägen! Das war alles. Und weder du noch ich können beurteilen was sich hinter den includes verbirgt.

@teodor Zurück zum Thema. Hast du unter Stammdaten - > Grundeinstellungen -> System -> weitere Einstellungen die Option “Was soll mit PHP-Code in Templates gemacht werden” richtig eingestellt?

[QUOTE=jkrug;36050]
@teodor Zurück zum Thema. Hast du unter Stammdaten - > Grundeinstellungen -> System -> weitere Einstellungen die Option “Was soll mit PHP-Code in Templates gemacht werden” richtig eingestellt?[/QUOTE]
Das habe ich schon gemacht,[QUOTE=teodor;]
das klappt leider noch nicht so ganz ich habe jetzt erstmal eine Datei included
[/QUOTE]
Das Problem scheid so denke ich hier zu liegen

function url_ausgabe() {
    $get_var = "";
    foreach($_GET as $key => $value) {
      $get_var .= "?".$key."=".$value;
    }
    return $_SERVER['PHP_SELF']."&".$get_var;
  }

[QUOTE=avenger;]
Was willst Du denn erreichen?
[/QUOTE]
Ich möchte damit erreichen das wenn in der Url ein bestimmtes Wort oder Zahl vorkommt das dann eine datei ausgegeben wird.

[QUOTE=avenger;]
Welche Werte werden den in $_GET übergeben? [/QUOTE]
Keine Ahnung ich kenne mich ehr schlecht mit php aus,den code habe ich mir vor Jahren mal Programmieren lassen.

[QUOTE=avenger;]
ich gehe davon aus, dass du dir vorher gut überlegt hast, ob du damit Lücken aufmachste oder so![/QUOTE]
Ich denke nicht das dadurch eein Problem entstehen kann.

[QUOTE=teodor;36057]Ich möchte damit erreichen das wenn in der Url ein bestimmtes Wort oder Zahl vorkommt das dann eine datei ausgegeben wird.[/QUOTE]
Wie genau sehen denn solche URLn aus?

[QUOTE=avenger;36077]Wie genau sehen denn solche URLn aus?[/QUOTE]
z.B so:
http://www.domain.de/Irgendwas/Wasanderes/
Aber warum?

[QUOTE=teodor;36087]z.B so:
http://www.domain.de/Irgendwas/Wasanderes/
Aber warum?[/QUOTE]
Weil da ja keine Zahlen drin sind, die ausgewertet werden könnten…

[QUOTE=avenger;36089]Weil da ja keine Zahlen drin sind, die ausgewertet werden könnten…[/QUOTE]
die Zahlen waren ja auch nur ein Beispiel,ich dachte es macht keinen unterschied ob Zahlen oder Buchstaben.

[QUOTE=teodor;36104]die Zahlen waren ja auch nur ein Beispiel,ich dachte es macht keinen unterschied ob Zahlen oder Buchstaben.[/QUOTE]

Dann wollen wir diesen gräuslichen Code mal etwas aufräumen…

[B]Variante 1: [/B]Einbindung von ‘0.php’ bis ‘6.php’ (müssen im Shop Root-Verzeichnis liegen!)


$uri=$_SERVER['PHP_SELF'];
$patterns=array('0','1','2','3','4','5','6');
foreach ($patterns as $pattern)
{
  if (stripos($uri,$pattern)!==false)
  {
    include($pattern.'.php');
    break;
  }
}
[{/php}]

[B]Variante 2:[/B] Einbindung von ‘1.tpl’ bis ‘6.tpl’ (müssen in ‘out/basic/tpl’ liegen!)

[{php}]
$uri=$_SERVER['PHP_SELF'];
$patterns=array('0','1','2','3','4','5','6');
foreach ($patterns as $pattern)
{
  if (stripos($uri,$pattern)!==false)
  {
    $this->_tpl_vars['include']=$pattern.'.tpl';
    break;
  }
}
[{/php}]
[{if $include}]
[{include file=$include}]
[{/if}]

Durch Definition der interessierenden Suchmuster in

$patterns=array('0','1','2','3','4','5','6');

kann man das sehr einfach erweitern, ohne weiteren Code ändern zu müssen.

Wenn man nicht will, dass die auszuführende Aktion den gleichen Namen, wie das Suchmuster hat, kann man so vorgehen:

[{php}]
$uri=$_SERVER['PHP_SELF'];
$patterns=array('0','1','2','3','4','5','6');
$actions=array('6','5','4','3','2','1','0');
foreach ($patterns as $key=>$pattern)
{
  if (stripos($uri,$pattern)!==false)
  {
    include($actions[$key].'.php');
    break;
  }
}
[{/php}]

Danke für deine mühe,aber irgend wie läuft das nicht ich bekomme nichts angezeigt.

Kannst du mir den code erklären?
Wo werden den die urls auf das vorhanden sein eines Worts überprüft?

$patterns=array('0','1','2','3','4','5','6');

Ich nehme an das hier die einzelnen php Dateien geladen werden.
Dies könnte ich dann auch so schreiben?

$patterns=array('erstedatei','zweitedatei','drittedatei');

Hier wird angegeben welcher Dateityp eingebunden werden soll?

 include($pattern.'.php');

Ist das richtig?

Ich will euch nochmal die funktion schildern.
Mein code den ich in einem Gambiosystem verbaut hatte und der 100%ig lief hatte die aufgabe:
Wenn in der url das Wort “Horst” vorkommt dann include die horst.php
Wenn in der url das Wort “Hugo” vorkommt dann include die hugo.php
Wenn in der url das Wort “Karl” vorkommt dann include die karl.php
Wenn in der url das keins der Wörter vorkommt dann include die keinwort.php

Ich habe meinen ursprünglichen Code nochmal verändert


[{php}]
function url_ausgabe() {
$get_var = "";
foreach($_GET as $key => $value) {
$get_var .= "?".$key."=".$value;
}
return $_SERVER['PHP_SELF']."&".$get_var;
}
[{if(stristr(url_ausgabe(), 'hugo') )
 include file="hugo.php" }]
[{elseif(stristr(url_ausgabe(), 'horst') )
 include file="horst.php" }]
[{elseif(stristr(url_ausgabe(), 'karl') )
 include file="karl.php" }]
[{else
 include file="keinwort.php" }]
[{/php}]


Hier bei bekomme ich einen:

HTTP - 500 Interner Serverfehler

Könnt Ihr mir Verraten wo der fehler steckt?
Es muss ja an der schreibweise liegen da bei Oxid php code soweit ich weiss anders als bei Gambio eingebunden wird.
Ich denke ich habe die

[{

und die

}]

falsch gesetzt.

[QUOTE=teodor;36161]Danke für deine mühe,aber irgend wie läuft das nicht ich bekomme nichts angezeigt.

Kannst du mir den code erklären?
Wo werden den die urls auf das vorhanden sein eines Worts überprüft?

$patterns=array('0','1','2','3','4','5','6');

Ich nehme an das hier die einzelnen php Dateien geladen werden.
Dies könnte ich dann auch so schreiben?

$patterns=array('erstedatei','zweitedatei','drittedatei');

Hier wird angegeben welcher Dateityp eingebunden werden soll?

 include($pattern.'.php');

Ist das richtig?

Ich will euch nochmal die funktion schildern.
Mein code den ich in einem Gambiosystem verbaut hatte und der 100%ig lief hatte die aufgabe:
Wenn in der url das Wort “Horst” vorkommt dann include die horst.php
Wenn in der url das Wort “Hugo” vorkommt dann include die hugo.php
Wenn in der url das Wort “Karl” vorkommt dann include die karl.php
Wenn in der url das keins der Wörter vorkommt dann include die keinwort.php

Ich habe meinen ursprünglichen Code nochmal verändert
[/QUOTE]

Hallo teodor,

versuche doch den - wesentlich eleganteren - code von avenger zu verstehen. Das was du hast, ist “Gemurkse” im Vergleich und macht auch nichts anderes.

Existieren alle Dateien an der richtigen Stelle? Gibt es noch mehr Infos zur Fehlermeldung?

[QUOTE=jkrug;36163]Hallo teodor,

versuche doch den - wesentlich eleganteren - code von avenger zu verstehen.
[/QUOTE]
Habe ich ja schau doch mal bitte in meinem letztem posting.

[QUOTE=jkrug;36163]
Das was du hast, ist “Gemurkse” im Vergleich und macht auch nichts anderes.
[/QUOTE]
Meinen Code habe ich seit Jahren in meinem Gambioshop verbaut und er läuft super,kannst du mir erklären wie der code von avenger funktioniert?
Oder mir sagen ob ih mit meinem versuch den code zu verstehen richtig liege?

[QUOTE=jkrug;36163]
Existieren alle Dateien an der richtigen Stelle? Gibt es noch mehr Infos zur Fehlermeldung?[/QUOTE]
Ja alle Dateien habe ich als php sowie als tpl Datei im root des Shops so wie unter out/basic/tpl Gespeichert,alle Dateien die eingebunden werden funktionieren für sich alleine,getestet habe ich das mit

[{include file="karl.php" }]

[QUOTE=teodor;36165]Habe ich ja schau doch mal bitte in meinem letztem posting.
[/QUOTE]

Habe ich. Und ich habe auch gesehen, dass du das eigentlich verstanden hast. Mir ist nur ein Rätsel, warum du dann wieder zu deinem alten Code zurück gehst.

[QUOTE=teodor;36165]
Meinen Code habe ich seit Jahren in meinem Gambioshop verbaut und er läuft super,kannst du mir erklären wie der code von avenger funktioniert?
Oder mir sagen ob ih mit meinem versuch den code zu verstehen richtig liege?
[/QUOTE]

Ja, du liegst richtig, aber wo im Detail das Problem liegt kann ich aus der Ferne auch nicht sagen. Versuche doch mal die Variable mit einem echo auszugeben statt dem Include. Dann wirst du ja sehen, was für Werte rauskommen.

[QUOTE=teodor;36165]
Ja alle Dateien habe ich als php sowie als tpl Datei im root des Shops so wie unter out/basic/tpl Gespeichert,alle Dateien die eingebunden werden funktionieren für sich alleine,getestet habe ich das mit

[{include file="karl.php" }]

[/QUOTE]

Versucht dein Server vielleicht “Karl.php” einzubinden? Das macht unter Unix einen Unterschied.

[QUOTE=jkrug;36184]Habe ich. Und ich habe auch gesehen, dass du das eigentlich verstanden hast. Mir ist nur ein Rätsel, warum du dann wieder zu deinem alten Code zurück gehst.[/QUOTE]
Weil wenn ich richtig verstanden habe der code nicht die url abfragt.
Und weil ich gerne bei alt bewerten bleibe"Never Touch a Running System":wink:

[QUOTE=jkrug;36184]

Ja, du liegst richtig, aber wo im Detail das Problem liegt kann ich aus der Ferne auch nicht sagen. Versuche doch mal die Variable mit einem echo auszugeben statt dem Include. Dann wirst du ja sehen, was für Werte rauskommen.[/QUOTE]
Werde ich mal ausprobieren,aber wie gesagt das includen ist zur zeit das einzige was funktioniert,ich will nur noch das die if und else abfragen richtig funktionieren.

[QUOTE=jkrug;36184]
Versucht dein Server vielleicht “Karl.php” einzubinden? Das macht unter Unix einen Unterschied.[/QUOTE]
Wo besteht der unterschied zwischen include und einbinden?

[QUOTE=http://php.net/manual/de/function.include.php;]
include() bindet eine angegebene Datei ein und führt sie aus.
[/QUOTE]
Ich will das ja einbinden:confused:

kann es sein das Du Smarty innerhalb des PHP-Blocks verwendest ? Sollte da nich PHP verwendet werden ?!

PHP:

include xyz.php;

Smarty:

[{include file="xyz.php" }]

@tobi73de
So gut kenne ich mich nicht aus aber wenn ich es mit den Smarty Tags einbaue
also so

[{include file="xyz.php" }]

dann gehts.
Ich denke das die if abfragen auch mit einem Smarty Tag versehen werden müssen,nur ist da schon lange mein “wissen” vorbei.

Ich hoffe jemand von euch findet die Zeit und hilft mir weiter.

[QUOTE=teodor;36221]@tobi73de
So gut kenne ich mich nicht aus aber wenn ich es mit den Smarty Tags einbaue
also so

[{include file="xyz.php" }]

dann gehts.
Ich denke das die if abfragen auch mit einem Smarty Tag versehen werden müssen,nur ist da schon lange mein “wissen” vorbei.

Ich hoffe jemand von euch findet die Zeit und hilft mir weiter.[/QUOTE]

Hallo,

also nimm es mir nicht krumm, ich helfe gerne und wir haben dir einen Haufen Tipps gegeben und unterschiedliche Möglichkeiten aufgezeigt. Aber was wir hier nicht leisten können, ist, dir PHP beizubringen. Dazu gibt es aber zig gute Tutorials im Netz.

Zu deiner Frage: Wenn du dir mal die Dateien im tmp-Verzeichnis anschaust, siehst du, dass Smarty auch nur in PHP umgewandelt wird.

aus [{php}] wird <?php

und aus [{/php}] wird ?>

Der Code dazwischen wird nicht geändert. Ergo kann soetwas wie [{if…}] nicht funktionieren, weil das keinen vernünftigen PHP-Quelltext ergibt.

Alles was zwischen [{php}] und [{/php}] steht muss normales PHP sein.

Gruß Joscha

PS: “include” und “einbinden” wurden von mir synonym verwendet.