gm_pdf_order.php lädt meine Sprachdatei nicht

Thema wurde von Joschka, 18. Januar 2016 erstellt.

  1. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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)
     
  2. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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 ;)
     
  3. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    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');
     
  4. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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
     
  5. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Nein, dazu braucht es die Datei "lang/german/module/shipping/tableaustria.php", in der die notwendigen Konstanten definiert sind.....
     
  6. Daniel Wu (Gambio)

    Daniel Wu (Gambio) Gambio GmbH
    Mitarbeiter

    Registriert seit:
    30. Juli 2012
    Beiträge:
    210
    Danke erhalten:
    112
    Danke vergeben:
    178
    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:
    <?php
    class 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!
     

    Anhänge:

  7. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    #7 Joschka, 21. Januar 2016
    Zuletzt bearbeitet: 21. Januar 2016
    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
     
  8. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    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.
     
  9. Ed

    Ed Erfahrener Benutzer

    Registriert seit:
    6. November 2011
    Beiträge:
    388
    Danke erhalten:
    188
    Danke vergeben:
    140
    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
     
  10. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    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!
     
  11. Joschka

    Joschka Erfahrener Benutzer

    Registriert seit:
    27. Februar 2012
    Beiträge:
    771
    Danke erhalten:
    114
    Danke vergeben:
    218
    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:
    <?php

    class 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)