Právě je 18 lis 2017 07:06

Všechny časy jsou v UTC + 1 hodina




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 
Autor Zpráva
 Předmět příspěvku: PrestaShop - Aktualizace pole dostupnosti v košíku
PříspěvekNapsal: 26 čer 2017 12:13 
C4 zákazník

Registrován:
09 bře 2017 13:15
Příspěvky:
16
Dobrý den,


v eshopu mám standardně povoleny objednávky. V prvním kroku objednávky je v poli dostupnost (v případě, že je zboží skladem) vypsáno "Skladem". Řekněmě, že jsou skladem dvě položky. V případě, že v poli množství uvedu množství 3 kusy (tedy o jeden kus více, než je skladem), nedojde k přepsání pole dostupnosti ze "Skladem" na "Není skladem".

Rád bych se zeptal, zdali již někdo podobný problém řešil, resp. jak na to?


S pozdravem

dpkk.cz


Přílohy:
dostupnost.png
dostupnost.png [ 113.86 KiB | Zobrazeno 511 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: PrestaShop - Aktualizace pole dostupnosti v košíku
PříspěvekNapsal: 28 čer 2017 10:04 
C4 podpora
C4 podpora

Registrován:
30 čer 2009 08:14
Příspěvky:
6262
Dobrý den,

bohužel se jedná o standardní chování aplikace PrestaShop, takže jedinou možností by byla úprava zdrojového kódu na míru. Pokud máte o úpravu zájem, můžete se zkusit obrátit na některého z našich partnerů (příp. vpravo blok PrestaShop partneři), který se aplikaci věnuje.

_________________
Radek Plašil
Webhosting C4
https://www.c4.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PrestaShop - Aktualizace pole dostupnosti v košíku
PříspěvekNapsal: 06 črc 2017 14:08 
C4 zákazník
Uživatelský avatar

Registrován:
15 srp 2016 12:22
Příspěvky:
42
Bydliště:
Albrechtice
Dobrý den. Přikládám vám návrh na řešení. Před, ale vás musím upozornit na pár věcí.
1) Odzkoušeno na verzi 1.6.1.11
2) Pokud si netroufáte na úpravu zdrojových kódů držte se přešlé rady.
3) Předem si zálohujte veškeré soubory které budete upravovat

A teď samotný návod.

Krok 1.

Otevřete si (v PSpad editoru) soubor themes/vase-sablona/shopping-cart-product-line.tpl

Naleznětě řádky:

Kód:
   {if $PS_STOCK_MANAGEMENT}
      <td class="cart_avail"><span class="label{if $product.quantity_available <= 0 && isset($product.allow_oosp) && !$product.allow_oosp} label-danger{elseif $product.quantity_available <= 0} label-warning{else} label-success{/if}">{if $product.quantity_available <= 0}{if isset($product.allow_oosp) && $product.allow_oosp}{if isset($product.available_later) && $product.available_later}{$product.available_later}{else}{l s='In Stock'}{/if}{else}{l s='Out of stock'}{/if}{else}{if isset($product.available_now) && $product.available_now}{$product.available_now}{else}{l s='In Stock'}{/if}{/if}</span>{if !$product.is_virtual}{hook h="displayProductDeliveryTime" product=$product}{/if}</td>
   {/if}


a nahraďte jej těmito řádky:

Kód:
   {if $PS_STOCK_MANAGEMENT}
      <td class="cart_avail"> {if $product.quantity_available < $product.cart_quantity && $product.quantity_available >= 0}<span class="backorderedown">{l s='%d backordered' sprintf=$product.cart_quantity - $product.quantity_available}</span>{else}  {if $product.quantity_available <= 0}<span class="notavailableown">{if $product.allow_oosp}{if isset($product.available_later) && $product.available_later}{$product.available_later}</span>{else}<span class="availableown">{l s='In Stock'}</span>{/if}{else}<span class="backorderedown">{l s='Backordered'}</span>{/if}{else}<span class="availableown">{if isset($product.available_now) && $product.available_now}{$product.available_now}</span>{else}<span class="availableown">{l s='In Stock'}</span>{/if}{/if}{hook h="displayProductDeliveryTime" product=$product} </td> {/if}
   {/if}


Krok 2:

Otevřte si soubor (v PSpad editoru) themes/vase-sablona/js/cart-summary.js
Nalezněte funkci
Kód:
function upQuantity(id, qty)

a ZA!!!!! tuto funkci přidejte následující funkci

Kód:
function updateCartAvailability(json)
{
   var i;
   var product_list = new Array();

   if (typeof json == 'undefined')
      return;
      
   $('div.error').fadeOut();      

   for (i=0;i<json.products.length;i++)
      product_list[json.products[i].id_product + '_' + json.products[i].id_product_attribute + '_' + json.products[i].id_address_delivery] = json.products[i];
      
   for (i in product_list)
   {
      var key_for_blockcart_nocustom = product_list[i].id_product + '_' + product_list[i].id_product_attribute + '_' + ((product_list[i].quantity_without_customization != product_list[i].quantity)? 'nocustom' : '0') + '_' + product_list[i].id_address_delivery;
      
      if (product_list[i].quantity_available - product_list[i].cart_quantity >= 0) {
            $('#product_' + key_for_blockcart_nocustom + ' .cart_ref').html('<span class="availableown">{l s='In Stock'}</span>');
         } else if (product_list[i].quantity_available - product_list[i].cart_quantity < 0 && product_list[i].allow_oosp) {
            $('#product_' + key_for_blockcart_nocustom + ' .cart_ref').html('<span class="backorderedown">{l s='%d backordered' sprintf=$product.cart_quantity - $product.quantity_available}</span>');
         } else if (product_list[i].quantity_available - product_list[i].cart_quantity < 0 && !product_list[i].allow_oosp) {
            $('#product_' + key_for_blockcart_nocustom + ' .cart_ref').html('<span class="availableown">{l s='Out of stock'}</span>');
         }
   }

}


Krok 3: Oba soubory uložte na FTP kam patří.
Krok 4: V nástroje / výkon - proveďte vynoucenou kompilaci bez cache paměti ulož te a vrať zpět.
Krok 5: V nástroje / výkon - Vyčistit mezipaměť
Krok 6: Vyzkoušet a HOTOVO

V případě nejasností se na nás obraťte na mail: info@profi-prestashop.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PrestaShop - Aktualizace pole dostupnosti v košíku
PříspěvekNapsal: 10 črc 2017 20:35 
C4 zákazník

Registrován:
09 bře 2017 13:15
Příspěvky:
16
Dobrý den,


aplikoval jsem Vaše řešení a i přes drobný problém (na stránce nefunguje javascript) máte ode mne opravdu velký palec nahoru za kus dobře odvedené práce. :)


Ještě jednou díky a mějte se

dpkk.cz


Nahoru
 Profil  
 
 Předmět příspěvku: Re: PrestaShop - Aktualizace pole dostupnosti v košíku
PříspěvekNapsal: 21 črc 2017 16:41 
C4 zákazník
Uživatelský avatar

Registrován:
15 srp 2016 12:22
Příspěvky:
42
Bydliště:
Albrechtice
Zdravím.

Jelikož mé předchozí řešení má problém s některými moduly přináším opravené řešení přes ajax.

1) V souboru themes/vase_sablona/shoping-cart-product-line.tpl
najděte řádky:
Kód:
   {if $PS_STOCK_MANAGEMENT}
      <td class="cart_avail"><span class="label{if $product.quantity_available <= 0 && isset($product.allow_oosp) && !$product.allow_oosp} label-danger{elseif $product.quantity_available <= 0} label-warning{else} label-success{/if}">{if $product.quantity_available <= 0}{if isset($product.allow_oosp) && $product.allow_oosp}{if isset($product.available_later) && $product.available_later}{$product.available_later}{else}{l s='In Stock'}{/if}{else}{l s='Out of stock'}{/if}{else}{if isset($product.available_now) && $product.available_now}{$product.available_now}{else}{l s='In Stock'}{/if}{/if}</span>{if !$product.is_virtual}{hook h="displayProductDeliveryTime" product=$product}{/if}</td>
   {/if}


a nahraďte jej řádky:
Kód:
{if $PS_STOCK_MANAGEMENT}
    <td class="pp_cart_stock">
        {if $product.quantity_available-$product.cart_quantity >= 0}
            <img src="{$img_dir}skladem.png" alt="{l s='Available'}" title="{l s='Available'}">
        {else if $product.quantity_available-$product.cart_quantity < 0 && $product.allow_oosp}
            <img src="{$img_dir}naskladneni.png" alt="{l s='On Backorder'}" title="{l s='On Backorder'}">
        {else if $product.quantity_available-$product.cart_quantity < 0 && !$product.allow_oosp}
            <img src="{$img_dir}neni_skladem.png" alt="{l s='Out Of Stock'}" title="{l s='Out Of Stock'}">       
        <script type="text/javascript">
            // <![CDATA[
            var prod_name = "{$product.name}";
            {if isset($product.attributes) && $product.attributes}
                prod_name += ' - ' + "{$product.attributes|escape:'htmlall':'UTF-8'}"
            {/if}

            unavailable_products.push(prod_name);

            // ]]>
        </script>
        {/if}
    </td>  {/if}

2) v souboru themes/vase-sablona/js/cart-summary.js nalezněte funkci function downQuantity(id, qty)
ZA tuto funkci tedy za poslední závoru } funkce vložte následující dvě funkce:
Kód:
function checkAvailability()
{
    $.ajax({
        type: 'POST',
        headers: { "cache-control": "no-cache" },
        url: baseUri + '?rand=' + new Date().getTime(),
        async: true,
        cache: false,
        dataType: 'json',
        data: 'controller=cart'
            + '&ajax=true'
            + '&getproductprice=true'
            + '&summary=true'
            + '&token=' + static_token
            + '&allow_refresh=1',
        success: function(jsonData)
        {
            if (jsonData.hasError)
            {
                var errors = '';
                for(var error in jsonData.errors)
                    //IE6 bug fix
                    if(error !== 'indexOf')
                        errors += $('<div />').html(jsonData.errors[error]).text() + "\n";
                alert(errors);
            }
            else
            {
                updateCartAvailability(jsonData.summary);       
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            if (textStatus !== 'abort') {
                //alert("TECHNICAL ERROR: unable to verify quantity \n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus);
                }
        }
    });
    setTimeout ('checkAvailability()', 500);
}

a
Kód:
function updateCartAvailability(json)
{
    var i;
    var product_list = new Array();

    if (typeof json == 'undefined')
        return;
       
    $('div.error').fadeOut();       

    for (i=0;i<json.products.length;i++)
        product_list[json.products[i].id_product + '_' + json.products[i].id_product_attribute + '_' + json.products[i].id_address_delivery] = json.products[i];
       
    for (i in product_list)
    {
        var key_for_blockcart_nocustom = product_list[i].id_product + '_' + product_list[i].id_product_attribute + '_' + ((product_list[i].quantity_without_customization != product_list[i].quantity)? 'nocustom' : '0') + '_' + product_list[i].id_address_delivery;
       
        if (product_list[i].quantity_available - product_list[i].cart_quantity >= 0) {
                $('#product_' + key_for_blockcart_nocustom + ' .pp_cart_stock').html('<img src="'+ img_dir + 'skladem.png" alt="{l s=\'Available\'}" title="{l s=\'Available\'}">');
            } else if (product_list[i].quantity_available - product_list[i].cart_quantity < 0 && product_list[i].allow_oosp) {
                $('#product_' + key_for_blockcart_nocustom + ' .pp_cart_stock').html('<img src="' + img_dir + 'naskladneni.png" alt="{l s=\'On Backorder\'}" title="{l s=\'On Backorder\'}">');
            } else if (product_list[i].quantity_available - product_list[i].cart_quantity < 0 && !product_list[i].allow_oosp) {
                $('#product_' + key_for_blockcart_nocustom + ' .pp_cart_stock').html('<img src="' + img_dir + 'neni_skladem.png" alt="{l s=\'Out Of Stock\'}" title="{l s=\'Out Of Stock\'}">');
            }
    }

}


3) themes/vase_sablona/js/cart-summary.js nalezněte:
Kód:
checkAvailability();

a přídejte přesně za funkci toto:
Kód:
cleanSelectAddressDelivery();


4)nahrajte na ftp do složky theme/vase-sablona/img tři obrázky, které budete chtít. Tyto "tlačítka" si samozřejmě můžete graficky nakreslit jak se vám osobně budou líbit. Pokud chce mohu vám tlačítka nakreslit.

tlačítka se musí jmenovat:
"skladem.png" - Pro zobrazení zboží, které je skladem
"naskladneni.png" - Pro zobrazení zboží, které naskladníte třeba do týdne
"neni_skladem.png" - Pro zboží, které skladem není a dlouho nebude :D

Nezapomeňte obrázky nahrát v adekvátní velikosti ať nemusíte upravovat velikost ve stylech a tím spomalovat jejich načítání.

Samozřejmě si všechny soubory předem zálohujte.

Pokud si netroufáte na úpravy zdrojových kódů kontaktujte nás na adrese: info@profi-prestashop.cz

S přáním hezkého dne Majkis


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 5 ] 

Všechny časy jsou v UTC + 1 hodina


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
FTP Uploader
Staňte se naším zákazníkem!
Hledáme kolegy
PrestaShop partneři
PrestaShop Hosting
Návody pro C4

© 2009-2012 ČESKÝ WEBHOSTING s.r.o. Kontaktní e-mail: forum@c4.cz
Diskuzní fórum využívá technologie: phpBB, phpBB-SEO.com, phpBB.cz