template parser kombinieren

xlanhackerx

Mitglied
Hallo liebe Community.

Da ich im Moment dabei bin eine kleine Website auf Basis der PHP Templates

Allerdings gefällt mir diese Zusammenstellung noch nicht ganz, denn was mir persönlich fehlt ist die Möglichkeit eine verwendung von Sprachen miteinzubringen.

dazu werde ich im ordner lang zwei dateien anlegen: lang_de.php und lang_en.php

Englisch nach Deutsch

PHP:
<?php
$lg = array();
$lg['welcome'] = "willkommen";
..
..
..
?>

Deutsch nach Englisch

PHP:
<?php<?php
$lg = array();
$lg['willkommen'] = "welcome";
..
..
..
?>

Nun müsste ich aber dem jetztigen Code beibringen noch zusätzlich den geparsten Text durch Schlüsselwörter zu ersetzen !!
PHP:
function gettemplate($template,$endung="html")
{
return str_replace("\"","\\\"",implode("",file($template.".".$endung)));
}

Bräuchte Hilfe um das ganze umzuschreiben.
Würde gerne die aktuelle Version übernehmen, heißt duch angabe einer Variable ein anderes Template zu includen !!

Da ich nur diese zwei Sachen benötige, verzichte ich bewusst auf Möglichkeiten wie Smarty&Co.


Danke schonmal.

Mfg. Oliver
 
Moin Oliver,

das ginge bspw. so:
Code:
function gettemplate($template,$endung="html")
{
  return preg_replace(
    array_map(
      create_function('$a','return "@\b".$a."\b@";'),
      array_keys($GLOBALS['lg'])
    ),
  $GLOBALS['lg'],
  str_replace("\"","\\\"",file_get_contents($template.".".$endung)));
}

Es wird der Array $lg genommen, und alle Vorkommen der Array-Keys durche den Wert der dazugehörigen Elemente ersetzt...fertsch.

Wobei ich es nicht für empfehlenswert halt, dies so zu tun, das kann ungeahnte und vor allem ungewollte Ergebnisse erzielen :-)
 
OK vielen Dank.

Allerdings würde ich gerne das System auch steuern können, denn deine jetztige Methode ersetzt immer die Werte der Sprachdateien.

PHP:
// index.php

if ( isset($_GET['lang']) ) {
$_SESSION['lang'] = $_GET['lang'];
}
elseif ( !isset($_SESSION['lang']) ) {
$_SESSION['lang'] = 'de'; // Standartsprache
} 

//config.php
switch($_SESSION['lang']) { 
        case "de": 
            include("./lang/lang_de.php");
        case "en": 
             include("./lang/lang_en.php");
        default: 
             include("./lang/lang_de.php");
            break;    
    }

Nun würde ich auch gerne die "Sprachersetzung deaktivieren könne, dies wird über eine Mysqldatenbank geschehen.

Also müsste das dann doch so aussehen oder ?
PHP:
//config.php

$site_lang="1"; // 1=eingeschaltet und o=ausgeschaltet

//Templateparser

function gettemplate($template,$endung="html")
{
if($site_lang="1")
{
return preg_replace(
    array_map(
      create_function('$a','return "@\b".$a."\b@";'),
      array_keys($GLOBALS['lg'])
    ),
  $GLOBALS['lg'],
  str_replace("\"","\\\"",file_get_contents($template.".".$endung)));
}
else
{
return str_replace("\"","\\\"",implode("",file($template.".".$endung)));
}
}

Mfg. Oliver
 
Hmm diese Variante verstehe ich jetzt allerdings nicht ganz.
Bei deinem Script wird eine Funktion erzeugt die doch die Arrays im Prinzip erzeugt oder nicht


Irgentwie scheine ich im Moment nicht ganz durchzupeilen xD.

Mfg. Oliver
 
Die Arrays beziehen ihren Inhalt aber aus dem Ausgangsarray(im Beispiel $lg)
Wenn der Ausgangsarray leer ist, bekommt die Funktion auch leere Arrays und es wird nichts ersetzt.
 
Zurück