Könnten man das Sprachdateien-System nicht dahingehend erweitern, dass man eigene Dateien dort anlegt und diese global im Template zur Verfügung stehen OHNE dass sie expelizit im Kopf der Tpl-Datei angegeben werden müssen? Evtl. mit einem Unterordner ..\sections\user\ Dort könnte man sauber nach Inhalten Dateien anlegen: mbr_texte.lang.inc.php mbr_icon.lang.inc.php mbr_irgendwas.lang.inc.php Bis zum Beweis des Gegenteils halte ich dies für eine gute Idee - oder?
Ist eigentlich nicht so schwierig, und, natürlich, sogar updatesicher lösbar... Folgenden Code als "user_classes\overloads\LanguageTextManager\pt_LanguageTextManager.inc.php" speichern (und Cache löschen). PHP: <?php/* --------------------------------------------------------------pt_LanguageTextManager.inc.php 2012-05-19 AvengerGambio GmbHhttp://www.gambio.deCopyright (c) 2012 Gambio GmbHCopyright (c) 2012 Avenger, entwicklung@powertemplate.deExtend language-manager to also load definitions from global language file(s)Released under the GNU General Public License (Version 2)[http://www.gnu.org/licenses/gpl-2.0.html]--------------------------------------------------------------*/class pt_LanguageTextManager extends pt_LanguageTextManager_parent{ function init_from_files($p_section, $p_language_id) { parent::init_from_files($p_section, $p_language_id); $t_sections_path = DIR_FS_CATALOG . 'lang/' .$_SESSION['language']. '/sections/'; $t_lang_file = glob($t_sections_path.'*all_sections.lang.inc.php'); if (is_array($t_lang_file)) { $t_lang_file=$t_lang_file[0]; $t_language_text_content_array = array(); include($t_lang_file); if (sizeof($t_language_text_content_array ) > 0) { $multi_level=false; foreach ($t_language_text_content_array as $key=>$t_lang_array) { if (is_array($t_lang_array)) { //Language file is array of arrays, so only match entries for curretn or 'global' 'section! $multi_level=true; if ($key==$p_section || $key=='global') { $this->add_section($p_section, $t_lang_array); } } else { $this->add_section($p_section, $t_language_text_content_array); } } } } }}?> Das funktioniert dann wie folgt: Zuerst werden die "normalen" Section-Sprachdateien in "lang/german/sections" geladen. Dann wir untersucht, ob es in diesem Verzeichnis Dateien der Form "*all_sections.lang.inc.php" (z.B. "mbr_all_sections.lang.inc.php"), wenn ja, werden auch die Definitionen dieser Datei(en) geladen. Diese Dateien können in 2 Varianten definiert werden: Einstufig: PHP: $t_language_text_content_array = array( 'heading_account' => 'Ihre persönliche Seite', 'order_nr' => 'Bestell-Nr.: ', 'order_status' => 'Status: ', 'order_total' => 'Betrag: ', 'text_address' => 'Adressbuch bearbeiten', 'text_all' => ' (Sämtliche anzeigen)', 'text_articles' => 'Artikel: ', 'text_current' => 'Bisherige Bestellungen', 'text_date' => 'Bestelldatum: ', 'text_delete_account' => 'Account löschen', 'text_edit' => 'Kontodaten bearbeiten', 'text_goto_cat' => 'Gefunden in dieser Kategorie', 'text_login' => 'Anmelden oder neues Konto erstellen', 'text_newsletter' => 'Newsletter abonnieren oder abbestellen', 'text_notifications' => 'Meine Artikelbenachrichtigungen anzeigen oder ändern', 'text_oid' => 'Bestellnummer: ', 'text_orders' => 'Meine bisherigen Bestellungen anzeigen', 'text_password' => 'Passwort ändern', 'text_privacy' => 'Datenschutz', 'text_shipped' => 'Versenden an: ', 'text_status' => 'Bestellstatus: ', 'text_total' => 'Bestellsumme: ', 'text_welcome' => 'Hier ist Ihre persönliche Seite, auf der Sie einen Überblick über Ihre getätigten Bestellungen sowie eine Auflistung Ihrer zuletzt besuchten Artikel finden.<br /><br />Falls Sie ein Konto bei uns haben, können Sie hier außerdem Ihre persönlichen Daten ändern.', 'title_account' => 'Ihre persönlichen Einstellungen', 'title_main' => 'Übersicht', 'title_notification' => 'E-Mail Benachrichtigungen', 'title_orders' => 'Meine Bestellungen', 'title_viewed_products' => 'Ihre zuletzt aufgerufenen Artikel', 'title_welcome' => 'Herzlich willkommen!'); Bei dieser Struktur, bei der alle eigenen Definitionen in einem einstufigen Array vorhanden sind, werden alle Definitionen dieser Datei bei allen angeforderten "Sections" dazu geladen... Mehrstufig: PHP: $t_language_text_content_array = array( 'account' => array( 'heading_account' => 'Ihre persönliche Seite', 'order_nr' => 'Bestell-Nr.: ', 'order_status' => 'Status: ', 'order_total' => 'Betrag: ', 'text_address' => 'Adressbuch bearbeiten', 'text_all' => ' (Sämtliche anzeigen)', 'text_articles' => 'Artikel: ', 'text_current' => 'Bisherige Bestellungen', 'text_date' => 'Bestelldatum: ', 'text_delete_account' => 'Account löschen', 'text_edit' => 'Kontodaten bearbeiten', 'text_goto_cat' => 'Gefunden in dieser Kategorie', 'text_login' => 'Anmelden oder neues Konto erstellen', 'text_newsletter' => 'Newsletter abonnieren oder abbestellen', 'text_notifications' => 'Meine Artikelbenachrichtigungen anzeigen oder ändern', 'text_oid' => 'Bestellnummer: ', 'text_orders' => 'Meine bisherigen Bestellungen anzeigen', 'text_password' => 'Passwort ändern', 'text_privacy' => 'Datenschutz', 'text_shipped' => 'Versenden an: ', 'text_status' => 'Bestellstatus: ', 'text_total' => 'Bestellsumme: ', 'text_welcome' => 'Hier ist Ihre persönliche Seite, auf der Sie einen Überblick über Ihre getätigten Bestellungen sowie eine Auflistung Ihrer zuletzt besuchten Artikel finden.<br /><br />Falls Sie ein Konto bei uns haben, können Sie hier außerdem Ihre persönlichen Daten ändern.', 'title_account' => 'Ihre persönlichen Einstellungen', 'title_main' => 'Übersicht', 'title_notification' => 'E-Mail Benachrichtigungen', 'title_orders' => 'Meine Bestellungen', 'title_viewed_products' => 'Ihre zuletzt aufgerufenen Artikel', 'title_welcome' => 'Herzlich willkommen!' ), 'account_edit' => array( 'csID' => 'Kundennummer:', 'heading_account' => 'Ihre persönliche Daten ändern', 'text_birthdate' => 'Geburtsdatum:', 'text_email' => 'E-Mail-Adresse:', 'text_fax' => 'Telefaxnummer:', 'text_female' => 'Frau', 'text_firstname' => 'Vorname:', 'text_gender' => 'Anrede:', 'text_lastname' => 'Nachname:', 'text_male' => 'Herr', 'text_must' => '* erforderliche Informationen', 'text_tel' => 'Telefonnummer:', 'text_ustid' => 'USt-IdNr.:', 'title_personal' => 'Ihre persönlichen Daten' ),/*Weitere "Section"-Definitionen*/ 'global' => array( 'heading_product_reviews' => 'Rezensionen zu: ', 'heading_reviews' => 'Kundenrezensionen:', 'heading_reviews_write' => 'Was meinen Sie?', 'text_all' => 'Zeige alle Rezensionen', 'text_author' => 'Autor:', 'text_author' => 'Verfasser: ', 'text_bad' => 'SCHLECHT', 'text_date' => 'Datum:', 'text_good' => 'SEHR GUT', 'text_inp_code' => 'Hier eingeben', 'text_input' => 'Ihre Meinung:', 'text_note' => '<span class="strong">ACHTUNG:</span> HTML wird nicht unterstützt!', 'text_product' => 'Artikel:', 'text_rating' => 'Bewertung: ', 'text_rating' => 'Bewertung:', 'text_reviews_link' => 'Zur Rezension', 'text_sec_code' => 'Sicherheitscode', 'text_text' => 'Rezension:', 'title_author' => 'Autor', 'title_date' => 'Datum', 'title_nr' => 'Nr.', 'title_rating' => 'Bewertung' )) Hier haben wir einen mehrstufigen Array von Arrays... Das habe ich implementiert, um in einer Datei alle meine eigenen Definitionen sectionspezifisch zu speichern, der Index der Unterarrays ist dabei der Section-Name. In diesem Modus werden nur die Definitionen für die aktive Section dazu geladen, und(!) die Definitionen der Pseudo-Section 'global'. (Kenner der Materie werden feststellen, dass ich damit das Konzept der Smarty-".conf"-Dateien nachgebildet habe. Ich hasse es einfach, mit zu vielen Dateien arbeiten zu müssen, und habe das lieber alles schön an einer Stelle versammelt...) Da diese eigenen Definitionen als letzte geladen werden, kann man damit natürlich die Standard-Gambio-Definitionen ersetzen. Und es können mehrere solcher Dateien existieren, so dass sich da jeder vergnügen kann.
Der Wahnsinn hat einen neuen Namen: AVENGER Mehrstufig ist ja einfach nur der MegaGeileOberHammer ... nun kann man endlich das schaurige SprachdateienWirrwar in geordnete Bahnen bringen!! DIR EIN GANZ DICKES DANKESCHÖN!!!
Die "...\templates\EyeCandy\module\content.html" lädt wohl keine Sprachdateien - jedenfalls klappt es dort nicht. Eine Idee/Vorschlag/Lösung?