Press "Enter" to skip to content

[AKTUALIZACJA] dodatkowy checkbox na etapie zamówienia – analogiczny do akceptacji regulaminu sklepu [PrestaShop 1.6]

Admin 23

Ten artykuł jest częścią naszego zbiorczego poradnika jak przystosować sklep oparty o PrestaShop 1.6 do zmian RODO. Zapraszamy do lektury!

RODO – jak do niego przygotować sklep PrestaShop? [AKTUALIZACJA]

Na etapie zamówienia domyślnie znajduje się checkbox (krateczka) zgody na warunki regulaminu który musi być zaznaczony aby przejść dalej.

Czasem zachodzi potrzeba dodania dodatkowej, obowiązkowej zgody klienta aby proces zamówienia mógł być zrealizowany. Np. w kwestii akceptacji na przetwarzanie danych osobowych (tzw „Ustawa Konsumencka”). Dziś pokażemy jak dodać taką kratkę.

Tutorial jest przeznaczony głównie dla procesu 5-krokowego dla wykonywanego zamówienia (nie „one page checkout„).  Kratka pojawia się na 4 kroku „Wysyłka„. Jeśli masz włączony proces jednostronnicowy wykonywania zamówienia – modyfikacja będzie odmienna.

Dla takiego wariantu należy dopisać dodakowy kod (patrz koniec artykułu!)

Tutorial jest przeznaczony pod wersję Presta Shop 1.6 jednak na nieduże odstępstwa w kodzie w stosunku do poprzednich wersji możesz spróbować wdrożyć to na Twojej wersji.

Dodanie checkboxa w HTML

Otwieramy plik:

themes/{NAZWA-SZABLONU}/order-carrier.tpl

Pod checkboxem z zaznaczeniem regulaminu (okolice 366 linii – kod może się nieznacznie różnić):

<p class="checkbox">
<input type="checkbox" name="cgv" id="cgv" value="1" {if $checkedTOS}checked="checked"{/if} />
<label for="cgv">{l s='I agree to the terms of service and will adhere to them unconditionally.'}</label>
<a href="{$link_conditions|escape:'html':'UTF-8'}" class="iframe" rel="nofollow">{l s='(Read the Terms of Service)'}</a>
</p>

doklejamy nasz chceckbox:

<div style="clear: both;"></div>
<p class="checkbox">
<input type="checkbox" name="cgv_duo" id="cgv_duo" value="1" {if $checkedTOS}checked="checked"{/if} />
<label for="cgv_duo">{l s='Wyrażam zgodę na przetwarzanie moich danych osobowych na potrzeby mojego zamówienia'}</label>
</p>

Komunikat, gdy nie zaznaczono checkboxa

W tym samym pliku (okolice 425 linii):

themes/{NAZWA-SZABLONU}/order-carrier.tpl

Na jego końcu, zamieniamy kod Smarty:

{addJsDefL name=msg_order_carrier}{l s='You must agree to the terms of service before continuing.' js=1}{/addJsDefL}

na:

{addJsDefL name=msg_order_carrier}{l s='You must agree to the terms of service before continuing.' js=1}{/addJsDefL}
{addJsDefL name=msg_order_carrier2}{l s='Zgoda na przetwarzanie danych osobowych jest obowiązkowa.' js=1}{/addJsDefL}

Oczywiście dodajemy komunikat wg uznania.

Mechanizm (JavaScript) pokazywania komunikatu

Otwieramy plik:

themes/{NAZWA-SZABLONU}/js/order-carrier.js

Odnajdujemy funkcję acceptCGV() i na jej początku (zaraz po klamrze otwierającej  { ) wklejamy kod:

if (!$('#cgv_duo').is(":checked")) {
if (!!$.prototype.fancybox)
$.fancybox.open([
{
type: 'inline',
autoScale: true,
minHeight: 30,
content: '<p class="fancybox-error">' + msg_order_carrier2 + '</p>'
}],
{
padding: 0
});
else
alert(msg_order_carrier2);
return false;
}

Na identycznej zasadzie możemy dodać dowolną ilość takich checkboxów. Oczywiście odpowiednio zmieniając komunikaty oraz identyfikator checkboxa (tutaj został użyty cgv_duo – możemy użyć np. cgv_tres).

Zakupy na 1 stronie

Powyższy kod dotyczy zakupów w trybie 5-krokowym. Aby zadziałało to też na 1-krokowym (One Page Checkout) wykonaj dodatkowo poniższe zmiany.

Otwórz plik:

themes/default-bootstrap/js/order-opc.js

Zajdź kod (okolice 324 linii):

if ($('#cgv:checked').length !== 0)

Zamień go na:

if ($('#cgv:checked').length !== 0 && $('#cgv_duo:checked').length !== 0)

W tym samym pliku po kodzie (okolice 913 linii):

$('#cgv').on('click', function(e){
    updatePaymentMethodsDisplay();
});

Doklej:

$('#cgv_duo').on('click', function(e){
    updatePaymentMethodsDisplay();
});

Jeszcze został komunikat. Otwórz plik:

translations/pl/errors.php

Znajdź komunikat (taki jest domyślny – Twój może być odmienny):

$_ERRORS['3aa1ae028dee982b0b7a6fa6b8e3b60e'] = 'Proszę zaakceptować regulamin.';

Zamień go na:

$_ERRORS['3aa1ae028dee982b0b7a6fa6b8e3b60e'] = 'Proszę zaakceptować regulamin i zgodę na przetwarzanie danych osobowych.';

  1. Kuba Kuba

    Bardzo przydatny artykuł. Mam jednak pytanie czy jest możliwość, aby dodatkowy chackbox pojawiał się tylko dla wybranych produktów, które wymagają zgody na czynosci dodatkowe, które nie są objęte regulaminem

    • admin admin

      A czy te wybrane produkty mają być z konkretnej kategorii ? Wtedy będzie łatwiej wstawić odpowiedni warunek. Znajdował by się on w pliku szablonu Smarty tpl. Ewentualnie można stworzyć ukrytą kategorię i do niej dopisać te wybrane produkty.

      • Kuba Kuba

        Tak byłaby to ta sama kategoria.

        • admin admin

          Postaram się na dniach przedstawić zarys rozwiązania

          • Kuba Kuba

            Czekam z niecierpliwością

          • admin admin

            Wybacz za długi czas oczekiwania. Oto warunek aby pokazać lub ukryć checkbox jeśli znajdzie się w koszyku produkt z danej kategorii. W naszym przypadku ID kategorii to 11:

            1. Controller – w pliku:

            controllers/front/OrderController.php

            Na linii około 180 po wywołaniu:


            case OrderController::STEP_DELIVERY:
            if (Tools::isSubmit('processAddress')) {
            $this->processAddress();
            }
            $this->autoStep();
            $this->_assignCarrier();

            dodaj kod:


            $productsByCategory = array();

            if (!empty($this->context->cart->getProducts(true))) {
            foreach ($this->context->cart->getProducts(true) as $productitem) {
            $productsByCategory[$productitem['id_category_default']][] = $productitem['id_product'];
            }
            }

            $this->context->smarty->assign('productsByCategory', $productsByCategory);

            2. Widok – w pliku:

            themes/default-bootstrap/order-carrier.tpl

            W miejscu gdzie ma się pojawić / nie pojawić checkbox dodaj warunek:


            {if $productsByCategory.11}
            jest produkt z kategorii 11 (pokazujemy checkbox)
            {else}
            nie ma produktu z kategorii 11 (nie pokazujemy checkboxa)
            {/if}

            Oczywiście to tylko mechanizm. Musisz to odpowiednio sprzężyć z instrukcją zawartą w poście

  2. IveWeb IveWeb

    Czy istnieje sposób aby chechbox był automatycznie zaznaczony tak, aby metody płatności wyświetlały się od razu?

    • admin admin

      Raczej nie. Jest to sprężone z JavaScript chyba żeby wymusić zaznaczenie tego elementu np 2 sekundy po wczytaniu strony. Jednak może być to w sprzeczności z tzw. Ustawą Konsumencką

  3. j j

    Hej Dzięki za poradnik. Mi niestety nie pojawia sie komunikat gdy nie zaznaczymy checkboxa.

    kod:

    function acceptCGV()
    {
    if (!$(’#cgv_3′).is(„:checked”)) {
    if (!!$.prototype.fancybox)
    $.fancybox.open([
    {
    type: 'inline’,
    autoScale: true,
    minHeight: 30,
    content: ” + msg_order_carrier3 + ”
    }],
    {
    padding: 0
    });
    else
    alert(msg_order_carrier3);
    return false;
    }
    if (!$(’#cgv_duo’).is(„:checked”)) {
    if (!!$.prototype.fancybox)
    $.fancybox.open([
    {
    type: 'inline’,
    autoScale: true,
    minHeight: 30,
    content: ” + msg_order_carrier2 + ”
    }],
    {
    padding: 0
    });
    else
    alert(msg_order_carrier2);
    return false;
    }

    if (typeof msg_order_carrier != 'undefined’ && $(’#cgv’).length && !$(’input#cgv:checked’).length)
    {
    if (!!$.prototype.fancybox)
    $.fancybox.open([
    {
    type: 'inline’,
    autoScale: true,
    minHeight: 30,
    content: ” + msg_order_carrier + ”
    }],
    {
    padding: 0
    });
    else
    alert(msg_order_carrier);
    }
    else
    return true;
    return false;
    }

  4. admin admin

    Jest zgłaszany jakiś błąd w JS w którymś z debuggerów? Hmm jakbyś nam podesłał link do strony? Tutaj albo na blog@pskrk.com. Daj też znać jaką wersję Presta Shop posiadasz jeśli można, to pozwoli nam to zbadać.

  5. Sławek Sławek

    Witam. Świetnie działa drugi checkbox w 5 krokach, jednak jak sprawić by działał w jednym kroku?
    W którym pliku dokonać zmiany?
    Pozdrawiam.

    • admin admin

      Niestety nie robiliśmy tej modyfikacji dla „One Page Checkout”. Była by tu konieczna modyfikacja innych szablonów na podobnej zasadzie jak tutaj i możliwe że trzeba by było zmienić inny skrypt JavaScript. Najlepiej przeanalizować w jaki sposób działa w tym trybie domyślne ten element ( checkbox ) i powielić nasze rozwiązanie. Jest tam dość dużo kwestii związanych z walidacją i bardzo wskazana jest uprzednia kopia bezpieczeństwa

      • Sławek Sławek

        W zasadzie chodzi mi tylko o przykład na szablonie domyślnym (default-bootstrap) presty 1.6.

  6. Mike Mike

    Fajny artykul, bardzo przydatny.
    Zrobilem wszystko zgodnie z instrukcją, zastrzeżenie mam tylko do tego ze jak sa oba boxy odhaczone to wywala tylko jeden komunikat np box1 nie zaznaczono, zamiast box1 i box2 nie zaznaczono.
    Ale moje pytanie dotyczy innej kwesti.
    Jak przeniesc boxy np do kroku 3lub2, tak aby walidacja działała? Sam html poprzenosilem, cala funkcje js wkleilem do order adresses ale niestety nie dxiala mi to, tj przechodzi dalej pomimo nie zaznaczonych boxow.

  7. Witam.

    Mam pytanie i ogromnie proszę o pomoc. Czy tego typu chackbox można również dodać podczas zakładania nowego konta?

    Mam moduł “OCHRONA DANYCH OSOBOWYCH”, który podczas zakładania konta się wyświetla, ale również poza tym modułem, musi być osobny chackbox dla akceptacji regulaminu, czy jest szansa na stworzenie takiego chacboxa?

    • admin admin

      Trzeba by było tam przenieść funkcjonalność stamtąd. Do zrobienia. Proszę o pw na blog@pskrk.com

  8. Witam

    Co prawda bardzo dawno był ten artykuł ale mam pytanie czy istnieje możliwość uwidocznienia odhaczenia tego checkboxa na koncie Klienta że ten checkbox odhaczył podczas rejestracji zlecenia bo w tej chwili niestety jest tylko odhaczenie podczas zamówienia ale nikt oprócz Klienta nie wie co i kiedy odhaczył

    • Admin Admin

      Ten checkbox w tej modyfikacji nie był w żaden sposób powiązany ze zgodą widoczną w panelu klienta. To po prostu obligatoryjna czynność konieczna do wykonania zamówienia. Innymi słowy obowiązkowe zaznaczenie kratki oznaczające wyrażenie zgody na warunki zdeklarowane przy tej kratce. Analogicznie jak z regulaminem. Może to być zgoda na przetwarzanie danych, zgoda na to że produkty mogą mieć drobne rysy itp.

  9. niestety u mnie nie działa.
    zrobiłem wszystko 2 razy wg wskazówek

  10. Andre Andre

    Witam,

    Mam trochę inny problem, a mianowicie na PS 1.7.7.4, w moim szablonie(Interior). Zgoda na akceptację regulaminu od początku ma treść: „Zgadzam się z warunkami świadczenia usług i będę stosować się do nich bezwarunkowo.”, chciałem ją zmienić natomiast nigdzie nie mogę znaleźć miejsca w którym mogę dokonać takiej edycji.

    • Admin Admin

      @Andre trzeba grzebać w źródłach plików niestety. Ewentualnie w bazie danych ps_translation ale wątpie czy tam to będzie 🙁

  11. Bardzo rzeczowo i konkretnie. A nie jakieś ściemnianie jak na innym forum, na temat prawnego uzasadnienia drugiego checkboxa, a rozwiązania brak.
    Jednak nie rozumiem, dlaczego checkbox ze zgodą (ten podstawowy z Presty) pojawia się na stronie wysyłki, a nie na stronie wyboru płatności, gdzie właśnie jest potrzebne ostateczne potwierdzenie. Próbuję go przenieść, ale bez skutku.
    Czy może Pan zaproponować podobne rozwiązanie dla chekboxa na stronie płatności? Niestety w Preście 1.6 nie ma pliku order-payment.js, co pozwalało by na analogiczne rozwiązanie.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
PRESTASHOP 1.7 - Jak na stronie z kategorią dodać listę…