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
    rechtstexte für onlineshop

    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: 58
    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.289
    • 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

    adiebler

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

    soweit ich es verstehe, möchtest Du einen einzelnen Wert (Referenznummer) hinzufügen. Order-History ist für wechselnde Werte wie den Status einer Bestellung mit einem Kommentar, warum der Status sich geändert hat. Lass einfach mal Schritt 1 bis 3 weg und befolge die Schritte 4 bis 7. Damit hast Du einen Datenbankplatz für deinen Wert in der Datenbank, der geschrieben und ausgelesen wird. Statt den Schritten 1 bis 3, welche für die Eingabe im Shopbereich sind, hier eine Möglichkeit um die Eingabe als Admin zu machen.

    Zuerst erstellst Du ein Eingabefeld und schreibst den Wert in die Datenbank.

    Code: PHP  [Auswählen]
    <!-- Sprachen Ende //-->
    <br /><br />
    <!-- Referenz Anfang //-->
    <table border="0" width="100%" cellspacing="0" cellpadding="2">
        <tr class="dataTableHeadingRow">
            <td class="dataTableHeadingContent" width="100%" colspan="3"><b>Referenz</b></td>
        </tr>
        <?php
        echo xtc_draw_form('ref_edit', FILENAME_ORDERS_EDIT, 'action=ref_edit', 'post');
        ?>
        <tr class="dataTableRow">
            <td class="dataTableContent" align="left" width="30%">Referenznummer</td>
            <td class="dataTableContent" align="left" width="30%"><?php echo xtc_draw_input_field('extracomments', $order->info['extracomments']); ?></td>
            <td class="dataTableContent" align="left">&nbsp;</td>
        </tr>
        <tr class="dataTableRow">
            <td class="dataTableContent" align="left" colspan="3">
                <?php
                echo xtc_draw_hidden_field('old_currency', $order->info['currency']);
                echo xtc_draw_hidden_field('oID', $_GET['oID']);
                echo '<input type="submit" class="button" onclick="this.blur();" value="' . BUTTON_SAVE . '"/>';
                ?>
            </td>
        </tr>
        </form>
    </table>
    <!-- Referenz Ende //-->
    <br /><br />
    <!-- Währungen Anfang //-->
    (/admin/orders_edit_other.php, ~Zeile 66)

    Code: PHP  [Auswählen]
    // Sprachupdate Ende

    // Referenzupdate Anfang

    if ($action == 'ref_edit') {
        $sql_data_array = array('extracomments' => xtc_db_prepare_input($_POST['extracomments']));
        xtc_db_perform(TABLE_ORDERS, $sql_data_array, 'update', 'orders_id  = \'' . (int)($_POST['oID']) . '\'');
    }

    // Referenzupdate Ende

    // Währungswechsel Anfang
    (/admin/orders_edit.php, ~Zeile 683)

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

    Dank Schritt 7 wird der Wert bereits in der Bestellübersicht angezeigt.

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

    Jetzt noch fix in die Rechnung einfügen.

    Code: PHP  [Auswählen]
    $smarty->assign('EXTRACOMMENTS', $order->info['extracomments']);
    (/admin/print_order.php, ~Zeile 72)

    Code: Text  [Auswählen]
    {if $EXTRACOMMENTS}<strong>Referenz:</strong> {$EXTRACOMMENTS}<br />{/if}
    (/templates/[your_template]/module/print_order.html, ~Zeile 31)

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

    So kannst Du den entsprechenden Referenzwert zur Bestellung speichern und auf der Rechnung ausgeben.

    Ich hoffe, das hilft. :)

    VG, Alex

    except

    • Fördermitglied
    • Beiträge: 69
    Hi Alex

    Danke.
    Müsste aber in Zeile 19 nicht das hier stehen?

    Code: PHP  [Auswählen]
    echo xtc_draw_hidden_field('old_referenz', $order->info['referenz']);

    anstatt was hier in Zeile 19 steht??

    Code: PHP  [Auswählen]
        <!-- Sprachen Ende //-->
        <br /><br />
        <!-- Referenz Anfang //-->
        <table border="0" width="100%" cellspacing="0" cellpadding="2">
            <tr class="dataTableHeadingRow">
                <td class="dataTableHeadingContent" width="100%" colspan="3"><b>Referenz</b></td>
            </tr>
            <?php
            echo xtc_draw_form('ref_edit', FILENAME_ORDERS_EDIT, 'action=ref_edit', 'post');
            ?>
            <tr class="dataTableRow">
                <td class="dataTableContent" align="left" width="30%">Referenznummer</td>
                <td class="dataTableContent" align="left" width="30%"><?php echo xtc_draw_input_field('extracomments', $order->info['extracomments']); ?></td>
                <td class="dataTableContent" align="left">&nbsp;</td>
            </tr>
            <tr class="dataTableRow">
                <td class="dataTableContent" align="left" colspan="3">
                    <?php
                    echo xtc_draw_hidden_field('old_currency', $order->info['currency']);
                    echo xtc_draw_hidden_field('oID', $_GET['oID']);
                    echo '<input type="submit" class="button" onclick="this.blur();" value="' . BUTTON_SAVE . '"/>';
                    ?>
                </td>
            </tr>
            </form>
        </table>
        <!-- Referenz Ende //-->
        <br /><br />
        <!-- Währungen Anfang //-->

    Gruss Except

    except

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

    Habs mal so gemacht, wie ich es gerade geschrieben hatte und es funktioniert. :thumbs:

    Das Danke vorhin war in der Hitze des Gefechts ein bisschen knapp ausgefallen  :oops:

    Also nochmals VIELEN VIELEN DANK!!!!! Echt super von dir! :thx: :pro:

    Gruss
    Except

    adiebler

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

    dieses "old_currency" bzw. "old_referenz" Feld kann man weglassen, da es eh nicht ausgelesen wird. Wichtig sind natürlich nur das "referenz" sowie das "oID" Feld. Dann hoffe ich mal, dass es euch jetzt leichter fällt, die E-Mail-Bestellungen von Kunden zu verarbeiten. Allzeit gute Umsätz. :)

    VG, Alex

    ND

    • Neu im Forum
    • Beiträge: 9
    • Geschlecht:
    Hallo Experten,

    ich weiß das Thema ist schon älter, aber ich versuche schon seit Tagen den Inhalt des EXTRACOMMENT-Feldes auszulesen und in der account.html im Abschnitt getätigte Bestellungen, in einer spalte, anzeigen zu lassen. Ich bekomme es einfach nicht hin. Die Shopversion ist 1.06.

    Vielen Dank für euere Hilfe im voraus!

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Da drängt sich die Frage auf: "Was hast du denn versucht ?"

    Gruß,
    noRiddle

    adiebler

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

    wie es der Zufall so will, habe ich noch ein E-Mail-Abo auf diesen Thread. ;) Ich habe mir mal die neuste modified v1.06 runtergeladen und den Code angesehen. Da ich aktuell auf dem Rechner nur PHP 7.2 habe, kann ich es leider nicht selbst testen, aber ich denke folgendenes sollte funktionieren:

    In der Datei /account.php im Hauptverzeichnis werden die Daten aus der Datenbank zusammen getragen. Bei mir Zeile 71.

    Code: PHP  [Auswählen]
    $orders_query = xtc_db_query("select
                                              o.orders_id,
                                              o.date_purchased,
                                              o.delivery_name,[...]

    Hier fügst du eine Zeile mit "o.extracomments," ein, sofern du das Datenbankfeld so benannt hast. (Komma nicht vergessen!)

    Dann geht es bei mir weiter in Zeile 97, wo das SELECT-Ergebnis in die Variable $order_content geschrieben wird, welche später an das Template übergeben wird.

    Code: PHP  [Auswählen]
    $order_content[] = array([...])

    Hier fügst du folgendes ein:

    Code: PHP  [Auswählen]
    $order_content[] = array('EXTRA_COMMENTS' => $orders['extracomments'], [...])

    Die Reihenfolge der einzelnen Werte im Array ist egal, daher kann es auch vorne dran. Das Gleiche gilt für die SQL-Abfrage weiter vorn.

    Jedenfalls hast du jetzt alle Werte in einem Array und die dazugehörige Variable wird kurz darauf an Smarty übergeben, bei mir in Zeile 115.

    Code: PHP  [Auswählen]
    $smarty->assign('order_content', $order_content);

    Und jetzt musst du nur noch innerhalb der /templates/[template]/module/account.html in der foreach-Schleife für $order_content (beginnt bei mir in Zeile 27), deinen Wert ausgeben.

    Code: PHP  [Auswählen]
    {foreach name=aussen item=order_data from=$order_content}{$order_data.EXTRA_COMMENTS}

    Natürlich nicht zwangsweise direkt danach, sondern wo immer du willst. :)

    Hoffe es klappt so, wie du es dir vorstellst.

    VG, Alex

    ND

    • Neu im Forum
    • Beiträge: 9
    • Geschlecht:
    Hallo Alex,

    vielen, vielen Dank für die Hilfe! Hat super funktioniert! Konnte mit der mit Hilfe deiner Anleitung es noch in die account_history einbauen.

    VG ND

    adiebler

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

    freut mich, dass ich helfen konnte.   :-) :bye:

    VG Alex

    coflo

    • Neu im Forum
    • Beiträge: 8
    Wäre die Vorgehensweise in der aktuellen Version ähnlich?

    Bei mir übernimmt er weder die Eingaben in die Datenbank, noch zeigt er es im checkout_confirmation an. Er übernimmt also die Eingaben nicht, ich habe die checkout_payment.php, checkout_payment.html, checkout_confirmation.php, checkout_confirmation.html, send_order.php jeweils um das Zusatzfeld erweitert.

    adiebler

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

    ich habe mir einmal die aktuelle Version (2.0.5.1 r12725) installiert und das Vorgehen ist wirklich identisch. Was ich jedoch in meiner Anleitung nicht (mehr) finde, sind die Schritte, um die Daten überhaupt in die Datenbank zu schreiben. Daher hier mein Vorgehen, mit dem es gerade geklappt hat:

    lang/german/lang_german.conf:
    Code: XML  [Auswählen]
    text_extra_comments = 'Ihre weiteren Anmerkungen:'
    title_extra_comments = 'F&uuml;gen Sie hier noch mehr Anmerkungen zu dieser Bestellung ein:'
    title_extra_comments_short = 'Weitere Anmerkungen'
     

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

    templates/tpl_modified_responsive/module/checkout_payment.html
    Code: XML  [Auswählen]
              <li>{#title_extra_comments_short#}</li>
              [...]
              <div>
                <noscript><h4 class="nonjs-h4">{#title_extra_comments#}</h4></noscript>
                <div class="checkoutcomment">{$EXTRACOMMENTS}</div>
              </div>
     

    So weit, so gut. Jetzt ist das Feld sichtbar und der Kunde kann etwas eingeben. Aber wenn ich dich richtig verstanden habe, war dies bereits der Fall. Jetzt wird es wichtig, der Bestellung in Form der Klasse order diese Daten zu übergeben:

    checkout_confirmation.php (bei mir Zeile 52)
    Code: PHP  [Auswählen]
    if (isset($_POST['extra_comments_added']) && $_POST['extra_comments_added'] != '') {
        $_SESSION['extracomments'] = xtc_db_prepare_input($_POST['extracomments']);
    }

    Wie beim Kommentar selbst wird das "_added"-Feld geprüft und anschließend der Text aus $_POST nach $_SESSION überführt.

    includes/classes/order.php (bei mir Zeile 517)
    Code: PHP  [Auswählen]
    $this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
                             
                              [...]
                              'comments' => isset($_SESSION['comments']) ? $_SESSION['comments'] : '',
                              'extracomments' => isset($_SESSION['extracomments']) ? $_SESSION['extracomments'] : '',
                              [...]);

    Durch das Einfügen der zusätzlichen Zeile, zieht sich das System das zusätzliche Feld gemeinsam mit den anderen aus der Session, wenn die Bestellung generiert wird.

    checkout_confirmation.php (bei mir Zeile 209)
    Code: PHP  [Auswählen]
    if (xtc_not_null($order->info['extracomments'])) {
        $smarty->assign('ORDER_EXTRA_COMMENTS', nl2br(encode_htmlspecialchars($order->info['extracomments'])) . xtc_draw_hidden_field('extracomments', $order->info['extracomments']));
    }

    Nachdem der Text aus $_POST in $_SESSION geschrieben wurde und nun im order-Objekt ist, wird wie beim bisherigen comments-Feld der Inhalt an Smarty übergeben und kann dann wie $ORDER_COMMENTS in der checkout_confirmation.html ausgegeben werden.

    templates/tpl_modified_responsive/module/checkout_confirmation.html (bei mir Zeile 101)
    Code: XML  [Auswählen]
    {if $ORDER_EXTRA_COMMENTS != ''}
    <div class="twoColums">
      <div class="highlightbox plainleft">
        <h4 class="checkout">{#text_extra_comments#}{if isset($PAYMENT_EDIT)} <a class="midi" href="{$PAYMENT_EDIT}">{#text_edit#}</a>{/if}</h4>
        {$ORDER_EXTRA_COMMENTS}
      </div>
    </div>
    {/if}

    Jetzt müssen die Daten noch nach Bestellabschluss in die Datenbank. Dazu vorab in der Tabelle orders das Feld comments mit neuen Namen duplizieren.

    checkout_process.php (bei mir Zeile 90)
    Code: PHP  [Auswählen]
      $sql_data_array = array (
       [...]
        'comments' => $order->info['comments'],
        'extracomments' => $order->info['extracomments'],
    );

    So kommt der Text aus dem order-Objekt in die Datenbank-Anweisung für den Eintrag.

    Ich hoffe, dass es so bei dir auch klappt.

    Viele Grüße
    Alex

    coflo

    • Neu im Forum
    • Beiträge: 8
    Hey adiebler,

    vielen Dank für deine sehr ausführliche und hilfreiche Antwort. Ich hatte die Datei "classes/order.php" nicht beachtet.

    Deine Antwort wird sicherlich in Zukunft noch einigen von nutzen sein - Danke für deine Hilfe!

    Kleine Notiz: Für die Ausgabe in der Bestellung im Adminbereich muss die Datei "orders_info_blocks.php" angepasst werden.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    @adiebler
    Könntest du das in ein Gesamt-Paket zusammenfassen ?
    Dann ist das 1. einfacher für andere (vor allem unbedarfte) User und 2. könnten wir dann leichter und schneller mal drüberschauen, ob wir das nicht update-sicher hinbekommen können.
    (Nein, ich rede nicht neuerdings im Pluarlis Majestatis von meiner Wenigkeit sondern meine mit "wir" eine/n der Fähigen, der/die als erstes Lust und Zeit dazu hat.)

    Gruß,
    noRiddle

    awids

    • Experte
    • Beiträge: 3.790
    • Geschlecht:
    [...]
    Nein, ich rede nicht neuerdings im Pluarlis Majestatis
    [...]


    Meinst sicher "Pluralis Majestatis".  ;-)

    "Wir" sind amüsiert! Das hätte ich (und sicher auch kein anderer) auch nicht so interpretiert, wenn du es nicht dazu geschrieben hättest.  :lol:

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.747
    • Geschlecht:
    Mein nicht bestandenes Großes Latinum hätte ausgereicht wenn ich's nochmal gelesen hätte nach dem Schreiben :-D.
    Ich bin Keyboard-Legastheniker, vertausche da beim Zwei-Finger-Speed-Typing öfter mal Buchstaben wenn ich nicht aufpasse,

    Gruß,
    noRiddle
    1 Antworten
    1230 Aufrufe
    21. April 2021, 18:37:47 von csskoeln
    6 Antworten
    5392 Aufrufe
    29. April 2015, 12:23:40 von moscbabe
    3 Antworten
    3496 Aufrufe
    05. Januar 2012, 16:32:02 von sweettigerpunk
    9 Antworten
    7096 Aufrufe
    11. März 2011, 16:05:38 von Tomcraft