Hallo, ich habe das "table" Versandmodul zweimal geklont. Das klappt auch alles wunderbar, da ich mich an diese Anleitung hier gehalten hatte: http://www.gambio-forum.de/threads/19583-Versandart-klonen-kopieren-(table)/page3 Ein Problem tauch allerdings auf: in der Rechnungs-PDF steht unter Versandart nicht der Wert der definierten Konstante für MODULE_SHIPPING_TABLEAUSTRIAEXPRESS_TEXT_TITLE (von mir angelegt), sondern nur "tableaustriaexpress", was der Name des Versandmoduls ist. Kurzum: die Sprachdateien, die bei mir im Ordner lang/german/user_sections/tableaustriaexpress.lang.inc.php liegen, werden nicht geladen. Ich glaube, dass das an folgender Zeile liegt, die in admin/gm_pdf_order.php in Zeile 254 zu finden ist: PHP: $coo_lang_file_master->init_from_lang_file('lang/' . $_SESSION['language'] . '/modules/shipping/' . $gm_shipping . '.php'); Wenn ich nämlich diese Zeile abändere auf PHP: $coo_lang_file_master->init_from_lang_file($gm_shipping); dann funktioniert alles prächtig. Die Sprachdatei wird richtig eingebunden, die Konstante somit gefunden und auf der PDF steht dann "Versandart: Österreich Express", ein Text, der auch wunderbar über Texte anpassen verändert werden kann Jetzt meine Frage: Komme ich irgendwie drumherum, die gm_pdf_order.php anzupassen an dieser Stelle? Wie gesagt, an anderen Stellen werden die Texte ja schön eingebunden, nur in der PDF-Rechnung nicht. Falls es andere Stellen gibt, so habe ich diese zumindest noch nicht entdeckt Freue mich über eine Antwort, Simon (Admin von www.filzfaktor.at)
Bin bei meiner Suche auf folgende Funktion in der Datei "system/classes/languages/LanguageTextManager.inc.php" gestoßen: PHP: /** * old lang file paths are mapped to a section name */ protected function _initMappingArray() { if(!empty($this->sectionMappings)) { return; } $mappingArray = array( 'admin/banner_manager.php' => 'banner_manager', 'admin/banner_statistics.php' => 'banner_statistics', ... (gekürzt) ... 'modules/shipping/selfpickup.php' => 'selfpickup', 'modules/shipping/table.php' => 'table', 'modules/shipping/tableaustria.php' => 'tableaustria', <============== 'modules/shipping/tableaustriaexpress.php' => 'tableaustriaexpress', <========= 'modules/shipping/ups.php' => 'ups', 'modules/shipping/upse.php' => 'upse', 'modules/shipping/yatego.php' => 'shipping_yatego', 'modules/shipping/zones.php' => 'shipping_zones', 'modules/shipping/zonese.php' => 'zonese' ); foreach($this->languages as $languageArray) { foreach($mappingArray as $old => $new) { $old = 'lang/' . $languageArray['directory'] . '/' . sprintf($old, $languageArray['directory']); $new = sprintf($new, $languageArray['directory']); $this->sectionMappings[$old] = $new; } } } Ich habe die oben mit einem pfeil rechts markierten Zeilen hinzugefügt. Danach geht es auch, und meine Vermutung ist, dass dies eine bessere Vorgehensweise ist, da die neuen Module dann überall funktionieren und ich mir eine mühsame Suche erspare. Vll kann ja ein erfahrener User oder ein Gambio-Entwickler mal seine Meinung dazu abgeben. Will nur absichern, dass ich mich nicht auf dem Holzweg befinde hier
Updatesicher ist das dann aber nicht mehr.... Aber eigentlich sollte das standardmäßig funktionieren. Die Sprachdateien werden so in dem Modul eingebunden: PHP: $coo_lang_file_master->init_from_lang_file('lang/' . $_SESSION['language'] . '/modules/shipping/' . $gm_shipping . '.php');
Danke für die Antwort, Avenger. Heißt das, dass ich meine beiden Dateien "tableaustria.lang.inc.php" und "tableaustriaexpress.lang.inc.php" in den Ordner "lang/german/modules/shipping/" verschieben und das "lang.inc" aus dem Dateinamen entfernen sollte (aus tableaustria.lang.inc.php wird tableaustria.php)? Dann würde die von dir erwähnte codezeile in gm_pdf_order.php die Datei ja finden und laden, oder? Allerdings hatte ich zuvor eben gelesen, dass man eigene Sprachdateien eigentlich in lang/german/user_sections unterbringen sollte. LG, Simon
Nein, dazu braucht es die Datei "lang/german/module/shipping/tableaustria.php", in der die notwendigen Konstanten definiert sind.....
Hi! Joschkas Ansatz, sich in das Mapping-Array einzuklinken, war eigentlich schon ganz gut. Das Mapping-Array hatten wir mit dem neuen, dateibasierten Sprachsystem eingeführt. Es dient dazu die Aufrufe veralteter Pfade zu Sprachdateien, auf den neuen Section-Namen zu mappen. Leider hatten wir wohl versäumt die gm_pdf_order dahingehend anzupassen, dass sowohl alte Dateipfade, als auch neue Section-Namen akzeptiert werden. Um dafür nun einen Work-Around zu schaffen, wäre es am einfachsten, das Mapping-Array um einen weiteren Eintrag zu erweitern. Um das auch updatesicher hinzukriegen, würde ich einen Overload des LanguageTextManagers vorschlagen. Ich den Overload einfach mal zusammengeschrieben (und auch angehängt). Lege also einen Ordner "LanguageTextManager" unter system/overloads/ an und lege die Datei dort ab. PHP: <?phpclass MappingArrayExtension extends MappingArrayExtension_parent{ protected function _initMappingArray() { parent::_initMappingArray(); foreach($this->languages as $languageArray) { $mappingArray = array( 'module/shipping/tableaustria.php' => 'tableaustria', 'module/shipping/tableaustriaexpress.php' => 'tableaustriaexpress' ); foreach($mappingArray as $old => $new) { $old = 'lang/' . $languageArray['directory'] . '/' . sprintf($old, $languageArray['directory']); $new = sprintf($new, $languageArray['directory']); $this->sectionMappings[$old] = $new; } } }} Ich hab's ehrlich gesagt nicht getestet, aber das sollte so funktionieren. So können Sprachdateien dann einfach in den user_sections-Ordner gelegt werden. Ob die Datei in irgendeinem Unterordner des user_sections-Ordner liegt ist übrigens egal, weil der Ordner rekursiv ausgelesen wird. Viel Erfolg noch!
Danke, Daniel. Das ist die Art von Lösung, die ich mir vorgestellt hatte. Ein paar Anmerkungen noch von mir, für alle, die das auch machen möchten: - In Daniels Datei fehlt ein "s" im Dateipfad. Es muss "modules/shipping/tableaustria.php" heißen. Ansonsten funktioniert die Datei prächtig - Der Name "tableaustriaexpress" ist wahrscheinlich zu lang, da in der Tabelle orders (in der DB) in der Spalte "shipping_class" folgende Info abgelegt wird: tableaustriaexpress_tableaustriaexpress. Da aber hier nur 32 Zeichen zulässig sind, wird der Inhalt abgeschnitten. Keine Ahnung, ob das kritisch ist, aber zur Sicherheit empfiehlt sich ein kürzerer Name Schöne Grüße Simon- Admin/Filzfaktor
Diese Lösung scheint mit GX3 nicht mehr zu funktionieren. Bei mir hagelt es Fehler im gesamten Adminbereich sobald die MappingArrayExtension.inc.php von Daniel im Shop ist.
Hi Christian, ab 3.1. musst Du LanguageTextManager.inc.php komplett entfernen. Dann musst Du Deine Sprach Datei in die lang/.../original_sections/modules/shipping legen und in Deiner neuen Versandart (diese ins Verzeichnis includes/modules/shipping legen) am Anfang (nach <?php) $languageTextManager = MainFactory::create_object('LanguageTextManager', array(), true); $languageTextManager->init_from_lang_file('NAMESPRACHDATEI'); schreiben. NAMESPRACHDATEI ersetzen mit deiner Sprachdatei enjoi ED
OK, ich hab derzeit noch 3.0.0.0, da habe ich das jetzt direkt im LanguageTextManager eingetragen. Bei 3.2. werde ich das dann machen. DANKE!
Habe die Lösung aus Beitrag #6 modifiziert, so dass sie jetzt auch wieder mit v.3.6.0.2 kompatibel sind system/overloads/LanguageTextManager/MappingArrayExtension.inc.php PHP: <?phpclass MappingArrayExtension extends MappingArrayExtension_parent{ protected function _initMappingArray() { parent::_initMappingArray(); // hier die entsprechenden geklonten Versandmodule eintragen $mappingArray = array( 'modules/shipping/table2.php' => 'table2', 'modules/shipping/table3.php' => 'table3' ); foreach(self::$languages as $languageArray) { foreach($mappingArray as $old => $new) { $old = 'lang/' . $languageArray['directory'] . '/' . sprintf($old, $languageArray['directory']); $new = sprintf($new, $languageArray['directory']); self::$sectionMappings[$old] = $new; } } }} Ed schrieb ein paar Beiträge weiter oben, dass die Sprachdateien an einen anderen Ort verschoben werden sollen. Das hat bei mir nicht funktioniert. Ich habe sie in lang/SPRACHE/user_sections/table2.lang.inc.php gelassen. LG Simon (Admin filzfaktor.at)