Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: ANLEITUNG: Zusätzliches Kommentarfeld in checkout_payment Seite einfügen

    milena

    • Frisch an Board
    • Beiträge: 70
    • Geschlecht:
    Hallo,
    ich brauche im checkout_payment ein zusätzliches Kommentarfeld (habe Version 1.06) und zwar unter dem Feld "Fügen sie Ihre Anmerkungen zu dieser Bestellung ein:" Das Feld habe ich kopiert und wieder eingefügt. Das klappt, aber jetzt möchte ich natürlich den Satz "Fügen Sie Ihre Anmerkungen.......usw." nicht zweimal da stehen haben, sondern da soll ein anderer Text hin. Ich habe den Text in der Datei /lang/german/lang_german.conf. gefunden, aber wie gebe ich da einen anderen Text für dieses neue Feld ein? :nixweiss:
    Jetzt sieht es so aus: www.maisoncreative.de/ebay/text.PNG

    [EDIT Tomcraft 06.05.2013: Hier geht es direkt zur Anleitung von Alex_CC.]

    Linkback: https://www.modified-shop.org/forum/index.php?topic=25313.0

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Hallo milena,
    bei solchen Eingabefeldern sind immer drei Schritte zu beachten: Vorbereitung, Ausgabe und Verarbeitung. Für deine Frage könnte das wie folgt aussehen:

    1. Vorbereitung

    In der Datei checkout_payment.php werden die Felder für die Ausgabe vorbereitet. In Anlehnung an das vorhandene Kommentarfeld (bei mir Zeile 181), dass so vorbereitet wird,

    Code: PHP  [Auswählen]
    $smarty->assign('COMMENTS', xtc_draw_textarea_field('comments', 'soft', '60', '5', $_SESSION['comments']) . xtc_draw_hidden_field('comments_added', 'YES'));

    könnte ein zweites Feld so aussehen:

    Code: PHP  [Auswählen]
    $smarty->assign('EXTRACOMMENTS', xtc_draw_textarea_field('extracomments', 'soft', '60', '5', $_SESSION['extracomments']) . xtc_draw_hidden_field('extra_comments_added', 'YES'));

    Immer darauf achten, dass dein Feld sich von dem vorhandenen unterscheidet, damit die Software die Felder am Ende nicht durcheinander wirft.

    In der Datei lang/german/lang_german.conf musst Du im Block [checkout_payment] (etwa ab Zeile 328) dann den Feldnamen festlegen. So etwa:

    Code: PHP  [Auswählen]
    title_extra_comments = 'Fügen Sie hier noch mehr Anmerkungen zu dieser Bestellung ein:'

    2. Ausgabe

    Wie schon getan, einfach unter das vorhandene Feld dein neues im Template (templates/xtc5/modules/checkout_payment.html) dazupacken:

    Code: PHP  [Auswählen]
    <h2>{#title_extra_comments#}</h2>
    <p class="checkoutcomment">{$EXTRACOMMENTS}</p>

    3. Verarbeitung

    Erfolgt im nächsten Schritt, als in der Datei checkout_confirmation.php. Für das vorhandene Feld sieht das so aus:

    Code: PHP  [Auswählen]
    if ($_POST['comments_added'] != '')
    $_SESSION['comments'] = xtc_db_prepare_input($_POST['comments']);

    Mit dem o.g. Beispiel kannst Du hier den Extra-Kommentar über $_POST['extracomments'] abfragen und ihn dann nach Wunsch weiterverarbeiten. (z.B. in die Datenbank schreiben)

    Erweiterung für Bestätigungsmail:

    Also für die Bestätigungsmail, musst Du wieder die Variable an Smarty übergeben. Das geschieht in der Datei send_order.php, z.B. über die Session-Variable, in welche Du es rein gepackt hast.

    Code: PHP  [Auswählen]
            $smarty->assign('COMMENTS', $order->info['comments']);
            $smarty->assign('EXTRACOMMENTS',$_SESSION['extracomments']);

    Dann kannst Du das Mail-Template genauso verwenden.

    Für checkout_confirmation.php muss auch wieder die Variable übergeben werden:

    Code: PHP  [Auswählen]
    if (xtc_not_null($order->info['comments'])) {
            $smarty->assign('ORDER_COMMENTS', nl2br(htmlspecialchars($order->info['comments'])) . xtc_draw_hidden_field('comments', $order->info['comments']));

    }
    if (xtc_not_null($_SESSION['extracomments'])) {
            $smarty->assign('ORDER_EXTRA_COMMENTS', nl2br(htmlspecialchars($_SESSION['extracomments'])) . xtc_draw_hidden_field('extracomments', $_SESSION['extracomments']));

    }

    Dann kannst Du die Variable auch in /templates/xtc5/module/checkout_confirmation.html nutzen.

    Erweiterung für Textbegrenzung:

    Eine Textarea, wie sie hier für die Kommentare verwendet wird, kann nicht ohne weiteres begrenzt werden. Hier müsste man mit JavaScript arbeiten. Allerdings könntest Du die Textarea mit einem einfachen Inputfeld ersetzen. Das erfolgt in der checkout_payment.php, wo das Feld vorbereitet wird. Hier den vorhandenen Code für extracomments wie folgt ersetzen:

    Code: PHP  [Auswählen]
    $smarty->assign('EXTRACOMMENTS', xtc_draw_input_field('extracomments', $_SESSION['extracomments'], $parameters = 'maxlength="100" style="width:100%;"') . xtc_draw_hidden_field('extra_comments_added', 'YES'));

    Screenshot:

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    milena

    • Frisch an Board
    • Beiträge: 70
    • Geschlecht:
    hallo Alex_CC,
    hab das so wie beschrieben gemacht, klappt auch, es ist richtig in der checkout_payment.php drin, nur versuche ich schon stundenlang dieses neue Feld auf die Seite "Checkout_confirmation.php" und auf die Bestellbestätigung zu bekommen, es klappt einfach nicht. Ich hab´s in der "order_mail.html" und "order_mail.text" eingetragen, in der confirmation_php hab ich das Feld eingefügt: sieht jetzt so aus:
    Code: PHP  [Auswählen]
    if ($_POST['comments_added'] != '')
      $_SESSION['comments'] = xtc_db_prepare_input($_POST['comments']);
     
    if ($_POST['extracomments_added'] != '')
      $_SESSION['extracomments'] = xtc_db_prepare_input($_POST['extracomments']);
     

    bei order_mail.html sieht es so aus:
    Code: PHP  [Auswählen]
     <br><br>
            {if $COMMENTS}<br>
            <strong>Ihre Anmerkungen:</strong><br>
            {$COMMENTS}<br>
            {/if}
            <br>
            {if $EXTRACOMMENTS}<br>
            <strong>Grusstext:</strong><br>
            {$EXTRACOMMENTS}<br>
            {/if}
            <br>
    aber es klappt irgendwie nicht, was mache ich falsch? Kann mir jemand sagen, wo ich noch etwas eintragen muß, damit das neue Feld in
    Checkout_confirmation.php und in der Bestellbestätigungsmail erscheint?? :-?

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Also für die Bestätigungsmail, musst Du wieder die Variable an Smarty übergeben. Das geschieht in der Datei send_order.php, z.B. über die Session-Variable, in welche Du es rein gepackt hast.

    Code: PHP  [Auswählen]
            $smarty->assign('COMMENTS', $order->info['comments']);
            $smarty->assign('EXTRACOMMENTS',$_SESSION['extracomments']);

    Dann kannst Du das Mail-Template genauso verwenden.

    Für checkout_confirmation.php muss auch wieder die Variable übergeben werden:

    Code: PHP  [Auswählen]
    if (xtc_not_null($order->info['comments'])) {
            $smarty->assign('ORDER_COMMENTS', nl2br(htmlspecialchars($order->info['comments'])) . xtc_draw_hidden_field('comments', $order->info['comments']));

    }
    if (xtc_not_null($_SESSION['extracomments'])) {
            $smarty->assign('ORDER_EXTRA_COMMENTS', nl2br(htmlspecialchars($_SESSION['extracomments'])) . xtc_draw_hidden_field('extracomments', $_SESSION['extracomments']));

    }

    Dann kannst Du die Variable auch in /templates/xtc5/module/checkout_confirmation.html nutzen.

    milena

    • Frisch an Board
    • Beiträge: 70
    • Geschlecht:
    Hallo
    und vielen Dank für Deine Antwort, nach zwei Tagen herumprobieren klappt es endlich so wie ich es haben wollte!!!
    :king:
    Gruß milena

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Hallo milena,

    schön, dass es geklappt hat. Viel Spaß und vor allem viele Kunden / Bestellungen.  :2cent:

    LG, Alex

     :bye:

    milena

    • Frisch an Board
    • Beiträge: 70
    • Geschlecht:
    ich nochmal, hab noch eine kleine Frage: kann ich die Zeichen in dem neuen Textfeld begrenzen
    (z.B. auf 100) ? Wenn ja, wo und wie?
    Danke!!

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Eine Textarea, wie sie hier für die Kommentare verwendet wird, kann nicht ohne weiteres begrenzt werden. Hier müsste man mit JavaScript arbeiten. Allerdings könntest Du die Textarea mit einem einfachen Inputfeld ersetzen. Das erfolgt in der checkout_payment.php, wo das Feld vorbereitet wird. Hier den vorhandenen Code für extracomments wie folgt ersetzen:

    Code: PHP  [Auswählen]
    $smarty->assign('EXTRACOMMENTS', xtc_draw_input_field('extracomments', $_SESSION['extracomments'], $parameters = 'maxlength="100" style="width:100%;"') . xtc_draw_hidden_field('extra_comments_added', 'YES'));

    milena

    • Frisch an Board
    • Beiträge: 70
    • Geschlecht:
    Das war´s, vielen Dank nochmal für die tollen Tipps!! :mrgreen:

    baustelle

    • Fördermitglied
    • Beiträge: 1.624
    Großes Kompliment, Alex_CC - das nenne ich mal eine präzise und verständliche Umbauanleitung!  :thumbs:

    Greets,
    Chris

    Blaumann

    • Frisch an Board
    • Beiträge: 55
    Hallo,

    vielen Dank für diese kleine Vorlage.
    Alles hat gut gepasst. Und einen extra Datenbank-Eintag habe ich auch getätigt.
    -
    Ich habe außerdem versucht, den zusätzlichen Kommentar in der order.php ( admin ) zu integrieren.
    Siehe:

    Code: PHP  [Auswählen]
    <!-- BOC ORDER HISTORY BLOCK -->
          <div class="heading"><?php echo TEXT_ORDER_HISTORY; ?></div>
          <table cellspacing="0" cellpadding="2" class="table">
            <tr>
              <td class="main">
                <table border="1" cellspacing="0" cellpadding="5">
                  <tr>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_DATE_ADDED; ?></b></td>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_CUSTOMER_NOTIFIED; ?></b></td>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_STATUS; ?></b></td>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_COMMENTS; ?></b></td>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_EXTRACOMMENTS; ?></b></td>
                    <td class="smallText" align="center"><b><?php echo TABLE_HEADING_COMMENTS_SENT; ?></b></td>
                  </tr>
                  <?php
                  $orders_history_query = xtc_db_query("-- /admin/orders.php
                                                        SELECT orders_status_id,
                                                               date_added,
                                                               customer_notified,
                                                               extracomments,
                                                               comments,
                                                               comments_sent
                                                          FROM "
    .TABLE_ORDERS_STATUS_HISTORY."
                                                         WHERE orders_id = "
    .$oID."
                                                      ORDER BY date_added"
    );
                  $count = xtc_db_num_rows($orders_history_query);
     

    Allerdings kann dann das System den Eintrag der Datenbank nicht finden.
    Siehe Bild-Fehleranzeige.
    Vielleicht kann hier jemand helfen.
    --
    Übrigens wäre es auch super, wenn man den Kommentar auch in der "/account_history_info.php " hätte.

    except

    • Fördermitglied
    • Beiträge: 69
    Ciao Alex_CC

    Hat alles super geklappt und das Order_Mail kommt auch so an, wie es soll.
    Nur wie kann ich diesen "Extracomment" (bei mir heisst es "Referenz") auch noch in die druckbaren Files integrieren. Ich meine "Print_Packingslip, Print_Order, etc" ??
    Hab schon probiert das hier in den .html files einzusetzten
    Code: PHP  [Auswählen]
     {if $REFERENZ}<strong>Your reference:</strong> {$REFERENZ}<br />{/if}
    und in den dazugehörigen PHP's hab ich das eingesetzt
    Code: PHP  [Auswählen]
    $smarty->assign('REFERENZ', $_SESSION['referenz']);
    Sogar in der Datenbank habe ich überall wo ich "comments" finden konnte auch einen "referenz" Eintrag gemacht - klappt alles nicht.
    Was mach ich den hier falsch?
    Bitte erleuchted zu werden :-)

    Danke & Gruss
    P.S. Hab Shopversion 1.06

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Hallo,

    hier geht es weiter mit der Frage, wie man den Extratext in die Datenbank bekommt und wie man ihn dann wieder ausliest.

    Nochmal zu Schritt 3, Verarbeitung:

    Das auf der Zahlungsauswahl-Seite eventuell ausgefüllt Feld muss entsprechend ausgelesen und in die Session geschrieben werden, von wo es ausgelesen werden kann.

    Code: PHP  [Auswählen]
    if ($_POST['extracomments'] != '')
      $_SESSION['extracomments'] = xtc_db_prepare_input($_POST['extracomments']);
    (/checkout_confirmation.php)

    Schritt 4: Datenbank erweitern

    • Datenbank z.B. mit phpMyAdmin öffnen -> Tabelle "orders"
    • Struktur
    • 1 Spalte einfügen (wo immer ihr wollt, z.B. hinter comments)
    • Name: <freie Wahl>, Typ: Text, Standard: NULL, NULL: ja

    Oder direkt per SQL-Query:

    Code: SQL  [Auswählen]
    ALTER TABLE `orders` ADD `extracomments` TEXT NULL DEFAULT NULL AFTER `comments`;

    [ Für Gäste sind keine Dateianhänge sichtbar ]
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Schritt 5: Wert in Datenbank schreiben

    Code: PHP  [Auswählen]
    $sql_data_array = array ( ..............
                               'comments' => $order->info['comments'],
                               'extracomments' => $_SESSION['extracomments']
                               );
    (/checkout_process.php, ~Zeile 240)

    In der checkout_process.php muss nur das $sql_data_array um unseren neuen Wert erweitert werden. Als Schlüssel dient der Name des Datenbankfelds und als Wert die Sessionvariable in welcher der Text steht. Den Rest macht modified allein. :)

    [ Für Gäste sind keine Dateianhänge sichtbar ]
    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Schritt 6: Wert auslesen

    Code: PHP  [Auswählen]
    $this->info = array(..............................
                              'comments' => $order['comments'],
                              'extracomments' => $order['extracomments'],
                              'language' => $order['language']
                              );
    (/includes/classes/order.php, ~Zeile 173)

    Genauso, wie wir das Speichern erweitert haben, können wir auch das Auslesen erweitern. Am besten direkt in der Klasse Order. Am Anfang der Datei wird von der Shopsoftware der komplette Datensatz aus der Datenbank geladen und mit dem Hinzufügen von extracomments (oder wie auch immer es bei euch heißt) können wir die Variable in den info-Teil schreiben. Den Rest macht modified wieder allein.

    Schritt 7: Wert ausgeben

    Überall, wo eine bestimmt Order bzw. ihre Daten ausgegeben werden, wird die Variable $order gesetzt und von modified befüllt. Und dank Schritt 6, können wir sie so auslesen.

    Code: PHP  [Auswählen]
    <tr>
                    <td class="main"><b>Extra-Kommentar: </b></td>
                    <td class="main"><?php echo $order->info['extracomments']; ?></td>
                  </tr>
    (/admin/orders.php, ~Zeile 450)

    Versucht nicht den Wert in der Order-History-Tabelle zu laden oder wie den Kommentar unten zu überschreiben. Das ging mit etwas mehr Aufwand sicher auch, aber die Order History Funktion macht das was sie soll, sehr gut. ;)

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Außerhalb des Adminbereichs habt ihr immer eine PHP-Datei, welche die Ausgabe für die HTML-Template-Datei vorbereitet. Es folgt Account History Info als Beispiel.

    Code: PHP  [Auswählen]
    $smarty->assign('EXTRACOMMENTS', $order->info['extracomments']);
    (/account_history_info.php, etwa Zeile 110 im Bereich hinter //Stuff)

    Code: Text  [Auswählen]
            {if $EXTRACOMMENTS}
            <h2>Extrakommentare:</h2>
            <p>{$EXTRACOMMENTS}</p>
            {/if}
    (/templates/xtc5/module/account_history_info.html, etwa Zeile 22 hinter Payment Method)

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Hoffe, das hilft. Bei Fragen, einfach fragen. :)

    jannemann

    • modified Team
    • Beiträge: 6.288
    • Geschlecht:
    Hallo Alex,

    herzlichen Dank für die ausführliche und gut erklärte Anleitung :!:
     :thumbs:

    Schöne Grüße,
    Jan

    except

    • Fördermitglied
    • Beiträge: 69
    Hallo Alex_CC

    Bis hierher klappt alles super,  :thx: :pro:  nur dass ich die Referenz nicht ändern kann finde ich schade.

    Zitat
    " Versucht nicht den Wert in der Order-History-Tabelle zu laden oder wie den Kommentar unten zu überschreiben. Das ging mit etwas mehr Aufwand sicher auch, aber die Order History Funktion macht das was sie soll, sehr gut."

    Aber genau das bräuchte ich.

    Der Grund ist, dass wir öfter e-mail Bestellungen von Geschäftskunden erhalten (d.H. diese machen die Bestellung nicht über den Shop) und wir diese Bestellung dann im Backend für den Kunden machen - da viele Kunden Ihre interne Bestellreferenznummer auf der Rechnung brauchen, sollte ich diese auch reinschreiben können, so wie man den Kommentar auch rein schreiben kann.

    Ich habe versucht, dass gleiche zu machen, was mit dem Kommentar passiert, aber irgendwie schreibt es eben meine Referenz nicht dahin wo es soll.

    Kannst du mir da bitte nicht ein wenig helfen?

    Gruss
    Except
    Shopversion 1.06
    6 Antworten
    4567 Aufrufe
    29. April 2015, 12:23:40 von moscbabe
    3 Antworten
    2270 Aufrufe
    05. Januar 2012, 16:32:02 von sweettigerpunk
    9 Antworten
    5043 Aufrufe
    11. März 2011, 16:05:38 von Tomcraft
    4 Antworten
    1869 Aufrufe
    18. Mai 2016, 11:58:58 von webald