Webotvůrci

Propojování produktů na vícero úrovních

Upraveno: 11. 3. 2025
Jste zde:
Délka čtení: 7 min

Pokud potřebujete propojit produkty podle více parametrů, je nutné vytvořit vícero propojení pro celou skupinu, kterou chcete propojit.

V tomto návodu si vysvětlíme logiku propojování produktů a zároveň vám představíme nástroj, který jsme vytvořili pro zjednodušení přípravy importního souboru.

📌 Potřebujete pomoc?
Neváhejte se na nás obrátit na shoptet@webotvurci.cz 😊

Video

Příklad – logika

Máme model telefonu určité značky, který je dostupný v různých variantách podle:

  • Barvy: černá, bílá, červená
  • Velikosti paměti: 64 GB, 128 GB, 256 GB
  • Stavu telefonu: jakost A (nový), jakost B (rozbalený)

💡 Celkový počet produktů:
Máme všechny kombinace těchto parametrů, tedy 18 produktů (3 barvy × 3 paměti × 2 jakosti).
Každý produkt je samostatný (není ve variantách).


Jak správně propojit produkty?

Každý produkt musí být obsažen v takovém počtu propojení, jaký je počet parametrů, kterými propojujeme.

V tomto případě máme tři parametry (barva, paměť, jakost), takže každý produkt bude součástí 3 propojení.

Princip propojení:

Do každého propojení zařadíme produkty se stejnou hodnotou v ostatních parametrech a propojujeme pouze tím parametrem, který se liší.

  • Pokud chceme vytvořit propojení, ve kterým si zákazník vybírá barvu telefonu. Je třeba nejprve vytvořit propojení, kde jsou stejné hodnoty velikosti paměti a stavu telefonu.
    • V prvním propojení budou telefony 64 GB, jakosti A, které se liší barvou
    • V druhém propojení budou telefony 128 GB, jakosti A, které se liší barvou
    • Ve třetím propojení budou telefony 256 GB, jakosti A, které se liší barvou
    • Ve čtvrtém propojení budou telefony 64 GB, jakosti B, které se liší barvou
    • V pátém propojení budou telefony 128 GB, jakosti B, které se liší barvou
    • V šestém propojení budou telefony 256 GB, jakosti B, které se liší barvou
  • Takto pokračujeme u další parametrů – tedy u paměti, kde kombinujeme hodnoty barvy a jakosti, a u jakosti, kde kombinujeme hodnoty barvy a paměti.
  • V skupiny produktů v našem příkladu bychom vytvořili celkem 21 propojení:
    • Propojení barvou: 3 paměti x 2 jakosti = 6 propojení
    • Propojení pamětí: 3 barvy x 2 jakosti = 6 propojení
    • Propojení jakostí: 3 barvy x 3 paměti = 9 propojení

Výsledkem je, že zákazník si bude moci snadno vybrat telefon na základě barvy, paměti i stavu, aniž by musel procházet desítky samostatných produktů.

Jak si tvorbu víceúrovňových propojení zjednodušit?

Možnosti pro vás máme dvě – první je použití našeho skriptu pro Google Sheets, který vám připraví základ pro importní soubor, který si dále upravíte dle konkrétních typů propojení. Druhou možností je tvorba importního souboru přes kontingenční tabulky. Skript vám vytvoří i propojení v jedné úrovni, pokud má skupina vyplněný jen jeden parametrový sloupec.

Skript pro tvorbu propojení

Tento skript je vytvořen pro použití v Google Sheets a používá Javascript. Není použitelný v Excelu! Pro jeho použití je potřeba si založit nový soubor (typ Sešit Google Sheets, nesmí se jednat o xlsx aj.). V tomto souboru si vytvoříte jeden list s názvem „Data“. Ten musí mít následující strukturu:

  • List bude mít Záhlaví s těmito názvy sloupců:
    • sloupec A – „Klíč“ – bude použito pro vytvoření Interního názvu propojení. Označuje, které položky patří k sobě.
    • sloupec B – „code“ – kódu produktu ze Shoptetu.
    • sloupec C – „název produktu“.
    • sloupce D – XYZ – Názvy parametrů, tak jak chcete, aby se zobrazovaly na frontendu eshopu
  • Klíč – libovolné označení skupiny, kterou budeme propojovat. Skript umí zpracovat více skupin produktů naráz i s rozdílnými použitými parametry. Může se jednat o číslo, název skupiny produktů.
  • Code – kód produktu, tak jak je veden v Shoptetu.
  • Název produktu
  • Parametrové sloupce
    • Jak si je nazvete, tak se propíší data do přípravy importního souboru.
    • Hodnoty do těchto sloupců i názvy sloupců uvádějte podle toho, jak chcete, aby byly vidět na frontendu eshopu – tzn. vyhněte zbytečným zkratkám, zkontrolujte překlepy.
    • Pokud chcete naráz propojovat i jiné skupiny produktů s odlišnými použitými parametry, vždy přidejte relevantní sloupce a pouze do těch zapište data. Ostatní sloupce, ze kterých se nemají brát data o parametrech, ponechte prázdná.

Když máte připravená data, zkopírujte si kód, který nejdete níže a přejděte v menu sešitu do Rozšíření – Apps Script. Otevře se Vám nová záložka, kam můžete vložit náš skript.


Vložte zkopírovaný kód a klikněte na Uložit.

Kód pro zpracování dat a tvorbu pokladu pro importní soubor:

function createProductConnections() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName('data');
  var outputSheetName = 'Propojení';
  var outputSheet = ss.getSheetByName(outputSheetName);
  
  // Pokud list "Propojení" neexistuje, vytvoříme ho a přidáme záhlaví
  if (!outputSheet) {
    outputSheet = ss.insertSheet(outputSheetName);
    
    // Záhlaví sloupců podle požadovaného formátu
    var headers = [
      'ID',
      'Pořadí',      
      'Interní název propojení*',
      'Popis hodnot*',
      'Viditelné propojení*',
      'Vlastní design*',
      'Typ propojení*',
      'Kód varianty cílového produktu',
      'CTA HTML',
      'Banner HTML',
      'Design zobrazení propojení',
      'Kód varianty produktu*',
      'Zobrazit produkt v propojení',
      'Zobrazit propojení u produktu',
      'Popis',
      'Barva pozadí',
      'Barva textu',
      'Url obrázku'
    ];
    outputSheet.appendRow(headers);
    
  } else {
    // Pokud list existuje, vymažeme data kromě záhlaví
    if (outputSheet.getLastRow() > 1) {
      outputSheet.getRange(2, 1, outputSheet.getLastRow() - 1, outputSheet.getLastColumn()).clearContent();
    }
  }
  
  // Nastavíme textový formát pro sloupec K (kód varianty produktu)
  outputSheet.getRange("K:K").setNumberFormat("@");
  
  // Získání dat z listu "data"
  var dataRange = dataSheet.getDataRange();
  // Použijeme getDisplayValues(), aby se hodnoty načetly jako text (řetězec)
  var dataValues = dataRange.getDisplayValues();
  
  // Získání záhlaví sloupců
  var dataHeaders = dataValues[0];
  
  // Mapa produktů podle Klíče
  var productsByKey = {};
  
  // Zpracování řádků dat
  for (var i = 1; i < dataValues.length; i++) {
    var row = dataValues[i];
    var key = row[0]; // Klíč ve sloupci A
    if (!key) continue; // Přeskočíme prázdné řádky
    
    var productCode = row[1]; // Kód produktu ve sloupci B
    var productName = row[2]; // Název produktu ve sloupci C

    // Získání parametrů a jejich hodnot pro daný produkt
    var params = {};
    for (var j = 3; j < dataHeaders.length; j++) {
      var paramName = dataHeaders[j];
      var paramValue = row[j];
      if (paramValue !== '') {
        params[paramName] = paramValue;
      }
    }
    
    // Inicializace pole pro daný Klíč, pokud ještě neexistuje
    if (!productsByKey[key]) {
      productsByKey[key] = [];
    }
    
    // Přidání produktu do pole pod daným Klíčem
    productsByKey[key].push({
      code: productCode,
      name: productName,
      params: params
    });
  }
  
  // Příprava dat pro výstup
  var outputData = [];
  
  // Pro každý Klíč
  for (var key in productsByKey) {
    var products = productsByKey[key];
    
    // Získání všech použitých parametrů pro daný Klíč
    var usedParamsSet = new Set();
    products.forEach(function(product) {
      for (var param in product.params) {
        usedParamsSet.add(param);
      }
    });
    var usedParams = Array.from(usedParamsSet);
    
    // Vytvoření propojení pro každý parametr
    usedParams.forEach(function(projParam) {
      // Ostatní parametry (kterými nepropojujeme)
      var otherParams = usedParams.filter(function(p) { return p !== projParam; });
      
      // Mapa skupin produktů podle hodnot ostatních parametrů
      var groupMap = {};
      products.forEach(function(product) {
        // Klíč skupiny vytvořený z hodnot ostatních parametrů
        var groupKey = otherParams.map(function(p) {
          return product.params[p] || '';
        }).join('|');
        
        if (!groupMap[groupKey]) {
          groupMap[groupKey] = [];
        }
        groupMap[groupKey].push(product);
      });
      
      // Vytvoření propojení pro každou skupinu
      for (var groupKey in groupMap) {
        var groupProducts = groupMap[groupKey];
        
        // Zahrnout i skupiny s jedním produktem (odkomentováno)
        // V původním kódu bylo: if (groupProducts.length > 1) { ... }
        
        // Vytvoření Interního názvu propojení
        var otherParamValues = groupKey.split('|').join('');
        var internName = key + ' ' + projParam + ' ' + otherParamValues;
        
        groupProducts.forEach(function(product) {
          var outputRow = [];
          // Sloupec C (Interní název propojení*)
          outputRow[1] = internName;
          // Sloupec D (Popis hodnot*)
          outputRow[2] = projParam;
          // Sloupec L (Kód varianty produktu*)
          outputRow[10] = product.code;
          // Sloupec O (Popis)
          outputRow[13] = product.params[projParam];
          outputData.push(outputRow);
        });
      }
    });
  }
  
  // Zápis dat na list "Propojení"
  if (outputData.length > 0) {
    var startRow = 2;
    var startCol = 2;
    var numRows = outputData.length;
    var numCols = outputSheet.getLastColumn();
    
    // Připravení pole pro zápis s prázdnými hodnotami
    var writeData = [];
    for (var i = 0; i < outputData.length; i++) {
      var row = [];
      for (var j = 0; j < numCols; j++) {
        row.push('');
      }
      writeData.push(row);
    }
    
    // Vložení dat do správných sloupců
    outputData.forEach(function(dataRow, index) {
      writeData[index][1] = dataRow[1];  // sloupec C
      writeData[index][2] = dataRow[2];  // sloupec D
      writeData[index][10] = dataRow[10]; // sloupec L
      writeData[index][13] = dataRow[13]; // sloupec O
    });
    
    // Zápis dat do listu
    outputSheet.getRange(startRow, startCol, numRows, numCols).setValues(writeData);
  }
}

Následně naposledy zkontrolujte, že máte správně data v listu s názvem Data a klikněte na Spustit. Systém se při prvním spuštění zeptá na povolení a případně dodá upozornění na neznámou aplikaci. Toto vše je třeba odsouhlasit. Následně proběhne skript, který vytvoří list s názvem Propojení, který je potřeba upravit podle toho, jaké konkrétní typy propojení chcete použít. List Propojení si ideálně přejmenujte libovolným způsobem pro případ, že byste ve stejném souboru vytvářeli další propojení, abyste předešli ztrátě dat.

Pokud postupujete podle tohoto návodu, přeskočte prosím návod na použití kontingenčních tabulek a přejděte do Úpravy importního souboru (níže).

Kontingenční tabulky

Tento postup je určen především pro klienty, kteří nechtějí využít náš skript nebo nemají přístup k Google Sheets. Přesto ale doporučujeme použít skript, protože výrazně šetří čas.

V tabulkovém editoru (Excel, Google Sheets nebo např. Calc) si vytvoříte tabulku s produkty – jejich kódy, názvem, a všemi parametry, které chcete při propojování používat. Případně pokud chcete propojovat vícero skupin naráz, je dobré si opět doplnit o sloupec s klíčem skupiny. Tento postup je vhodný pouze pokud chcete propojovat typově stejné produkty (neliší se propojujícími parametry, pokud se liší, musíte tvořit znovu další tabulky).
Když máte data připravená, vyberte celou oblast s daty a vložte si do sešitu kontingenční tabulky, ve kterých budete vytvářet řádky pro importní soubor. Kolik parametrů je použito, tolik kontingenčních tabulek je potřeba. Pokud bychom brali příklad zmíněný výše, jednalo by se o 3 tabulky – barvy, paměť a jakost produktu.

Tabulky si nastavíte podle logiky zmíněné u našeho příkladu s telefony (výše).

Příklad tabulky propojení barvami:

  • Řádky (přesně v tomto pořadí):
    • Paměť
    • Jakost
    • Barva
    • Kód produktu
    • Jméno produktu
  • Ostatní nastavení kontingenční tabulky ponechte prázdná
  • U všech položek řádků smažte nastavení Celkem
  • U všech položek řádků nastavte opakovat pro všechny řádky

To samé zopakujte pro ostatní propojení, jen prostřídáte pozice řádků parametrů

  • Propojení Pamětí bude: Barva, Jakost, Paměť, Kód produktu, Jméno produktu,
  • Propojení Jakostí: Paměť, Barva, Jakost, Kód produktu, Jméno produktu

Pokud chcete propojovat více skupin produktů, přidejte do řádků kontingenčních tabulek Klíč a dejte jej na první místo v řádcích.

Pokud potřebujete nastavit konkrétní pořadí jednotlivých variant (např. kvůli řazení velikostí oblečení nebo kvůli klasickému problému s řazením 100 před 10 a 1), je třeba si jednotlivé hodnoty indexovat ve zdrojových datech pro kontingenční tabulky. Hodnotu indexu dáte do kontingenční tabulky před řádek s kódem produktu.

Vedle tabulek si nastavte Interní názvy propojení. Ideální je pro toto funkce CONCATENATE, do které můžete zapsat například

=CONCATENATE(„Můj typ produktu propojení typ „;buňka s názvem, čím propojujeme, stiskněte F4 pro zafixování;buňka s hodnotou parametru kterým nepropojujeme 1;buňka s hodnotou parametru kterým nepropojujeme 2).

Když máte tuto přípravu hotovou, stáhněte si z doplňku Propojení produktů export propojení. Ten vám poslouží jako šablona. Ideálně mějte již vytvořená ukázková pravidla, abyste věděli, jak sloupce u konkrétních typů propojení vyplňovat. Z kontingenční tabulek pak zkopírujte potřebné sloupce, které potřebujete pro daná propojení.

U propojení Barvou z našeho příkladu zkopírujte sloupce, ve kterých jsou: Interní název propojení, kód produktu, Barva (zkopírujeme do sloupce Popis).

Úpravy importního souboru

Teď už je jen nutné upravit a doplnit vzniklý soubor podle toho, jaký typ nebo typy propojení chcete použít. Více informací o správném používání importního souboru naleznete v návodu Importy/Exporty pravidel.
Nejjednodušším řešením pro vyplnění je vytvořit si v administraci ukázková propojení, stáhnout si export pravidel a podle nich vyplnit potřebné sloupce.

U typu propojení Obrázky je třeba si navíc stáhnout export produktů, ve kterém jsou Obrázky, abyste si mohli pomocí funkce VLOOKUP namapovat URL adresy obrázků.

Ideální je si URL adresu upravit na CDN adresu, ale fungovat budou i normální URL adresy obrázků, jen se mohou dále načítat. Obvykle stačí vybrat sloupec pro URL obrázku, stisknout CTRL + H a nahradit „https://“ za „https://cdn-api.myshoptet.com/usr/“ Vždy však zkontrolujte funkčnost odkazů. Případně pro kontrolu správnosti formátu URL obrázku si v administraci doplňku Propojení produktů zkuste vytvořit jedno propojení typem Obrázky, u vybraného produktu do propojení se Vám načte CDN URL adresa prvního obrázku a podle toho poznáte čím, máte nahradit „https://“.

Druhým krokem u úpravy URL adresy je změna velikosti z /orig/ na /category/, tato úprava URL adresy zajistí, že obrázek je správně velký a nebude nevhodně v zobrazení komprimován. Postup je stejný jako u změny začátku URL adresy.

Když máte importní soubor kompletně připravený, uložte list jako csv nebo xlsx a můžete nahrávat do doplňku přes sekci Import/Export. Pokud máte již v doplňku vytvořená propojení, která používáte, silně doporučujeme před importem nových pravidel původní zálohovat, abyste případně mohli celou databázi propojení smazat a přehrát původními daty.

Více informací k exportům a importům najdete v tomto návodu.

Seřazení propojení

Pokud potřebujete nastavit konkrétní pořadí jednotlivých variant (např. kvůli řazení velikostí oblečení nebo kvůli klasickému problému s řazením 100 před 10 a 1), je třeba si jednotlivé hodnoty indexovat v přípravě importního souboru, který použijete pro kontingenční tabulku, ve které si data přehrajete tak, aby byly položky správně seřazeny. Do zdrojového listu, kterým bude vygenerovaný soubor pro import propojení přidáte sloupec Indexu pro seřazení. Do toho sloupce si ideálně funkcí VLOOKUP namapujte hodnoty pro jednotlivé hodnoty, které potřebujete seřadit buď z jiného listu nebo jiné oblasti listu, na kterém pracujete. Do kontingenční tabulky dáte tento sloupec před řádek s kódem produktu.
Struktura takové kontingenční tabulky bude následující:

Řádky:

  • Interní název propojení*
  • Popis hodnot*
  • Viditelné propojení*
  • Vlastní design*
  • Typ propojení*
  • Kód varianty cílového produktu
  • CTA HTML
  • Banner HTML
  • Design zobrazení propojení
  • Index pro seřazení
  • Kód varianty produktu*
  • Zobrazit produkt v propojení
  • Zobrazit propojení u produktu
  • Popis
  • Barva pozadí
  • Barva textu
  • Url obrázku

U všech řádků odstraňte zobrazení součtů a přidejte opakování štítků řádků pro všechny položky v řádcích.

Tato data si zkopírujete a vložte na nový list jako text. Dle případně pokračujte v úpravách, smažte sloupec Index pro seřazení a list uložte jako csv oddělené čárkami a importujte.


V případě potřeby asistence nás neváhejte kontaktovat na shoptet@webotvurci.cz

Pomohl Vám tento článek?
Dislike 0 0 z 0 shledali tento návod přínosný.