Modul GX2: Bestellkommentarbausteine

Thema wurde von HolgerNils (xycons.de), 5. September 2012 erstellt.

  1. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    #1 HolgerNils (xycons.de), 5. September 2012
    Zuletzt bearbeitet: 21. September 2012
    Wir tragen in den Kommentaren der Bestellung wiederkehrend recht gleichbleibende Informationen für den Kunden ein, die dann auch an den Kunden geschickt werden. Um hier Tipparbeit zu sparen haben wir uns kleine Textbausteine generiert.

    So sieht das Ergebnis aus...
    Eine kleine Verwaltung, welche das Erfassen von sprachenspezifischen Bausteinen erlaubt:
    module1.JPG

    Und schliesslich die Einbindung auf der Bestellbearbeitungsseite um die Bausteine abzurufen:
    module2.JPG

    Jeder Klick auf die Buttons füllt das Kommentarfeld mit dem vordefinierten Text aus der Verwaltung in der Kundensprache.

    EDIT 21.09.2012:
    Die nachfolgend geänderte Version unterstützt nun Firefox, IE, Opera, Chrome und Safari etc.
    nachdem der erste Wurf leider nur im Firefox funktioniert hat. Für die Updater: Die notwendigen Änderungen für die Browserkompatibilitätsanpassungen sind italic in hellerem blau eingearbeitet.

    HINWEIS:
    Aus dem Forum kopierter Code birgt das Risiko, dass beim Einfügen im Forum zusätzliche Zeichen im Code auftauchen,die ggf. im PHP-Code dann stören und zu Fehlfunktionen oder Fehlern führen können. Daher bitte im Zweifelsfall oder sogar direkt die entsprechenden Passagen aus den jeweiligen Dateien des ZIP-Files entnehmen!


    Und so kann man es einbauen:

    Folgendes SQL auf der Datenbank ausführen:
    Code:
    CREATE TABLE IF NOT EXISTS `text_modules` (
      `module_id` int(9) NOT NULL AUTO_INCREMENT,
      `module_language_id` int(11) NOT NULL DEFAULT '1',
      `module_button_text` varchar(10) COLLATE latin1_german1_ci DEFAULT '',
      `module_text` text COLLATE latin1_german1_ci,
      PRIMARY KEY (`module_id`)
    )
    
    ALTER TABLE `admin_access` ADD `text_modules` INT( 1 ) NOT NULL DEFAULT '0';
    UPDATE `admin_access` SET text_modules = 1;
    
    Inhalt der anhängenden "Shopdateien.zip" in die Shopstruktur hochladen, es werden keine Dateien überschrieben.
    Das ZIP beinhaltet die Menüergänzungen für den Adminbereich, die PHP-Dateien und Sprachdefinitionen.

    Nun geht aber die Bastelei los, denn wie man die /admin/orders.php updatesicher verändern kann ist mir schier ein Gerätsel...

    Notwendige Änderungen in /admin/orders.php...
    Einfügen am Anfang über dem ersten "require":
    Code:
    ...
       Released under the GNU General Public License
       --------------------------------------------------------------*/
    
    [COLOR=blue]  define('TABLE_TEXT_MODULES', 'text_modules');
      define('TABLE_HEADING_TEXTBLOCKS', 'Kommentarbausteine');[/COLOR]
    
    require ('includes/application_top.php');
    ...
    
    Blaue Zeilen einfügen vor dem farblich grün markierten Block
    Code:
    [B][COLOR=blue]//Templates-GX2 (Start)
    if (isset($oID)) {
        $oID = xtc_db_prepare_input($_GET['oID']);
        $clanguage_query = xtc_db_query("SELECT language FROM " . TABLE_ORDERS . " WHERE orders_id = '" . xtc_db_input($oID) . "'");
        $clanguage = xtc_db_fetch_array($clanguage_query);
        $customer_lang=$clanguage['directory'];
        $clang_query = xtc_db_query("select languages_id from " . TABLE_LANGUAGES . " where directory = '" . $clanguage['language'] . "'");
        $clang = xtc_db_fetch_array($clang_query);
        $customer_lang_id=$clang['languages_id'];
        if($customer_lang_id == '') {
           $customer_lang_id = '2';
           $customer_lang = 'german';
        } 
    } else {
        $customer_lang_id = '2';
        $customer_lang = 'german';
    }
    
    $textmodule_ids = array ();
    $textmodule_id_array = array();
    $textmodule_query = xtc_db_query("select * from " .TABLE_TEXT_MODULES. " where module_language_id = '" .$customer_lang_id. "' order by module_id");
    while ($textmodule_id = xtc_db_fetch_array($textmodule_query)) {
           $textmodule_ids[] = array ('id' => $textmodule_id['module_id'], 'text' => $textmodule_id['module_button_text'], 'content' => strip_tags($textmodule_id['module_text']) );
           $textmodule_id_array[$textmodule_id['module_id']] = $textmodule_id['module_id'];
    }
    //Templates-GX2 (Ende)[/COLOR][/B]
    
    [COLOR=green]if (!isset($lang)) $lang=$_SESSION['languages_id'];
    $orders_statuses = array ();
    $orders_status_array = array ();
    $orders_status_query = xtc_db_query("select orders_status_id, orders_status_name from ".TABLE_ORDERS_STATUS." where language_id = '".$lang."'");
    while ($orders_status = xtc_db_fetch_array($orders_status_query)) {
        $orders_statuses[] = array ('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']);
        $orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
    }
    switch ($_GET['action']) {
    
        // bof gm
    ...[/COLOR]
    
    Suchen nach "<!-- ORDERS - STATUS SEND --> und nach dem grün markierten Block die blauen Zeilen einfügen, vor dem nachfolgenden grünen Block:
    Code:
    [COLOR=green]<!-- ORDERS - STATUS SEND -->
                        <table border="0" width="100%" cellspacing="0" cellpadding="0" class="pdf_menu">
                            <tr>
                                <td class="dataTableHeadingContent" style="border-right: 0px;">
                                    <?php echo TABLE_HEADING_STATUS; ?>
                                </td>
                            </tr>
                        </table>
                        <?php echo xtc_draw_form('status', FILENAME_ORDERS, xtc_get_all_get_params(array('action')) . 'action=update_order'); ?>
                        <table border="0" width="100%" cellspacing="0" cellpadding="2" class="gm_border dataTableRow">
                            <tr>
                                <td width="160" class="main" valign="top">
                                    <?php echo TABLE_HEADING_COMMENTS; ?>
                                </td>
                                <td class="main" valign="top">
                                    <?php echo xtc_draw_textarea_field('comments', 'soft', '60', '3', $order->info['comments']); ?>
                                </td>
                            </tr>[/COLOR]
    
    [COLOR=blue]<!-- Templates-GX2 (Start) -->
                            <tr>
                                <td width="160" class="main" valign="top">
                                    <?php echo TABLE_HEADING_TEXTBLOCKS; ?>
                                </td>
                                <td class="main" valign="top">
                                <?php 
    [COLOR=deepskyblue]                            foreach($textmodule_ids as $k => $v) {
                                    $textmodule_button_content = "<span>" . $v['content']. "</span>"; 
                                    $textmodule_button_content = str_replace("<br />", "_", $textmodule_button_content);
                                    $textmodule_button_text = '"' .$v['text']. '"'; 
                                    $textmodule_button_id = '"' .'mtext_' .$v['id']. '"'; 
                                    echo ' <input type="button" name=' .$textmodule_button_id. ' value=' .$textmodule_button_text. ' onclick="javascript:js_' .$v['id']. '()" >';
                                }
     foreach($textmodule_ids as $k => $v) {
      $textmodule_button_content = '"' . preg_replace("/\r|\n/s", "|", $v['content']) . '"';
      echo "<script type='text/javascript'>\n"; 
      echo "function js_" . $v['id'] . "() {\n"; 
      echo "var inText = " .$textmodule_button_content. ";\n"; 
      echo "var inArray;\n";
      echo "inArray = inText.split('||');\n";
      echo "document.forms['status']['comments'].value  = inArray[0]; \n";
      echo " document.forms['status']['comments'].value += '\\n'\n";  
      echo "var n = inArray.length; \n"; 
      echo "for (i=1;i<n;i++)\n";
      echo " {\n"; 
      echo " document.forms['status']['comments'].value += inArray[I][i]; \n"; 
      echo " document.forms['status']['comments'].value += '\\n'\n";  
      echo " }\n";
      echo "}\n";
      echo "</script>\n\n"; 
     }
    [/I][/COLOR]                             ?>
                                </td>
                            </tr>
    <!-- Templates-GX2 (Ende) -->[/COLOR]
    
    [COLOR=green]                        <tr>
                                <td width="160" class="main" valign="top">
                                    <?php echo ENTRY_STATUS; ?>[/COLOR]
    ...
    
    Fertig ;-)
    Have Fun.
     

    Anhänge:

  2. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.984
    Danke erhalten:
    6.097
    Danke vergeben:
    1.079
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Ich nutze dafür dieses
    (Link nur für registrierte Nutzer sichtbar.)
     
  3. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Gibt mehrere, richtig. Will mich aber in das Ding einarbeiten und da sind solche kleinen Projekte hilfreich. Und wenn es noch wem nützt umso besser ;-)
    Verstehe allerdings nicht so ganz, warum Gambio solche Sachen nicht in den Standard einbaut und ihr Produkt somit aufwertet und überzeugender macht. Module - meist für xtc - gibts ja viele und viele sehr gute. Die einmal ins GX2 umgesetzt und nachhaltig integriert und die Leute sind happy - vor allem auch Neukunden ;-)
     
  4. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.984
    Danke erhalten:
    6.097
    Danke vergeben:
    1.079
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    Das Versteh ich auch nicht. Gibt so einiges was man eh als braucht und sich erst mal als Modul einbauen muss
    Sendungsverfolgung, Bestellkommentare Vorlagen, RSS-Feed der neusten Artikel, und so Kleinigkeiten.

    Mal schauen was da noch so kommt. Hoffe die Eigenschaften sind bald endlich mal durchgehend integriert....
     
  5. Manni_HB

    Manni_HB G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Mach´ Dir nix draus - das versteht keiner!!
    Die Liste der "kleinen" Verbesserungen wäre übrigens kilometerlang!! :)
     
  6. Daniel (Gambio)

    Daniel (Gambio) Erfahrener Benutzer

    Registriert seit:
    8. April 2011
    Beiträge:
    1.901
    Danke erhalten:
    1.620
    Danke vergeben:
    424
    Die Liste ist tatsächlich kilometerlang und wir bauen je bereits ständig kleine Module und Features ein, aber auch das kostet Zeit und muss getestet werden und was für den einen eine total sinnvolle Erweiterung ist, ist für den Anderen komplett nutzlos und er wünscht sich, dass endlich die Eigenschaften Filter weiterentwickelt werden. Ich sage es deshalb immer wieder die Mischung machts. Tragt solche Dinge bitte unbedingt auch in die Wunschliste mit ein, denn wir versuchen darüber immer mehr Rücksicht auf Eure Wünsche zu nehmen.

    Deine Lösung für die Bausteine sieht übrigens gut aus, das sehen wir uns mal genauer an.
     
  7. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Kleines Update. Die Admin-Menüergänzungen gehören natürlich nach /user_classes/conf/AdminMenu ;-) Sorry.
     

    Anhänge:

  8. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Vielleicht stell ich mich ja nur blöd an, aber: Ich habe alles aus der Datei "Kommentarbausteine2.zip" in meinen Shop geladen, die ANpassungen der orders.php durchgeführt, finde aber den Menüeintrag in der Adminoberfläche nicht, wo ich die Texte definieren kann. Habe alles durchsucht, aber nichts gefunden. Cache geleert, aus- und wieder eingeloggt, aber ich finde den Menüeintrag einfach nicht. Wo steckt der denn?

    In der Bestellbearbeitung ist der Punkt "Kommentarbausteine" drin...
     
  9. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Nein, das ist eine GX2-Eigenheit, bei der ich die ich auch immer hängen bleibe. Veränderungen im ADMIN-Menü über die XML-Struktur durchgeführt (wie es hier der Fall ist) sind irgendwie hartnäckig.

    Meiner Erfahrung nach musst du auch den 3. Cache "auslösen", also dieser hier "Cache für Ausgabe der Kategoriemenüs neu erzeugen".
    Ggf. auch Browsercache löschen, aber er soltle dann auftauchen im Bereich "Konfiguration" (Order-Text-Module)
     
  10. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Vorrübergehend kommst Du auch so dran:
    http://www.[DeinShop]/admin/text_modules.php
     
  11. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    OK, danke für die schnelle Antwort. Habe nun über Toolbox > Cache leeren alles geleert, was möglich war, dann vom Shop abgemeldet, Cache des Browsers gelöscht, Shop wieder aufgerufen und angemeldet, es taucht immer noch nicht unter Konfiguration auf :-(

    Beim direkten Aufruf der Seite erscheint folgende Fehlermeldung:

    Code:
    WARNING(512): "SQL Error" in /homepages/33/d32916248/htdocs/teelirium/inc/xtc_db_error.inc.php:33 (Details)
    Backtrace:
    #0  trigger_error called at [/homepages/33/d32916248/htdocs/teelirium/inc/xtc_db_error.inc.php:33]
    #1  xtc_db_error called at [/homepages/33/d32916248/htdocs/teelirium/inc/xtc_db_query.inc.php:77]
    #2  xtc_db_query called at [/homepages/33/d32916248/htdocs/teelirium/admin/includes/functions/general.php:120]
    #3  xtc_check_permission called at [/homepages/33/d32916248/htdocs/teelirium/admin/includes/application_top.php:635]
    #4  require called at [/homepages/33/d32916248/htdocs/teelirium/admin/text_modules.php:22]
    Aber beim Import der Daten in meine DB gab es keine Fehlermeldung.
     
  12. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Prüf bitte nochmal nach, ob die Datei "menu_text_modules.xml" im folgenden Verzeichnis liegt: /user_classes/conf/AdminMenu
    Ggf. liegt sie in /system/conf/AdminMenu, das ist aber nicht gut und wurde von mir an anderer Stelle bei einem anderen Modul korrigiert, evt. hier noch nicht.
     
  13. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Das SQL für die Rechte hast Du ja durchlaufen lassen!?

    Code:
    ALTER TABLE `admin_access` ADD `text_modules` INT( 1 ) NOT NULL DEFAULT '0';
    UPDATE `admin_access` SET text_modules = 1;
     
  14. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Die Datei lag in beiden Ordnern, ich habe sie aus dem Ordner /system/conf/AdminMenu rausgelöscht und sie liegt nur in /user_classes/conf/AdminMenu - dann wieder alle Caches gelöscht, aber das Menü taucht leider immer noch nicht auf und bei direktem Aufruf der Seite lande ich im gleichen Fehler :-(
     
  15. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Das SQL-Kommando ist sicher durch?
    Code:
    ALTER TABLE `admin_access` ADD `text_modules` INT( 1 ) NOT NULL DEFAULT '0'; UPDATE `admin_access` SET text_modules = 1;
     
  16. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Habe den SQL Befehl nochmal auf der DB gemacht. Nun taucht der Eintrag im Menü auf. Vermute, dass ich beim ersten Ändern der SQL DB nur den "Create...." eingefügt habe und den "ALTER..." Befehl vergessen/übersehen habe *schäm* :)

    Jetzt taucht es schonmal auf,muss nur noch probieren, ob es auch geht :)
     
  17. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Prima! Hau' rein!
     
  18. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Sooooooo, Die Buttons kann ich anlegen und sie auch auf der Bestellbearbeitungsseite nutzen. Beim Klick auf einen Button wird der Text ins Kommentarfeld wie gewünscht übernommen. Sehr geil, danke für die Programmierung.

    Aber: Nur im Firefox! Leider nicht im Chrome, nicht im IE und nicht im Opera (alles jeweils aktuellste Version). Klicke ich in einem der drei Browser auf einen der Buttons, passiert nichts. Kein Text wird ins Kommentarfeld übernommen, es passiert einfach nichts. Seltsam sowas.... wird aber vielleicht eher eine Einstellung bei mir sein, oder woran könnte das liegen?
     
  19. HolgerNils (xycons.de)

    HolgerNils (xycons.de) G-WARD 2013/2014

    Registriert seit:
    29. Oktober 2011
    Beiträge:
    1.972
    Danke erhalten:
    456
    Danke vergeben:
    369
    Vermutlich reagieren die nicht auf die Art und Weise, wie der Text in die Text-Area übertragen wird oder der vom Button ausgelöste Event wird nicht umgesetzt. Wie man die unterschiedlichen Verhaltensweisen der genannten Browser austrickts und so ein gleiches Verhalten bewirkt bin ich jetzt kein Fachmann von, aber werde mich wohl schlau machen, damit das Tool über alle geläufige Browserhinweg gleich funktioniert. Ich schau mal, bis dahin bitte Firefox nutzen - in dem habe ich auch entwickelt und getestet. Werde wohl nicht umhin kommen mir die anderen doch mal zu installieren. Ich komm drauf zurück ;-)

    Wichtig ist jedenfalls Javascript ist zugelassen.
     
  20. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    OK, Javascript ist bei allen Browsern aktiviert. Ich bin ja mal auf die Weiterentwicklung gespannt! Das ist übrigens eine Riesenhilfe bei der Bestellbearbeitung und spart ja sowas von viel Zeit! Danke für die Programmierung.

    Aber eine kosmetische Frage habe ich noch: Ist es möglich, die Größe der Buttons und vor allem die Anzahl der Zeichen für die Buttonbeschriftung zu erhöhen?