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

    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.742
    • 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.742
    • 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.742
    • 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
    1226 Aufrufe
    21. April 2021, 18:37:47 von csskoeln
    6 Antworten
    5387 Aufrufe
    29. April 2015, 12:23:40 von moscbabe
    3 Antworten
    3494 Aufrufe
    05. Januar 2012, 16:32:02 von sweettigerpunk
    9 Antworten
    7089 Aufrufe
    11. März 2011, 16:05:38 von Tomcraft
               
    anything