Zásilkovna v SimpleShopu od 2025

Jak přidat možnost „vybrat pobočku Zásilkovny“ přímo ve formulář SimpleShopu

Jak na to od roku 2025, kdy Packeta/Zásilkovna vydala nový Widget

Stačí upravit závěr původního kódu.

Video s návodem (připraveno pro původní kód – logika se neliší, jen je ke konci kód trochu jiný. Na této stránce ho najdete již ve správném znění.)

Jak to tedy vypadá

Máme na výběr ze tří způsobů, jak formulář uchopit.

Možnost A – Potřebuji, aby se výběr pobočky Zásilkovny zobrazoval pouze u jednoho konkrétního produktu ve formuláři (odesílám jej výhradně přes Zásilkovnu).
Možnost B – Formulář slouží pro všechny produkty, ale zákazník si může zvolit mezi Zásilkovnou a jiným způsobem dopravy.
Možnost C – Zásilkovna je dostupná vždy, takže není nutné, aby se pole pro výběr pobočky skrývalo či zobrazovalo podle zvolené dopravy. (Tato varianta byla doplněna až po natočení videa.)

Důležité upozornění: Toto řešení neodesílá údaje přímo do systému Zásilkovny. Nejedná se o oficiální propojení se SimpleShopem, takže při vytvoření objednávky v SimpleShopu se automaticky nevytvoří štítek v Zásilkovně. Doufejme, že se to do budoucna změní.

Obecný postup

  1. Do formuláře přidám povinné pole „Vybrat pobočku“ (typ pole: jednořádkový text).

  2. V kódu stránky si zjistím označení tohoto pole. Hledám ho v samostatné stránce s prodejním formulářem SimpleShopu – má podobnou adresu jako např. https://form.simpleshop.cz/XgYNq/buy/. Odkaz najdu v detailu produktu v SimpleShopu.

  3. Pomocí funkce „Prozkoumat“ v prohlížeči vyhledám v kódu ta speciální písmenka, která jsou uzavřená mezi značkami ::totoKopírujuTaDivnáPísmenka:: (viz video v čase 1:50).

  4. Tato písmenka doplním do připraveného kódu.

  5. Do kódu vložím také svůj API klíč ze Zásilkovny – ten získám, pokud mám podnikatelský účet u Zásilkovny (více na https://www.zasilkovna.cz/jak-to-funguje).

  6. Celý kód vložím v SimpleShopu do daného produktu pod záložku Ostatní  JS, CSS a jiné kódy.

  7. Vytvořím varianty produktu a zjistím, na kterém místě v pořadí je varianta s dopravou přes Zásilkovnu. Pořadí se v kódu počítá od nuly – první má číslo 0, druhá 1, třetí 2 atd.

  8. V šestém řádku kódu ověřím nebo případně upravím správné číslo pořadí, například: var zasilkovnaValue = ‚1‘

Kód pro Možnost A – Zásilkovna jen u jednoho konkrétního produktu
<script type="text/javascript">
    /* CONFIG PROPERTIES BEGIN */
    var inputName = 'payment[-::tadyTaDivnaPísmenka::value]';
    var hiddenFieldName = 'payment[-::TadyTakyTaDivnáPísmenka::name]';
    var transportSelectorName = 'payment[items::0::key_radio]';
    var zasilkovnaValue = '1';
    /* CONFIG PROPERTIES END */

    var zasilkovnaInput = document.querySelector("input[name='" + inputName + "']");
    var zasilkovnaHidden = document.querySelector("input[name='" + hiddenFieldName + "']");

    var zasilkovnaParent = zasilkovnaInput.parentNode.parentNode;

    var selectZasilkovnaButton = document.createElement('button');
    selectZasilkovnaButton.textContent = 'Vybrat pobočku';
    selectZasilkovnaButton.setAttribute('class', 'packeta-selector-open');
    selectZasilkovnaButton.setAttribute('type', 'button');

    zasilkovnaInput.parentNode.insertBefore(selectZasilkovnaButton, zasilkovnaInput);
    zasilkovnaInput.setAttribute('class', 'packeta-selector-branch-name');
    zasilkovnaHidden.setAttribute('class', 'packeta-selector-branch-id');

    zasilkovnaInput.setAttribute('readonly', 'readonly');
    zasilkovnaInput.parentNode.style.display = 'flex';

    console.log(document.querySelector("input[name='" + transportSelectorName + "']").value);
    var showHideZasilkovna = function(value) {
        var state = value === zasilkovnaValue ? 'block' : 'none';
        zasilkovnaParent.style.display = state;

        zasilkovnaInput.value = state === 'block' ? '' : 'N/A';
    }

    var transportSelectors = document.querySelectorAll("input[name='" + transportSelectorName + "']");
    var zasilkovnaSelected = false;
    for (var i = 0; i < transportSelectors.length; i++) {
        transportSelectors[i].addEventListener('change', function() {
            showHideZasilkovna(this.value);
        });
        if ((transportSelectors[i].value === zasilkovnaValue) && !transportSelectors[i].checked) {
            zasilkovnaParent.style.display = 'none';
        }
    }
</script>

<script>
    var packetaSelectorOpen = '.packeta-selector-open';
    var packetaSelectorBranchName = '.packeta-selector-branch-name';
    var packetaSelectorBranchId = '.packeta-selector-branch-id';
    var packetaCountry = 'cz';
    var packetaWidgetLanguage = 'cs';

    var packetaPrimaryButtonColor = '#39b54a';
    var packetaBackgroundColor = '#ffffff';
    var packetaFontColor = '#555555';
    var packetaFontFamily = 'Arial';
</script>

<script src=“https://widget.packeta.com/www/js/library.js“></script>

<script>
// Tvůj Packeta API klíč:
const packetaApiKey = 'TadyKopírujeteAPIklíčZásilkovny';

const packetaOptions = {
language: ‚cs‘,
view: ‚modal‘,
vendors: [{ country: ‚cz‘ }],

valueFormat: ‚“Packeta“,id,carrierId,carrierPickupPointId,name,city,street‘
};

// Otevření widgetu po kliku na tvoje tlačítko
document.querySelectorAll(‚.packeta-selector-open‘).forEach(btn => {
btn.addEventListener(‚click‘, (e) => {
e.preventDefault();
Packeta.Widget.pick(packetaApiKey, (point) => {
const nameEl = document.querySelector(‚.packeta-selector-branch-name‘);
const idEl = document.querySelector(‚.packeta-selector-branch-id‘);

if (point) {
nameEl.value = point.formatedValue || [point.name, point.street, point.city].filter(Boolean).join(‚, ‚);
// ID pobočky – v různých režimech může přijít jiný klíč:
idEl.value = point.id || point.carrierPickupPointId || “;
} else {
nameEl.value = “;
idEl.value = “;
}
}, packetaOptions);
});
});
</script>
Kód pro Možnost B – Zásilkovna jako jedna z možností

Tady je potřeba si vyhrát s nastavením 0 a 1 podle toho, která varianta doplňkového prodeje je práve zásilkovna.

<script type="text/javascript">
    /* CONFIG PROPERTIES BEGIN */
    var inputName = 'payment[-::tadyTaDivnaPísmenka::value]';
    var hiddenFieldName = 'payment[-::TadyTakyTaDivnáPísmenka::name]';
    var transportSelectorName = 'payment[items::1::key_radio]';
    var zasilkovnaValue = '0';
    /* CONFIG PROPERTIES END */

    var zasilkovnaInput = document.querySelector("input[name='" + inputName + "']");
    var zasilkovnaHidden = document.querySelector("input[name='" + hiddenFieldName + "']");

    var zasilkovnaParent = zasilkovnaInput.parentNode.parentNode;

    var selectZasilkovnaButton = document.createElement('button');
    selectZasilkovnaButton.textContent = 'Vybrat pobočku';
    selectZasilkovnaButton.setAttribute('class', 'packeta-selector-open');
    selectZasilkovnaButton.setAttribute('type', 'button');

    zasilkovnaInput.parentNode.insertBefore(selectZasilkovnaButton, zasilkovnaInput);
    zasilkovnaInput.setAttribute('class', 'packeta-selector-branch-name');
    zasilkovnaHidden.setAttribute('class', 'packeta-selector-branch-id');

    zasilkovnaInput.setAttribute('readonly', 'readonly');
    zasilkovnaInput.parentNode.style.display = 'flex';

    console.log(document.querySelector("input[name='" + transportSelectorName + "']").value);
    var showHideZasilkovna = function(value) {
        var state = value === zasilkovnaValue ? 'block' : 'none';
        zasilkovnaParent.style.display = state;

        zasilkovnaInput.value = state === 'block' ? '' : 'N/A';
    }

    var transportSelectors = document.querySelectorAll("input[name='" + transportSelectorName + "']");
    var zasilkovnaSelected = false;
    for (var i = 0; i < transportSelectors.length; i++) {
        transportSelectors[i].addEventListener('change', function() {
            showHideZasilkovna(this.value);
        });
        if ((transportSelectors[i].value === zasilkovnaValue) && !transportSelectors[i].checked) {
            zasilkovnaParent.style.display = 'none';
        }
    }
</script>

<script>
    var packetaSelectorOpen = '.packeta-selector-open';
    var packetaSelectorBranchName = '.packeta-selector-branch-name';
    var packetaSelectorBranchId = '.packeta-selector-branch-id';
    var packetaCountry = 'cz';
    var packetaWidgetLanguage = 'cs';

    var packetaPrimaryButtonColor = '#39b54a';
    var packetaBackgroundColor = '#ffffff';
    var packetaFontColor = '#555555';
    var packetaFontFamily = 'Arial';
</script>
<script src=“https://widget.packeta.com/www/js/library.js“></script>

<script>
// Tvůj Packeta API klíč:
const packetaApiKey = 'TadyKopírujeteAPIklíčZásilkovny';

const packetaOptions = {
language: ‚cs‘,
view: ‚modal‘,
vendors: [{ country: ‚cz‘ }],

valueFormat: ‚“Packeta“,id,carrierId,carrierPickupPointId,name,city,street‘
};

// Otevření widgetu po kliku na tvoje tlačítko
document.querySelectorAll(‚.packeta-selector-open‘).forEach(btn => {
btn.addEventListener(‚click‘, (e) => {
e.preventDefault();
Packeta.Widget.pick(packetaApiKey, (point) => {
const nameEl = document.querySelector(‚.packeta-selector-branch-name‘);
const idEl = document.querySelector(‚.packeta-selector-branch-id‘);

if (point) {
nameEl.value = point.formatedValue || [point.name, point.street, point.city].filter(Boolean).join(‚, ‚);
// ID pobočky – v různých režimech může přijít jiný klíč:
idEl.value = point.id || point.carrierPickupPointId || “;
} else {
nameEl.value = “;
idEl.value = “;
}
}, packetaOptions);
});
});
</script>
Kód pro Možnost C – Zásilkovna za všech okolností

Pokud potřebujete mít políčko na Vybrání pobočky za všech okolností (ať už je ve formuláři jenom jeden produkt, nebo více ale všechny se posílají a vždy jen Zásilkovnou, platí pro vás kód níže. A stačí do něj vyplnit „TaDivnáPísmenka“ a API Zásilkovny.

 

<script type="text/javascript">
    /* CONFIG PROPERTIES BEGIN */
    var inputName = 'payment[-::tadyTaDivnaPísmenka::value]';
    var hiddenFieldName = 'payment[-::tadyTaDivnaPísmenka::name]';

    /* CONFIG PROPERTIES END */

    var zasilkovnaInput = document.querySelector("input[name='" + inputName + "']");
    var zasilkovnaHidden = document.querySelector("input[name='" + hiddenFieldName + "']");

    var zasilkovnaParent = zasilkovnaInput.parentNode.parentNode;

    var selectZasilkovnaButton = document.createElement('button');
    selectZasilkovnaButton.textContent = 'Vybrat pobočku';
    selectZasilkovnaButton.setAttribute('class', 'packeta-selector-open');
    selectZasilkovnaButton.setAttribute('type', 'button');

    zasilkovnaInput.parentNode.insertBefore(selectZasilkovnaButton, zasilkovnaInput);
    zasilkovnaInput.setAttribute('class', 'packeta-selector-branch-name');
    zasilkovnaHidden.setAttribute('class', 'packeta-selector-branch-id');

    zasilkovnaInput.setAttribute('readonly', 'readonly');
    zasilkovnaInput.parentNode.style.display = 'flex';

    console.log(document.querySelector("input[name='" + transportSelectorName + "']").value);
    var showHideZasilkovna = function(value) {
        var state = value === zasilkovnaValue ? 'block' : 'none';
        zasilkovnaParent.style.display = state;

        zasilkovnaInput.value = state === 'block' ? '' : 'N/A';
    }

    var transportSelectors = document.querySelectorAll("input[name='" + transportSelectorName + "']");
    var zasilkovnaSelected = false;
    for (var i = 0; i < transportSelectors.length; i++) {
        transportSelectors[i].addEventListener('change', function() {
            showHideZasilkovna(this.value);
        });
        if ((transportSelectors[i].value === zasilkovnaValue) && !transportSelectors[i].checked) {
            zasilkovnaParent.style.display = 'none';
        }
    }
</script>

<script>
    var packetaSelectorOpen = '.packeta-selector-open';
    var packetaSelectorBranchName = '.packeta-selector-branch-name';
    var packetaSelectorBranchId = '.packeta-selector-branch-id';
    var packetaCountry = 'cz';
    var packetaWidgetLanguage = 'cs';

    var packetaPrimaryButtonColor = '#39b54a';
    var packetaBackgroundColor = '#ffffff';
    var packetaFontColor = '#555555';
    var packetaFontFamily = 'Arial';
</script>

<script src=“https://widget.packeta.com/www/js/library.js“></script>

<script>
// Tvůj Packeta API klíč:
const packetaApiKey = 'TadyKopírujeteAPIklíčZásilkovny';

const packetaOptions = {
language: ‚cs‘,
view: ‚modal‘,
vendors: [{ country: ‚cz‘ }],

valueFormat: ‚“Packeta“,id,carrierId,carrierPickupPointId,name,city,street‘
};

// Otevření widgetu po kliku na tvoje tlačítko
document.querySelectorAll(‚.packeta-selector-open‘).forEach(btn => {
btn.addEventListener(‚click‘, (e) => {
e.preventDefault();
Packeta.Widget.pick(packetaApiKey, (point) => {
const nameEl = document.querySelector(‚.packeta-selector-branch-name‘);
const idEl = document.querySelector(‚.packeta-selector-branch-id‘);

if (point) {
nameEl.value = point.formatedValue || [point.name, point.street, point.city].filter(Boolean).join(‚, ‚);
// ID pobočky – v různých režimech může přijít jiný klíč:
idEl.value = point.id || point.carrierPickupPointId || “;
} else {
nameEl.value = “;
idEl.value = “;
}
}, packetaOptions);
});
});
</script>

A která část je nová?

<script src=“https://widget.packeta.com/www/js/library.js“></script>

<script>
// Tvůj Packeta API klíč:
const packetaApiKey = 'TadyKopírujeteAPIklíčZásilkovny';

const packetaOptions = {
language: ‚cs‘,
view: ‚modal‘,
vendors: [{ country: ‚cz‘ }],

valueFormat: ‚“Packeta“,id,carrierId,carrierPickupPointId,name,city,street‘
};

// Otevření widgetu po kliku na tvoje tlačítko
document.querySelectorAll(‚.packeta-selector-open‘).forEach(btn => {
btn.addEventListener(‚click‘, (e) => {
e.preventDefault();
Packeta.Widget.pick(packetaApiKey, (point) => {
const nameEl = document.querySelector(‚.packeta-selector-branch-name‘);
const idEl = document.querySelector(‚.packeta-selector-branch-id‘);

if (point) {
nameEl.value = point.formatedValue || [point.name, point.street, point.city].filter(Boolean).join(‚, ‚);
// ID pobočky – v různých režimech může přijít jiný klíč:
idEl.value = point.id || point.carrierPickupPointId || “;
} else {
nameEl.value = “;
idEl.value = “;
}
}, packetaOptions);
});
});
</script>

A nahrazuje tuto:

<script src=“https://widget.packeta.com/www/js/packetaWidget.js“ data-api-key=“TADY-BYL-API-KLÍČ“></script>

Vycházím z https://github.com/MiliusCZ/simpleshop-zasilkovna následně jsem kód upravila pro jednotlivé varianty a pro verzi novou verzi widgetu (2025). Snad se mi povedlo implementaci Zásilkovny lépe vysvětlit

Tipy a triky z webařiny a online podnikání

pro vás píše
Kristýna Jarošová

Proč textu věnovat pozornost?

Zhuštěné CV autorky:

– 20 let webařiny
– přes 7 let marketingu
– schopnost vysvětlit odborné věcí lidem mimo obor

Spolupráce na dálku

Potřebujete pošťouchnout, nebo přímo pomoct?

V online světě je snadné se ztratit. Tolik možností, nástrojů a cest… A přitom klíč k úspěchu často spočívá v jednoduchosti, správné struktuře a chytrém propojení.
Právě s tím vám mohu pomoci.

Další informace →

Nechcete zmeškat žádnou novinku?

Další články

Google hází vidle do nastavení SEO

Google hází vidle do nastavení SEO

 Dneska přidám něco, co vás možná taky trápí – skvělým zdrojem informací byla SEOexpertkaAlexandra Staňková.  Meta popisky (meta description). Možná jste už nad nimi strávili hodiny… a pak zjistíte, že Google si stejně text upraví.  Podle pozorování Saši ve více...

číst více
Tip č.2 – Vysvětluj, ukazuj

Tip č.2 – Vysvětluj, ukazuj

🌟 Nečekej, že si klientky představí totéž, co ty. „UKAZUJ, VYSVĚTLUJ“ 🌟 Ahoj podnikatelky! Dnes mám pro vás konkrétní návod, jak zjednodušit komunikaci a vyhnout se nedorozuměním. Představte si, že nabízíte online kurz face jógy – jak nejčastěji popisujete výsledek?...

číst více
Dej si web do pucu – letní webová výzva

Dej si web do pucu – letní webová výzva

Chodíš pořád kolem horké kaše? Víš, že by se na tvém webu mělo máknout, ale stále to odkládáš? Teď je ten pravý čas. Nejen, že budeš mít víc času. A navíc pokud půjdeš do letní výzvy, povedu tě krok po kroku s jasným návodem, jak na to. A kdybys náhodou měla...

číst více

✨ PS: Tvořím facebookovou komunitu kolem online podnikání v Česku – přidejte se!