Werbung / Banner buchen
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:

Autor Thema: MODUL: Erweiterung der Anrede bei Registrierung um Auswahlmöglichkeit "KEINE"  (Gelesen 1211 mal)

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.176
  • Geschlecht: Männlich
    • Teile Beitrag
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

Offline Bonner

  • Fördermitglied
  • *****
  • Beiträge: 715
  • Geschlecht: Männlich
    • Teile Beitrag
: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

Offline FräuleinGarn

  • Fördermitglied
  • *****
  • Beiträge: 3.326
    • Teile Beitrag
Danke noRiddle.

Offline fishnet

  • Fördermitglied
  • *****
  • Beiträge: 4.725
  • Geschlecht: Männlich
    • Teile Beitrag
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.

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.176
  • Geschlecht: Männlich
    • Teile Beitrag
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

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.176
  • Geschlecht: Männlich
    • Teile Beitrag
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.

Offline fishnet

  • Fördermitglied
  • *****
  • Beiträge: 4.725
  • Geschlecht: Männlich
    • Teile Beitrag
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!]

Offline Tomcraft

  • modified Team
  • *****
  • Gravatar
  • Beiträge: 43.845
  • Geschlecht: Männlich
    • Teile Beitrag
[...] 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

Offline fishnet

  • Fördermitglied
  • *****
  • Beiträge: 4.725
  • Geschlecht: Männlich
    • Teile Beitrag
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.

Offline Tomcraft

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

Grüß

Torsten

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.176
  • Geschlecht: Männlich
    • Teile Beitrag
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!]

Offline WeXsler

  • Schreiberling
  • ****
  • Beiträge: 456
    • Teile Beitrag
In der template-Datei /module/checkout_new_address.html, wäre das dann auch noch anzupassen.

Offline noRiddle

  • Experte
  • *****
  • Beiträge: 10.176
  • Geschlecht: Männlich
    • Teile Beitrag
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


Teile per facebook Teile per linkedin Teile per twitter

 


             
anything