Jump to content

Warenkorb Checkbox Text/Links ändern/einfügen


Shapeir

Recommended Posts

Hallo,

Ich verwende Prestashop 1.74 mit dem Rechtsicherheitsmodul (ps_legalcompliance).

Nun habe ich mir folgenden Text in die Übersetzungen zur Checkbox vom Warenkorb (AGB bestätigung) eingefügt:

Quote

Mit meiner Bestellung erklären ich mich mit den [Allgemeinen Geschäfts-] & Datenschutzbestimmungen einverstanden. Ich habe das [Widerrufsrecht] zur Kenntnis genommen und versichere dass ich volljährig bin.

Nun wird für das erste [Allgemeinen Geschäfts-] und [Widerrufsrecht] der passende Link eingefügt.

Ich möchte aber auch das die Datenschutzbestimmungen (nennt sich bei mir: content/7-datenschutz) als Link anklickbar sind.

Ich habe nun im ps_legalcompliance Ordner die ps_legalcompliance.php ausfindig gemacht.

Folgede Zeilen 769 - 801 scheinen dafür zuständig zu sein.

  public function hookTermsAndConditions($param)
    {
        $returned_terms_and_conditions = array();

        $cms_repository = $this->entity_manager->getRepository('CMS');
        $cms_role_repository = $this->entity_manager->getRepository('CMSRole');
        $cms_page_conditions_associated = $cms_role_repository->findOneByName(self::LEGAL_CONDITIONS);
        $cms_page_revocation_associated = $cms_role_repository->findOneByName(self::LEGAL_REVOCATION);

        if (Configuration::get('PS_CONDITIONS') && (int) $cms_page_conditions_associated->id_cms > 0 && (int) $cms_page_revocation_associated->id_cms > 0) {
            $cms_conditions = $cms_repository->i10nFindOneById((int) $cms_page_conditions_associated->id_cms,
                                                               (int) $this->context->language->id,
                                                               (int) $this->context->shop->id);
            $link_conditions =
                $this->context->link->getCMSLink($cms_conditions, $cms_conditions->link_rewrite, (bool) Configuration::get('PS_SSL_ENABLED'));

            $cms_revocation = $cms_repository->i10nFindOneById((int) $cms_page_revocation_associated->id_cms,
                                                               (int) $this->context->language->id,
                                                               (int) $this->context->shop->id);
            $link_revocation =
                $this->context->link->getCMSLink($cms_revocation, $cms_revocation->link_rewrite, (bool) Configuration::get('PS_SSL_ENABLED'));

            $termsAndConditions = new TermsAndConditions();
            $termsAndConditions
                ->setText(
                    $this->trans('I agree to the [terms of service] and [revocation terms] and will adhere to them unconditionally.', [], 'Modules.Legalcompliance.Shop'),
                    $link_conditions,
                    $link_revocation
                )
                ->setIdentifier('terms-and-conditions')
            ;
            $returned_terms_and_conditions[] = $termsAndConditions;
        }

Die Datenschutzbestimmungen scheinen in dieser Datei LEGAL_PRIVACY zu heissen, leider weiss ich nicht wie ich sie einbinden kann.

Da ich mich leider mit der ganzen Materie nicht auskenne, wollte ich nun fragen ob mir hier evtl. jemand weitehelfen kann.

Die warscheinlich verantworliche Datei habe ich auch begefügt.

Vielen Dank schonmal.

Shapeir

ps_legalcompliance.php

Link to comment
Share on other sites

Das Array LEGAL_PRIVACY enthält nur den Namen der Seite und die Kurzerläuterung dazu für das Konfigurationsmenü von ps_legalcompliance. Das würde dir nur helfen, wenn du das Modul erweitern wolltest. Das würde allerdings einer Reihe von Eingriffen erfordern. Für dich würde es aber vermutlich ausreichen, den Text im Checkout durch einen zusätzlichen Link zu erweitern, der ungefähr so aussehen würde: 

<a href="{$link->getCMSLink('7','datenschutz')}">{l s='Data Privacy'}</a>

Nur ...Rechtlich erforderlich ist er hier nicht, jedenfalls nicht in Deutschland.

Link to comment
Share on other sites

Ja vielen Dank. Ich finde es einfach schöner, wenn alles anklickbar ist.

Im Rechtsicherheitsmodul  selbst kann man diese Funktion ja nicht deaktivieren.

Daran dachte ich auch schon, wie kann ich diese Funktion im Rechtsicherheitsmodul ausklammern/deaktivieren?

Dadurch könnte der Original Hinweis  wieder angezeigt werden den ich dann (nennt sich bei mir payment.tpl) bearbeiten kann?

 

Link to comment
Share on other sites

iIch habe jetzt in der ps_legalcompliance.php Zeile 773 bis 776 ausgeklammert

    /*  $cms_repository = $this->entity_manager->getRepository('CMS');
        $cms_role_repository = $this->entity_manager->getRepository('CMSRole');
        $cms_page_conditions_associated = $cms_role_repository->findOneByName(self::LEGAL_CONDITIONS);
        $cms_page_revocation_associated = $cms_role_repository->findOneByName(self::LEGAL_REVOCATION);      */

    /*  $cms_repository = $this->entity_manager->getRepository('CMS');
        $cms_role_repository = $this->entity_manager->getRepository('CMSRole');
        $cms_page_conditions_associated = $cms_role_repository->findOneByName(self::LEGAL_CONDITIONS);
        $cms_page_revocation_associated = $cms_role_repository->findOneByName(self::LEGAL_REVOCATION);      */

Nun erscheint wieder der alte Hinweis.

Edited by Shapeir (see edit history)
Link to comment
Share on other sites

Jetzt habe ich folgednes geändert, (ich kenne mich tatsählich garnicht aus, daher sei mir bitte jeder fehler vergeben :) )

    <form id="conditions-to-approve" method="GET">
      <ul>
        {foreach from=$conditions_to_approve item="condition" key="condition_name"}
          <li>
            <div class="float-xs-left">
              <span class="custom-checkbox">
                <input  id    = "conditions_to_approve[{$condition_name}]"
                        name  = "conditions_to_approve[{$condition_name}]"
                        required
                        type  = "checkbox"
                        value = "1"
                        class = "ps-shown-by-js"
                >
                <span><i class="material-icons rtl-no-flip checkbox-checked">&#xE5CA;</i></span>
              </span>
            </div>
            <div class="condition-label"> {l s='Mit meiner Bestellung erklaeren ich mich mit den '}<a href="{$link->getCMSLink('3','AGB')}">{l s='AGB'}</a>{l s=' einverstanden. Ich habe die '}<a href="{$link->getCMSLink('7','Datenschutz')}">{l s='Datenschutzbestimmungen'}</a>{l s=' und das '}<a href="{$link->getCMSLink('6','Wiederrufsrecht')}">{l s='Wiederrufsrecht'}</a>{l s=' zur Kenntnis genommen und versichere dass ich volljaehrig bin. '}
           {*   <label class="js-terms" for="conditions_to_approve[{$condition_name}]">
                {$condition nofilter}
              </label>                  *}
            </div>
          </li>
        {/foreach}
      </ul>
    </form>

Nun hätte ich noch eine Frage:

So wie ich es gemacht habe gibt es zwei Probleme.

1.) Wenn ich umlaute eingebe wird der Text nicht ausgegeben. Wie kann ich umlaute einbauen?

Mit meiner Bestellung erklaeren ich mich mit den AGB einverstanden. Ich habe die Datenschutzbestimmungen und das Wiederrufsrecht zur Kenntnis

genommen und versichere dass ich volljaehrig bin.

Beim alten Modul wurde bei klick auf den Link nicht eine neue Site geöfnet, sondern ein Popup. Kann ich dies hier auch einbauen=

Vielen Dank.

 

Link to comment
Share on other sites

Das scheint ein Problem von 1.7. zu sein, wenn man die Umlaute im Quellcode eingibt.

Den Bock hast du aber jetzt selbst geschossen, weil du sowieso nicht einfach Text eingegeben hast, sondern mit deutschem (!) Text einen Quelltext für die Übersetzung kreiert hast. Du kannst das entweder korrigieren oder du übersetzt im Back Office deine neuen "Übersetzungsvariablen" gleich nochmal - diesmal werden dann auch die Umlaute akzeptiert. 😉

Worauf man achten muss bei solchen Variablen habe ich hier erklärt: https://www.prestashop.com/forums/topic/534488-artikelnummer-bei-kacheln-und-liste-anzeigen-lassen/?do=findComment&comment=3045334

Für das Pop-up braucht man eine Fancybox. Du kannst es man so versuchen:

<a href="{$link->getCMSLink('7','datenschutz')}?content_only=1" class="iframe"> {l s='Data Privacy'}</a> 

Aber ich fürchte, das wird in 1.7 nicht mehr klappen. Falls man, da bin ich mir nicht sicher, allerdings auch in 1.7 (da kann ich im Moment nicht nachsehen - und die Demoversion Prestashops im Internet ist vermutlich die langsamste des Universums) IFrames aktivieren kann, dann solltest du das tun. 

Link to comment
Share on other sites

Also das mit dem Popup konnte ich schon lösen. Im Prestashop Demo Store geht die Popup funktion. Hier ist folgendes enthalten:

<label class="js-terms" for="conditions_to_approve[terms-and-conditions]"> </label>

Ich habe es jetzt so eingebunden.

            <div class="condition-label"><label class="js-terms" for="conditions_to_approve[terms-and-conditions]"> {l s='Mit meiner Bestellung erklaeren ich mich mit den '}<a href="{$link->getCMSLink('3','AGB')}?content_only=1" class="iframe" id="cta-terms-and-conditions-0">{l s='AGB'}</a>{l s=' einverstanden. Ich habe die '}<a href="{$link->getCMSLink('7','Datenschutz')}">{l s='Datenschutzbestimmungen'}</a>{l s=' und das '}<a href="{$link->getCMSLink('6','Wiederrufsrecht')}">{l s='Wiederrufsrecht'}</a>{l s=' zur Kenntnis genommen und versichere dass ich volljaehrig bin. '} </label> 

Das andere mit der Übersetzungsvariablen werde ich dann noch ändern, wen ich es verstehe :).

Link to comment
Share on other sites

Ach ja, mein Fehler! Das mit den Übersetzungen funktioniert ja in 1.7 nicht mehr so wie vorher. Bis 1.6 konnte man einfach eine neue Variable kreieren und diese wurde dann in den Übersetzungen bereitgestellt. Im Hybrid Prestashop 1.7 findet man nebeneinander zwei Übersetzungssysteme: das neue Übersetzungssystem Twig, erkennbar an der jeweiligen Angabe der XML-Datei für die Übersetzung, z.B.

{l s='Order with an obligation to pay' d='Shop.Theme.Checkout'}

So sieht es aus im Core und den bislang angepassten Standardmodulen. In allen anderen Modulen gibt es noch das von mir oben beschriebene Legacy-System, das aber noch die jeweilige Modulangabe führen muss, also:

{l s='Order with an obligation to pay' mod='MeinModul'}

Da aber Twig nicht in der Lage ist, automatisch die Übersetzungsdatei bei neu hinzu gekommenen Variablen zu erweitern, müsste man dies manuell tun, damit man die neu geschaffene Variable im Back Office vorgeschlagen bekommt. Im alten System wurde einfach eine Prüfsumme generiert und eine neue Zeile in die jeweilige Übersetzungsdatei geschrieben. Das sah dann z.B. beim Vorgängermodul für die Rechtssicherheit, AdvancedEUCompliance, so aus, dass man beispielsweise in einer Unterdatei des Moduls (hookOverrideTOSDisplay.tpl) eine Variable definierte:

{l s='I agree to the [1]terms of service[/1] and to the [2]terms of revocation[/2] and will adhere to them unconditionally.' mod='advancedeucompliance'}

in der Datei /modules/advancedeucompliance/translations/de.php stand dann etwa als Übersetzung:

$_MODULE['<{advancedeucompliance}prestashop>hookoverridetosdisplay_5594dc635672facca12fc9181139eb2a'] = 'Die [1]Allgemeinen Geschäftsbedingungen[/1] und das  [2]Widerrufsrecht[/2] habe ich zur Kenntnis genommen und stimme ihnen uneingeschränkt zu.';

Wenn man den Quelltext im Modul änderte, musste man im BO neu übersetzen und die Änderungen wurden dann sofort in der de.php aktualisiert. Im neuen System von Prestashop 1.7 muss dagegen die zuständige Übersetzungsdatei  bei jeder Änderung jeweils manuell erweitert werden, damit die Variable im Back Office präsentiert werden kann. Die muss man dann auch erst mal finden, denn die Aufteilung folgt nach Kriterien der Programmlogik, nicht nach sachlichen Erfordernissen. Fündig wird man bei dieser Variable in der Datei \app\Resources\translations\de-DE\ModulesLegalcomplianceShop.de-DE.xlf

und muss dort folgendes ändern:

        <note>Context:
File: modules/ps_legalcompliance/ps_legalcompliance.php:634</note>
      </trans-unit>
      <trans-unit id="60657eaf863277872e2c9a2d31423842" approved="yes">
        <source>I agree to the [terms of service] and [revocation terms] and will adhere to them unconditionally.</source>
        <target xml:lang="de" state="translated">Die [Allgemeinen Geschäftsbedingungen] und das [Widerrufsrecht] habe ich zur Kenntnis genommen und stimme ihnen uneingeschränkt zu.</target>

Theoretisch sollte es vielleicht sogar ebenso einfach funktionieren wie in den Vorversionen - praktisch ist das aber nicht der Fall! Also war's das wohl erstmal mit den eigenen Erweiterungen bei den Übersetzungsvariablen, denn man scheitert hier daran, dass man selbst keine ID generieren kann.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...