Propojení Elementor formuláře se Zásilkovnou

Obrázek Ondřej Koziorek
Ondřej Koziorek

Pokud chcete ve svém formuláři v Elementoru nabídnout uživateli výběr z poboček Zásilkovny, můžete to provést pomocí jejich API. Důležité je, že se musíte v Zásilkovně zaregistrovat, abyste měli vlastní API klíč. 

Postupoval jsem podle návodu na propojení přes Simpleshopdokumentace Zásilkovny.

Jak na to? Nejprve vytvořte tři pole: První bude radio buttons pro výběr možnosti dopravy a pojmenujte jej s ID doprava. Název pole a hodnota se oddělují znakem |, proto možnost Zásilkovna pojmenujte jako „Zásilkovnou po ČR|zasilkovna“ (viz screenshot).

Snimek obrazovky 2024 10 31 v 21.56.33

Druhé pole bude textové s ID zasilkovna_address bez názvu pole – bude sloužit pro adresu. Třetí bude skryté pole s ID zasilkovna_id – to bude sloužit pro uložení přesného ID pobočky.

Poté vložte následující kód přes HTML element.

				
					<style>
    .packeta-selector-open {
        background-color: black;
        color: white;
        padding: 10px 20px;
        border: none;
        cursor: pointer;
        margin-top: 10px;
        margin: 10px; /* Margin kolem tlačítka */
    }

    .packeta-hidden {
        display: none; /* Skrytí polí pro uživatele */
    }

    .selected-pickup-point {
        margin: 10px; /* Margin kolem textu o vybrané pobočce */
        font-size: 16px;
        color: #333;
    }
</style>

<script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function() {
        const inputName = 'form_fields[zasilkovna_address]'; // Pole pro adresu pobočky Zásilkovny
        const hiddenFieldName = 'form_fields[zasilkovna_id]'; // Skryté pole pro ID pobočky
        const transportSelectorName = 'form_fields[doprava]'; // Název pole pro výběr dopravy
        const zasilkovnaOptionValue = 'zasilkovna'; // Hodnota možnosti "Zásilkovnou po ČR"

        // Vyhledání polí ve formuláři
        const zasilkovnaInput = document.querySelector(`input[name="${inputName}"]`);
        const zasilkovnaHidden = document.querySelector(`input[name="${hiddenFieldName}"]`);
        const transportSelectors = document.querySelectorAll(`input[name="${transportSelectorName}"]`);
        
        if (zasilkovnaInput && zasilkovnaHidden && transportSelectors.length > 0) {
            // Skrytí pole pro adresu pro uživatele (ale necháme viditelné pro systém)
            zasilkovnaInput.classList.add('packeta-hidden');

            // Přidání tlačítka pro výběr pobočky
            const selectZasilkovnaButton = document.createElement('button');
            selectZasilkovnaButton.textContent = 'Vybrat pobočku';
            selectZasilkovnaButton.setAttribute('class', 'packeta-selector-open');
            selectZasilkovnaButton.setAttribute('type', 'button');
            selectZasilkovnaButton.style.display = 'none'; // Skrytí tlačítka na začátku

            // Přidání elementu pro zobrazení vybrané pobočky
            const selectedPickupPointDiv = document.createElement('div');
            selectedPickupPointDiv.setAttribute('class', 'selected-pickup-point');
            selectedPickupPointDiv.textContent = 'Žádná pobočka vybrána';
            selectedPickupPointDiv.style.display = 'none'; // Skrytí divu s pobočkou na začátku

            zasilkovnaInput.parentNode.insertBefore(selectZasilkovnaButton, zasilkovnaInput);
            zasilkovnaInput.parentNode.insertBefore(selectedPickupPointDiv, zasilkovnaInput);

            // Zobrazení tlačítka a divu s pobočkou při výběru "Zásilkovnou po ČR"
            transportSelectors.forEach(function(selector) {
                selector.addEventListener('change', function() {
                    if (selector.value === zasilkovnaOptionValue && selector.checked) {
                        selectZasilkovnaButton.style.display = 'block';
                        selectedPickupPointDiv.style.display = 'block';
                    } else {
                        selectZasilkovnaButton.style.display = 'none';
                        selectedPickupPointDiv.style.display = 'none';
                        zasilkovnaInput.value = '';
                        zasilkovnaHidden.value = '';
                        selectedPickupPointDiv.textContent = 'Žádná pobočka vybrána';
                    }
                });
            });

            // Otevření widgetu po kliknutí na tlačítko
            selectZasilkovnaButton.addEventListener('click', function() {
                Packeta.Widget.pick('9d1af6fe525aeef7291f4896a986ec1b', function(point) {
                    if (point) {
                        // Uložení kompletní adresy do viditelného pole pro systém a také ID do skrytého pole
                        zasilkovnaInput.value = `${point.name}, ${point.street}, ${point.zip} ${point.city}`;
                        zasilkovnaHidden.value = point.id;

                        // Zobrazení názvu vybrané pobočky pro uživatele
                        selectedPickupPointDiv.textContent = `Vybraná pobočka: ${point.name}, ${point.street}, ${point.zip} ${point.city}`;

                        // Znovu zpřístupnění tlačítka pro případný opakovaný výběr
                        selectZasilkovnaButton.textContent = 'Změnit pobočku';
                        selectZasilkovnaButton.disabled = false;
                    }
                }, {
                    country: 'cz',
                    language: 'cs',
                    primaryColor: '#39b54a',
                    backgroundColor: '#ffffff',
                    buttonTextColor: '#555555',
                    fontFamily: 'Manrope',
                });
                
                // Dočasné zablokování tlačítka, dokud není výběr dokončen
                selectZasilkovnaButton.disabled = true;
            });
        } else {
            console.error("Pole Zásilkovna nebo doprava nebylo nalezeno. Zkontrolujte názvy polí.");
        }
    });
</script>

<script src="https://widget.packeta.com/v6/www/js/library.js" data-api-key="XXXXXXXXXX"></script> /* zde vložte Váš API klíč !!!

				
			

A je to – nyní, když uživatel zvolí dopravu přes Zásilkovnu, otevře se pop-up okno s výběrem pobočky. Poté vám přijde na e-mail informace o pobočce, kterou si uživatel vybral.

Nezapomeňte, že tento kód umožňuje pouze výběr pobočky – zásilku v Zásilkovně je stále nutné vytvořit ručně.