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: MODUL: Erweiterung der Anrede bei Registrierung um Auswahlmöglichkeit "KEINE"

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Naja, manchmal ist ein gepflegtes Streitgespräch ("Was haltet Ihr von drittem Geschlecht bei Anmeldung?") doch erfrischend.
    Außerdem: Beleidigungen habe ich gar nicht und Stammtischparolen eher von der anderen Seite gehört.
    Aber egal. Damit etwas konstruktives dabei heraus kommt, hier eine update-sichere Implementation die dem im Thread gemachten Vorschlag folgt:

    ANREDE:
    O Herr
    O Frau
    O Keine

    Ein File anlegen, z.B. namens custom_gender_dropdown.php, in /includes/extra/header/header_begin/ mit folgendem Inhalt:

    Code: PHP  [Auswählen]
    <?php
    /*******************************************************************************
    * file: custom_gender_dropdown.php
    * use: define a custom gender dropdown in create_account and create_guest_account
    *
    * (c) who ever 10-2018
    *******************************************************************************/


    if(strpos($PHP_SELF, 'create_account.php') !== false || strpos($PHP_SELF, 'create_guest_account.php') !== false) {
        function custom_get_customers_gender() {
            $gender_array = array(array('id' => '', 'text' => PULL_DOWN_DEFAULT),
                                  array('id' => 'm', 'text' => MALE),
                                  array('id' => 'f', 'text' => FEMALE),
                                  array('id' => 'i', 'text' => NONE)
                                 );

            return $gender_array;
        }
       
        if (ACCOUNT_GENDER == 'true') {
            $smarty->assign('gender', '1');
            $smarty->assign('INPUT_CUSTOM_GENDER', xtc_draw_pull_down_menuNote(array ('name' => 'gender', 'text' => '&nbsp;'. (xtc_not_null(ENTRY_GENDER_TEXT) ? '<span class="inputRequirement">'.ENTRY_GENDER_TEXT.'</span>' : '')), custom_get_customers_gender(), $gender));
        } else {
            $smarty->assign('gender', '0');
        }
    }
    ?>

    In den Template-Dateien /module/create_account.html und ~create_account_guest.html dann anstatt {$INPUT_GENDER} {$INPUT_CUSTOM_GENDER} benutzen.
    Für die Sprachkonstante NONE für jede Sprache ein File anlegen mit der Definition in /lang/extra/.
    Beispiel Deutsch:

    Code: PHP  [Auswählen]
    define('NONE', 'Keine Anrede');

    In den Mail-Templates muß man nichteinmal zwingend etwas ändern, denn wenn weder "male" noch "female" zutrifft wird als Anrede einfach "Hallo..." benutzt, zumindest im Standard-Template.

    Gruß,
    noRiddle

    *NACHTRAG*
    Auch mit dieser kleinen Erweiterung kann man im Backend weiterhin die Anrede deaktivieren.

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

    Bonner

    • Fördermitglied
    • Beiträge: 848
    • Geschlecht:
    :thx: noRiddle!

    Das kann man ja ggf. noch um weitere Anreden erweitern....

    Noch eine Idee, die man vielleicht umsetzen könnte (habe ich mal vor Jahren in einem anderen System so gelöst):
    Wenn man die Tabelle um die jeweilige Begrüßung (Sehr geehrte Frau, Sehr geehrter Herr etc.) hinter den jeweiligen Anreden ergänzen würde, wäre es doch vielleicht einfacher die in Mailtexte, Startseite etc zu integrieren oder?

    Bonner

    Timm

    • Fördermitglied
    • Beiträge: 6.318
    Danke noRiddle.

    fishnet

    • Fördermitglied
    • Beiträge: 4.853
    • Geschlecht:
    Ich hoffe mich mache mich jetzt nicht unbeliebt  :-D
    Könntest du vielleicht noch einen Schalter hinzufügen um nur das "Keine" auszuschalten?
    Ich denke da an Händler die eine Anrede möchten aber eine inkompatible Wawi o.ä haben.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Warum solltest du dich unbeliebt machen ?
    (nur wegen kleiner Meinungsverschiedenheiten im anderen Thread ?)

    Wer möchte was du sagst behält im Template einfach {$INPUT_GENDER} anstatt es durch {$INPUT_CUSTOM_GENDER} zu ersetzen, bzw. baut die Erweiterung erst gar nicht ein.
    Einen Schalter dafür finde ich jetzt zu aufwändig (configuration-SQL, Sprachkonstanten).
    Oder fehlt mir ein Argument ?, lasse mich gerne belehren.

    Das Backend wurde bei der Erweiterung außerdem nicht beachtet weil das nicht ohne Core-File-Änderungen gehen würde.

    Was man noch machen könnte/sollte, wenn man die Erweiterung benutzen möchte, ist auch bei Adress-Änderungen durch den Kunden das Custom-Dropdown anzeigen zu lassen, nämlich in der
    /module/account_edit.html
    und der
    /module/address_book_process.html
    des Templates.

    Dabei stösst man auf das Problem, daß das für /module/address_book_process.html nicht so ohne weiteres ohne Core-File-Änderung möglich ist, da dort ein weiteres File includet wird (*EDIT* als Smarty-MODULE, sonst wär's kein Problem *END_EDIT*), nämlich ~address_book_details.html dessen zugehörige PHP-Datei (address_book_details.php) als File in address_book_process.php includiert wird.
    Vielleicht hat einer eine Idee dazu ?

    Für das Einbeziehen der genannten Files den Code in der Datei in /includes/extra/header/header_begin/ entweder in der if-Clause erweitern oder das Ganze so aufbauen:

    Code: PHP  [Auswählen]
    <?php
    /*******************************************************************************
    * file: new_gender_dropdown.php
    * use: define a custom gender dropdown in create_account, create_guest_account, account_edit
    *
    * (c) noRiddle 10-2018
    *******************************************************************************/


    $custom_gender_page_array = array('create_account.php', 'create_guest_account.php', 'account_edit.php', 'address_book_process.php');

    if(in_array(basename($PHP_SELF), $custom_gender_page_array)) {
        function custom_get_customers_gender() {
            $gender_array = array(array('id' => '', 'text' => PULL_DOWN_DEFAULT),
                                  array('id' => 'm', 'text' => MALE),
                                  array('id' => 'f', 'text' => FEMALE),
                                  array('id' => 'i', 'text' => NONE)
                                 );

            return $gender_array;
        }
       
        if (ACCOUNT_GENDER == 'true') {
            if(basename($PHP_SELF) == 'address_book_process.php') {
                //hier fehlt noch die Idee
            } else {
                $smarty->assign('gender', '1');
                $smarty->assign('INPUT_CUSTOM_GENDER', xtc_draw_pull_down_menuNote(array ('name' => 'gender', 'text' => '&nbsp;'. (xtc_not_null(ENTRY_GENDER_TEXT) ? '<span class="inputRequirement">'.ENTRY_GENDER_TEXT.'</span>' : '')), custom_get_customers_gender(), $gender));
            }
        } else {
            $smarty->assign('gender', '0');
        }
    }
    ?>

    Damit kann man in /module/account_edit.html schonmal {$INPUT_CUSTOM_GENDER} benutzen.
    Für /module/address_book_process.html bzw. das dort includierte File ~address_book_details.html muß uns noch etwas einfallen...

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Da sich das Problem mir der als Smarty-MODULE in /module/address_book_process.html includierten /module/address_book_details.html nicht ohne Core-File-Änderung lösen lässt, hier eine Javascript-Lösung:

    In /templates/YOUR_TEMPLATE/javascript/general_bottom.js.php unten anfügen:

    Code: PHP  [Auswählen]
    <?php
    //BOC custom gender dropdown, noRiddle
    $custom_gender_page_array = array('create_account.php', 'create_guest_account.php', 'account_edit.php', 'address_book_process.php');
    if(in_array(basename($PHP_SELF), $custom_gender_page_array)) {
    ?>
    <script>
    var $gend_dropd = $('select[name="gender"]'),
        gend_new_option = '<option value="i"><?php echo GEND_NONE; ?></option>';
    $(gend_new_option).appendTo($gend_dropd);
    </script>
    <?php
    }
    //EOC custom gender dropdown, noRiddle
    ?>

    Bitte auf das korrekte Öffnen und Schließen der php-tags achten.

    Die Sprachkonstante GEND_NONE (hatte ich vorher NONE genannt), wie bereits erwähnt, für jede Sprache in einem File definieren in /lang/extra/.
    Bespiel Deustch /lang/extra/my_additional_lang_consts.php:

    Code: PHP  [Auswählen]
    define('GEND_NONE', 'Keine Anrede');

    Eine solche Javascript-Lösung ist natürlich auch im Backend möglich.
    Da schaut bitte jemand anderes nach, wenn eine explizite Code-Lösung benötigt wird.

    Gruß,
    noRiddle

    *NACHTRAG*
    Um Missverständnissen vorzubeugen:
    Die in diesem Post dargelegte Javascript-Lösung ersetzt die Lösung im ersten Post vollständig.

    fishnet

    • Fördermitglied
    • Beiträge: 4.853
    • Geschlecht:
    Warum solltest du dich unbeliebt machen ?
    (nur wegen kleiner Meinungsverschiedenheiten im anderen Thread ?)

    Nein, wegen meiner Sonderwünsche bezüglich dieser Entwicklung hier. Ich gehe davon aus das dieser Code langfristig im Core landet / landen muss. Darum versuche ich gleich schon an die Fälle zu denken, an denen eine dritte Eingabe inkompatibel mit was-weiss-ich-was wäre.

    [EDIT Tomcraft 26.10.2018: Off-Topic Anteil aus Beitrag gelöscht!]

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.161
    • Geschlecht:
    [...] Ich gehe davon aus das dieser Code langfristig im Core landet / landen muss. [...]

    Wie kommst du darauf? Ich sehe dafür keinerlei Bedarf, aber lasse mich gerne vom Gegenteil überzeugen. Die Anrede ist im Adminbereich unter "Konfiguration" -> "Kunden Details" -> "Anrede" abschaltbar und das ist auch im Sinne der Datenvermeidung.

    Grüße

    Torsten

    fishnet

    • Fördermitglied
    • Beiträge: 4.853
    • Geschlecht:
    Da das Personenstandsrecht geändert wird, ein drittes Geschlecht somit juristisch anerkannt wird, wird sich das nunmehr auch auf Jobtitel / Stellenausschreibungen, Personalausweise und im Laufe der Zeit auf das tägliche Leben auswirken - und somit auch auf Shopsysteme. Ich spreche natürlich nicht von der Version 2.0.5.0. Ich versuche nur, etwas weiter vorauszudenken.

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.161
    • Geschlecht:
    Na wenn es dann mal soweit ist, dass es aktuell wird, dann erstellt dafür bitte ein Ticket.

    Grüß

    Torsten

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Das Problem bei Änderungen im Shop das Adressbuch betreffend ist immer, daß sich das quer durch den ganzen Shop zieht und die Anpassungen durchaus umfangreich werden können.
    Z.B., das hatte ich bei den Lösungen die ich angeboten habe bislang vergessen zu sagen, darf bei Nutzung einer Lösung {$greeting} auf der Startseite nicht mehr benutzt werden. Dort wird nämlich folgender Code durch die Funktion xtc_customer_greeting() benutzt:

    Code: PHP  [Auswählen]
    if ($_SESSION['customer_gender'] == 'f') {
            $greeting_string = sprintf(TEXT_GREETING_PERSONAL, FEMALE . '&nbsp;'. $_SESSION['customer_first_name'] . '&nbsp;'. $_SESSION['customer_last_name'], xtc_href_link(FILENAME_PRODUCTS_NEW));
          } else {
            $greeting_string = sprintf(TEXT_GREETING_PERSONAL, MALE . '&nbsp;'. $_SESSION['customer_first_name'] . '&nbsp;' . $_SESSION['customer_last_name'], xtc_href_link(FILENAME_PRODUCTS_NEW));
          }

    was bewirkt, daß, ist der Gender nicht weiblich, immer männlich vorausgesetzt wird.
    Das torpediert natürlich den neuen Gender.

    Gruß,
    noRiddle

    [EDIT Tomcraft 26.10.2018: Off-Topic Anteil aus Beitrag gelöscht!]

    WeXsler

    • Viel Schreiber
    • Beiträge: 536
    In der template-Datei /module/checkout_new_address.html, wäre das dann auch noch anzupassen.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Jau. Für die Javascript-Lösung in Antwort #5 das Array um zwei Einträge erweitern:

    Code: PHP  [Auswählen]
    $custom_gender_page_array = array('create_account.php', 'create_guest_account.php', 'account_edit.php', 'address_book_process.php', 'checkout_payment_address.php', 'checkout_shipping_address.php');

    Eine rein template-basierte Lösung für alle betroffenen Files ginge übrigens so:
    Ersetze

    Code: XML  [Auswählen]
    {$INPUT_GENDER}

    hiermit

    Code: XML  [Auswählen]
    {$INPUT_GENDER|replace:'</option></select>':'</option><option value="i">{#no_gender#}</option></select>'}

    no_gender in lang_SPRACHE.custom definieren:
    (hier für german)

    Code: Text  [Auswählen]
    no_gender = 'Keine Anrede'

    Gruß,
    noRiddle

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.707
    • Geschlecht:
    Aus gegebenem Anlaß, siehe Urteil LG FRankfurt, 2-13 O 131/20:

    Das replace muß nach meinem Vorschlag (im vorangegangenen Post) so aussehen:
    Code: XML  [Auswählen]
    {$INPUT_GENDER|replace:'</option></select>':"</option><option value=\"i\">{#no_gender#}</option></select>"}

    weil ansonsten die Config-Varaiable nicht interpretiert wird.

    Oder besser kürzer:
    Code: XML  [Auswählen]
    {$INPUT_GENDER|replace:'</select>':"<option value=\"i\">{#no_gender#}</option></select>"}

    Aus Performance-Gründen könnte man das auch in einen Smarty-Modifier und somit in PHP auslagern und benutzt dann im Template den Modifier (Im Template-Ordner /smarty/ speichern).
    Code: PHP  [Auswählen]
    <?php
    function smarty_modifier_add_nogender ($html) {
        $html = str_replace('</select>', '<option value="i">'.NO_GENDER.'</option></select>', $html);

        return $html;
    }
    ?>

    NO_GENDER in einer Datei in /lang/SPRACHE/extra/ definieren.
    und im Template den Modifier so benutzen:
    Code: XML  [Auswählen]
    {$INPUT_GENDER|add_nogender}

    Wer nur die zwei Standard-Sprachen hat kann es sich auch einfacher machen und direkt im Modifier definieren:
    Code: PHP  [Auswählen]
    <?php
    function smarty_modifier_add_nogender ($html) {
        if($_SESSION['language_code'] == 'de) {
            define('
    NO_GENDER', 'Keine Anrede');
        } else {
            define('
    NO_GENDER', 'No salutation');
        }

        $html = str_replace('
    </select>', '<option value="i">'.NO_GENDER.'</option></select>', $html);

        return $html;
    }
    ?>

    Gruß und frohes gesegnetes neues Jahr,
    noRiddle

    Q

    • Fördermitglied
    • Beiträge: 1.482
    Na wenn es dann mal soweit ist, dass es aktuell wird, dann erstellt dafür bitte ein Ticket.
    [...]

    Ist es jetzt aktuell? Und wenn ja, gibt es schon ein Ticket oder wurde?

    [...] Die Anrede ist im Adminbereich unter "Konfiguration" -> "Kunden Details" -> "Anrede" abschaltbar und das ist auch im Sinne der Datenvermeidung.
    [...]

    Kann man die auch als [optional] konfigurieren? Aktuell geht ja nur "Wenn [ja], dann Pflichtfeld oder [nein]. Dann könnte es im Rahmen der Datenvermeidung dem Kunden überlassen werden, ob er bei [ja] diese Angabe macht.
    5 Antworten
    4130 Aufrufe
    12. April 2011, 20:38:44 von Tomcraft
    4 Antworten
    4557 Aufrufe
    05. Oktober 2011, 01:11:22 von Tomcraft