Smartweb

Sync Data

Impostazione di un feed dati #

Nota: Questo feed dati di Smartweb/HostedShop è deprecato. Ciò significa che offriamo supporto limitato per questo. Ti consigliamo vivamente di passare al feed dati SOAP API di Smartweb/HostedShop.

  1. Nell’Amministratore SmartWeb, vai su Kontrolpanel->Prisindeks

  2. Crea un nuovo Prisindex facendo clic su Opret Eget Prisindeks nell’angolo in alto a destra.

  3. Dagli il nome Clerk.

  4. Usa il seguente codice per creare il Feed Dati. Questo genererà un link con il feed prodotto, che può essere utilizzato nell’importatore di Annotazioni HTML su my.clerk.io.

Inserisci nel Modello di Inizio Feed #

{* Dimensione immagine *}
{$imageWidth = 293}
{$imageHeight = 293}

{* Dimensione miniatura *}
{$thumbnailWidth = 60}
{$thumbnailHeight = 60}

{* Il prezzo include l'iva - impostato tramite query price_including_vat=true/false - predefinito: true *}
{$priceIncludingVat = true}

{if isset($smarty.get.price_including_vat)}
    {$priceIncludingVat = ($smarty.get.price_including_vat eq "true")}
{/if}

{* Includi prodotti esauriti - impostato tramite query include_out_of_stock=true/false - predefinito: false *}
{$includeOutOfStock = (isset($smarty.get.include_out_of_stock) && $smarty.get.include_out_of_stock eq "true")}

{* Instanzia i controller *}
{controller assign=productController type=product}
{controller assign=brandController type=user}
{controller assign=variantController type=productVariant}
{controller assign=priceController type=productPrice}
{controller assign=cartController type=cart}

{$productPageLink = PageController::link($page.productPageId)}

{* Imposta la variabile data (ora + 1 mese in formato Y-m-d) *}
{assign date {date('Y-m-d', strtotime("+1 months", strtotime("NOW")))}}

{collection controller=productCategory assign=categories}

{$productLink = {page id=$page.productPageId print=Link}}

{function name=renderCategories}
    {foreach $items->getData() as $item}
        {collection controller=productCategory assign=subCategories parentId=$item->Id}

        <span class="clerk-category-info"
            data-id="{$item->Id}"
            data-name="{$item->Title|unescape:"html"|clearText}"
            data-url="/{$productLink}/{$item->Handle}/"
            data-subcategories="[{if $subCategories}{foreach $subCategories->getData() as $category}{$category->Id}{if not $category@last}, {/if}{/foreach}{/if}]">
        </span>

        {call name=renderCategories items=$subCategories}
    {/foreach}
{/function}

{call renderCategories items=$categories}

{* Pagine *}
{controller type=page assign=pagecontroller primary=true}
{collection assign=subPagess controller=page parentId=$page.id  showInMenuCheck=false visibleCheck=false primary=true }

{function name=renderPages}
    {foreach $items->getData() as $Page}
        {collection assign=subPagess2 controller=page parentId=$Page->Id  showInMenuCheck=false visibleCheck=false primary=true }

        {$pageTitle     =     trim($Page->Title)}
        {$link         =     trim($pagecontroller->link($Page->Id))}
        {if $Page->Type == "text" && $Page->Visible == 0 && $Page->ShowInMenu == 0}
        <span class="clerk-pages-info"
            data-id="{$Page->Id}"
            data-type="cms"
            data-url="{$Page->Id}"
            data-title="{$Page->Title|unescape:"html"|clearText}"
            data-text="{$pagecontroller->getText($Page->Id)|unescape:"html"|clearText}">
        </span>
        <br>
        {/if}
        {call name=renderPages items=$subPagess2}
    {/foreach}
{/function}
{call renderPages items=$subPagess}

Inserisci nel Modello di Elemento Feed #

{* Determina se il prodotto è esaurito *}
{$soldout = ($product->Soldout and !$product->AllowOutOfStockPurchase)}

{if !$soldout || $includeOutOfStock}
    {* Carica le varianti del prodotto *}
    {collection assign=variants controller=$variantController productId=$product->Id variantId=$product->VariantIds}
    {assign variants $variants->getData()}

    {if $product->Soldout}
        {assign stockhtml $productController->getDeliveryTime($product->DeliveryTimeId, false)|escape:'htmlall'}
    {else}
        {assign stockhtml $productController->getDeliveryTime($product->DeliveryTimeId, true)|escape:'htmlall'}
    {/if}

    {* Recupera il marchio del prodotto *}
    {entity assign=brand controller=$brandController id=$product->ProducerId}

    {* Recupera i tipi di variante del prodotto *}
    {collection assign=variantTypes controller=$variantTypeController productId=$product->Id}

    {* Recupera l'immagine del prodotto *}
    {*assign productPicture {picturePath productId=$product->Id}*}
    {entity assign=image controller=files type=shop productId=$product->Id}

    {if $image}
        {$crop = "fill"}

        {if !empty($template.settings.DESIGN_IMAGE_BACKGROUND_COLOR)}
            {$crop = $template.settings.DESIGN_IMAGE_BACKGROUND_COLOR}
        {/if}

        {$thumbnailPath = $image->thumbnail($thumbnailWidth, $thumbnailHeight, $crop)}
        {$imagePath = $image->thumbnail($imageWidth, $imageHeight, $crop)}
    {else}
        {placeholdImage assign=placeholder width=$thumbnailWidth height=$thumbnailHeight background=$template.settings.DESIGN_IMAGE_BACKGROUND_COLOR color=$template.settings.FONT_COLOR_PRIMARY text=$text.IMAGE_PLACEHOLDER_TEXT}

        {$thumbnailPath = $placeholder->getRelativeFile()}

        {placeholdImage assign=placeholder width=$imageWidth height=$imageHeight background=$template.settings.DESIGN_IMAGE_BACKGROUND_COLOR color=$template.settings.FONT_COLOR_PRIMARY text=$text.IMAGE_PLACEHOLDER_TEXT}

        {$imagePath = $placeholder->getRelativeFile()}
    {/if}

    {* Recupera la breve descrizione del prodotto *}
    {*{assign productDescription $productController->getDescriptionShort($product->Id)}*}

    {* Se vuota, recupera la descrizione della lista del prodotto *}
   {* {if empty($productDescription)}
        {assign productDescription $productController->getDescriptionList($product->Id)}
    {/if}

    {* Se vuota, recupera la lunga descrizione del prodotto *}
    {*{if empty($productDescription)}
        {assign productDescription $productController->getDescription($product->Id)}
    {/if}*}

    {assign productDescription $productController->getDescription($product->Id)}

    {* Riduci la descrizione a una lunghezza massima di 5000 caratteri *}
    {$productDescription = $productDescription|strip_tags|unescape:"html"|trimTo:5000}
    {* Riduci la descrizione a una lunghezza massima di 200 caratteri *}
    {$productEmailDescription = $productDescription|strip_tags|unescape:"html"|trimTo:200}

    {* Recupera il percorso della categoria del prodotto *}
    {assign categoryPathTitle {categoryTitlePath product=$product separator=" > "}}



    {* Converti l'età del prodotto da secondi a giorni *}
    {$ageInDays = ($product->Age / 60 / 60 / 24)|string_format:"%.1f"}

    <span class="clerk-product-info"

        {* Titolo *}
        data-name="{$product->Title|escape:'html'|clearText}"

        {* Link URI *}
        data-url="{itemLink product=$product}"

         {* Link URL senza dominio*}
        {assign productSurl {itemLink product=$product}}
        data-urls="{$productSurl|replace:'https://www.grejfreak.dk/':'/'}"

        {* ID prodotto *}
        data-id="{$product->Id}"


        {* Descrizione *}
        data-description="{$productDescription|clearText}"

        {* Descrizione *}
        data-shortdescription="{$productEmailDescription|clearText}"

        {* Usa parole chiave SEO per parole chiave aggiuntive ricercabili *}

        {*
        {assign var="keywords" value="$productController->getTranslation($product->Id, 'seo_keywords')|lower|escape:"htmlall"|clearText"}
        {assign var="keyword_list" value=","|explode:$keywords}
        data-keywords2 = "{$keyword_list}"*}

        data-keywords="{$productController->getTranslation($product->Id, 'seo_keywords')|lower|escape:"htmlall"|clearText}"

        {* Immagine *}
        data-image="{$imagePath|solutionPath}"

        {* Miniatura *}
        data-thumbnail="{$thumbnailPath|solutionPath}"

        {* Numero articolo *}
        data-sku="{$product->ItemNumber|toUTF8}"


                {collection assign=productCustomDatas controller=productCustomData productId=$product->Id typeId=14}
        {if $productCustomDatas gt 0}
            {foreach $productCustomDatas->getData() as $productCustomData}
                data-prislabel="{$productCustomData->Title}"
            {/foreach}
        {/if}

        {collection assign=productCustomDatas controller=productCustomData productId=$product->Id typeId=15}
        {if $productCustomDatas gt 0}
            {foreach $productCustomDatas->getData() as $productCustomData}
                data-profitlabel="{$productCustomData->Title}"
            {/foreach}
        {/if}

        {collection assign=productCustomDatas controller=productCustomData productId=$product->Id typeId=12}
        {if $productCustomDatas gt 0}
            {foreach $productCustomDatas->getData() as $productCustomData}
                data-customlabel="{$productCustomData->Title|toUTF8}"
            {/foreach}
        {/if}


        {if !empty($product->Ean)}
            {* Numero Ean *}
            data-ean="{$product->Ean|toUTF8}"
        {/if}

        {* Recupera la linea di prezzo del prodotto *}
        {entity assign=priceLine controller=$priceController productId=$product->Id}

        {* Recupera il testo dello stato di magazzino del prodotto *}
        {$stockStatusText = {stockStatusText product=$product inStockText='in stock' notInStockText='out of stock'}}


    {* controlla se il prodotto è Normale o variante *}
    {if $product->Type == "normal"}
        {if $product->Soldout}
            {$type="normaloutstockstatus"}
           {* {$deliveryText = "&lt;span&gt;&lt;strong&gt;IKKE PÅ LAGER&lt;/strong&gt;&lt;br&gt;Levering 3-14 dage&lt;/span&gt;"}*}
           {$deliveryText = $stockhtml}
        {else}
            {$type="normalinstockstatus"}
            {*$deliveryText = "&lt;span&gt;&lt;strong&gt;PÅ LAGER&lt;/strong&gt;&lt;/span&gt;&nbsp;"*}
            {$deliveryText = $stockhtml}
        {/if}

    {/if}

    {if $product->Type == "variant"}
        {if $product->Soldout}
            {$type="variantoutstockstatus"}
            {*$deliveryText = "&lt;span&gt;&lt;strong&gt;IKKE PÅ LAGER&lt;/strong&gt;&lt;br&gt;Levering 3-14 dage&lt;/span&gt;"*}
            {$deliveryText = $stockhtml}
        {else}
            {$type="variantinstockstatus"}
            {*$deliveryText = "&lt;p&gt;&lt;strong&gt;LAGERSTATUS&lt;/strong&gt;VÆLG VARIANT&lt;/p&gt;"*}
            {$deliveryText = "<p><strong>{$text.VARIATION_STOCK_BOLD_MESSAGE}</strong>{$text.VARIATION_STOCK_NORMAL_MESSAGE}</p>"}
        {/if}
    {/if}

        data-stock-type ="{$type}"
        data-deliveryText ="{$deliveryText}"


        {* Prezzi *}
        {assign price $priceLine->PriceMinWithVat}

        {if !$priceIncludingVat}
            {assign price $priceLine->PriceMinWithoutVat}
        {/if}

        {* Prezzo di vendita *}
        data-price="{$price}"

        {* Prezzo di vendita - Formattato con valuta specifica per la lingua iso *}
        data-pformatted="{$price|formatPrice}"

        {if $priceLine->PriceMin !== $priceLine->PriceMax}
            data-pricefrom="true"
        {/if}


        {$onSale = ($priceLine->PriceMinWithVat < $priceLine->FullPriceMinWithVat)}

        {* Se il prodotto è scontato impostiamo il prezzo normale come prezzo di listino *}
        {if $onSale}
            {assign listPrice $priceLine->FullPriceMinWithVat}

            {if !$priceIncludingVat}
                {assign listPrice $priceLine->FullPriceMinWithoutVat}
            {/if}

            {* Prezzo normale *}
            data-list-price="{$listPrice}"

            {* Prezzo normale - Formattato con valuta specifica per la lingua iso *}
            data-lpformatted="{$listPrice|formatPrice}"

            {*Aggiungi testo con offerta *}
            data-sale-text="offerta"

             {* Aggiungi Percentuale se in offerta *}
            {$priceMin = $priceLine->PriceMin}
            {$priceFull = $priceLine->FullPriceMin}
            {$diffprice = $priceLine-$priceMin}
            {$percentChange = (1 - $priceMin / $priceFull) * 100 }
            {$percentChange = (int)$percentChange}
            data-price-procent="{$percentChange}"
            data-price-procent_int="{$percentChange|formatPrice}"

        {/if}

        data-on-sale="{if $onSale}true{else}false{/if}"
        data-in-stock="{if !$soldout}true{else}false{/if}"

        data-stock-av="{if $product->Soldout}false{else}true{/if}"

        {* Età del prodotto *}
        data-age="{$ageInDays}"

        {* Se il prodotto è più recente di 30 giorni, lo consideriamo nuovo *}
        {if $ageInDays lt 90}
            data-new="true"
        {/if}

        {* Marchio *}
        {if !empty($brand->Title)}
            {$brandLink = "{$productPageLink}?brand={$brand->Id}-{$brand->Title|formatLink}"}

            data-brand="{$brand->Title|escape:"html"|clearText}"
            data-brand-url="{$brandLink}"
            data-brand-id="{$brand->Id}"
        {/if}

        {* Se il prodotto ha varianti *}
        {if $variants}
            {*data-variants-sku="[
                {foreach $variants as $variant}
                    {if !empty($variant->ItemNumber)}
                        '{$variant->ItemNumber}'{if !$variant@last},{/if}
                    {/if}

                {/foreach}
                ]"*}
            {*
            data-variants-name="[
                {foreach $variants as $variant}
                    '{assign variantTitle {variantTitle productId=$product->Id variantId=$variant->Id}}{$variantTitle|escape:"htmlall"|clearText}'{if !$variant@last},{/if}
                {/foreach}
                ]"*}

            data-variants-ean="[
                {foreach $variants as $variant}
                    '{assign variantTitle {variantTitle productId=$product->Id variantId=$variant->Id}}{if !empty($variant->Ean)}{$variant->Ean|escape:"htmlall"}{/if}'{if !$variant@last},{/if}
                {/foreach}
                ]"

        {/if}

        {collection assign=productCustomDatas controller=productCustomData productId=$product->Id typeId=11}
        {if $productCustomDatas gt 0}
            {foreach $productCustomDatas->getData() as $productCustomData}
                data-splash="{$productCustomData->Title}"
            {/foreach}
        {/if}

        {* Array Splash *}
        {if $productCustomDatas gt 0}
        data-splasharray='[
                {foreach $productCustomDatas->getData() as $productCustomData}
                    "{$productCustomData->Title}"{if !$productCustomData@last},{/if}
                {/foreach}
        ]'
        {/if}

        {* Array Splash senza tipo di file *}
        {if $productCustomDatas gt 0}
        data-splasharray-simple='[
                {foreach $productCustomDatas->getData() as $productCustomData}
                    {assign splashSimple {$productCustomData->Title|toUTF8|replace:'.svg':''}}
                    "{$splashSimple}"{if !$productCustomData@last},{/if}
                {/foreach}
        ]'
        {/if}

        {* Categorie *}
        data-categories="[
            {$product->CategoryId}
                {if $product->SecondaryCategoryIds}
                    {foreach $product->SecondaryCategoryIds as $productCategory}
                        , {$productCategory}
                    {/foreach}
                {/if}
            ]">
    </span>
{/if}

Inserisci nel Modello di Fine Feed #

{*Aggiungi paginazione*}
{if !isset($smarty.get.length)}
    {$length = 50}
{else}
    {$length = $smarty.get.length}
{/if}

{if isset($smarty.get.start)}
    {$start = $smarty.get.start + $length}
{else}
    {$start = 0}
{/if}

{* Controlla se i prodotti esauriti devono essere aggiunti*}
{if isset($smarty.get.include_out_of_stock)}
    {$stock = $smarty.get.include_out_of_stock}
{else}
    {$stock = "false"}
{/if}

{* Crea il link successivo per il crawler da seguire *}
{if $product->Id}
<a href="/framework/priceindex/?index=clerk&start={$start}&length={$length}&include_out_of_stock={$stock}"></a>
{/if}

Salva il Prisindex.

Successivamente avrai un link simile a questo, disponibile:

https://www.mysmartwebshop.com/framework/priceindex/index=Clerk&include_out_of_stock=false

Vai su my.clerk.io -> Dati.

Sotto Metodo di sincronizzazione, scegli Annotazioni HTML, e inserisci il tuo link.

Quindi imposta le Richieste Massime/Sec a 1 e scegli la lingua.

Infine, fai clic su Aggiorna Impostazioni e poi Inizia Sincronizzazione.

Inviare dati sugli ordini con un file CSV #

Poiché il Prisindeks di Smartweb purtroppo non consente di includere le vendite da Smartweb, la cronologia degli ordini deve essere esportata come file CSV che può poi essere convertito e caricato su Clerk.io.

Per scaricare questo file CSV, inizia con accedere al tuo backend di Smartweb.

Quindi vai su Esporta:

Nella pagina successiva, scegli Ordini sotto Seleziona Dati e scegli File CSV sotto Seleziona Formato, quindi fai clic su Avanti.

Ora devi scegliere quali dati includere nel file CSV.

Clerk.io ha bisogno dei seguenti dati dagli ordini:

  • ID Ordine (predefinito)

  • Data

  • ID Prodotto

  • Email cliente

  • ID Utente

Tutti questi possono essere controllati nei menu a discesa:

Dopo aver selezionato i campi, utilizza il selettore di intervallo di date Dopo Periodo per includere i dati di vendita fino a quando hai avuto i tuoi primi ordini, e fai clic su Avanti:

Infine, fai clic su Scarica per ricevere il tuo file CSV:

Ecco! Ora hai i tuoi dati di vendita di Smartweb come file CSV.

Ora devi semplicemente contattare il Supporto di Clerk.io, per trovare il modo migliore e più sicuro di caricare il file sul tuo account.

Scegliere i prodotti da importare #

Il feed Smartweb / Hostedshop ti consente di filtrare o includere facilmente i prodotti esauriti, modificando una semplice parte dell’URL del feed.

In my.clerk.io, vai su Sincronizzazione Dati.

Assicurati che l’URL termini con &include_out_of_stock=true

Quindi fai clic su Aggiorna Impostazioni e Inizia Sincronizzazione per caricare tutti i tuoi prodotti su Clerk.io.

Quando importi tutti i prodotti, inclusi quelli esauriti, avrai l’attributo in_stock disponibile per tutti i prodotti, in modo da poter filtrare alcuni elementi di Clerk.io, per non mostrarli.

Questa pagina è stata tradotta da un'utile intelligenza artificiale, quindi potrebbero esserci errori linguistici. Grazie per la comprensione.