CS | EN

Virtuemart 3.0.8: jak zobrazovat dostupnost, i když je zboží skladem

Máte eshop ve Virtuemartu 3, a nevyhovuje Vám výchozí nastavení Virtuemartu, které zobrazuje dostupnost na detailu produktu jen v případě, že zboží není skladem? V tomto článku najdete návod, jak upravit PHP kód tak, aby zobrazoval při skladových zásobách vyšších než 0 text: Dostupnost: skladem a další varianty dostupnosti zboží, které by se Vám mohly hodit.

Za tento návod vděčíme Pavlovi [byPV.org] v tomto vláknu na fóru Virtuemart.cz. Tady je jen pro větší přehlednost s obrázky krok za krokem:

A) Úprava souboru stockhandle.php

Je třeba si upravit soubor stockhandle.php, který najdete v adresáři: components/com_virtuemart/sublayouts. Ten si pak uložte do adresáře šablony, aby se vám nepřepsal při další aktualizaci Virtuemartu.

<?php 
$product 
$viewData['product'];

// Odečítáme objednané produkty od skladového množství.
if ($product->product_in_stock $product->product_ordered 0)
{
$availabilityText 'skladem';
}
else
{
// Pole Availability u produktu
$availabilityText JText::_(trim($product->product_availability));
// Pokud není vyplněno, tak vezmi pole Availability z konfigurace VM
if (empty($availabilityText)) $availabilityText JText::_(trim(VmConfig::get('rised_availability')));
// Pokud není vyplněno, tak vypiš následující hodnotu
if (empty($availabilityText)) $availabilityText 'do 3 dnů';
}

?>

<div class="availability">
Dostupnost: <?php echo $availabilityText?>
</div>

Pokud máte vícejazyčný web, je třeba české texty jako je "skladem", "Dostupnost" nahradit jazykovými konstantami a ty pak přeložit v jazykových ini souborech ve složce language.

B) úprava šablony stránky s detailem produktu

Je potřeba upravit soubor default.php, který najdete v adresáři šablony např. templates/NAZEVSABLONY/html/com_virtuemart/productdetails - to je šablona stránky s detailem produktu.

Na místo, kde chcete zobrazovat dostupnost vložte tento kód:

<?php echo shopFunctionsF::renderVmSubLayout('stockhandle', array('product'=>$this->product)); ?>

Pokud už je tam kód, který dostupnost zobrazuje, např. tento:

<?php
// Availability
$stockhandle VmConfig::get('stockhandle''none');
$product_available_date substr($this->product->product_available_date,0,10);
$current_date date("Y-m-d");
if (($this->product->product_in_stock $this->product->product_ordered) < 1) {
if ($product_available_date != '0000-00-00' and $current_date $product_available_date) {
?>
<div class="availability">
<?php echo vmText::_('COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE') .': 'JHtml::_('date'$this->product->product_available_datevmText::_('DATE_FORMAT_LC4')); ?>
</div>
<?php
} else if ($stockhandle == 'risetime' and VmConfig::get('rised_availability') and empty($this->product->product_availability)) {
?>
<div class="availability">
<?php echo (file_exists(JPATH_BASE DS VmConfig::get('assets_general_path') . 'images/availability/' VmConfig::get('rised_availability'))) ? JHtml::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' VmConfig::get('rised_availability''7d.gif'), VmConfig::get('rised_availability''7d.gif'), array('class' => 'availability')) : vmText::_(VmConfig::get('rised_availability')); ?>
</div>
<?php
} else if (!empty($this->product->product_availability)) {
?>

<div class="availability">
<?php echo (file_exists(JPATH_BASE DS VmConfig::get('assets_general_path') . 'images/availability/' $this->product->product_availability)) ? JHtml::image(JURI::root() . VmConfig::get('assets_general_path') . 'images/availability/' $this->product->product_availability$this->product->product_availability, array('class' => 'availability')) : vmText::_($this->product->product_availability); ?>
</div>
<?php
}
}
else if ($product_available_date != '0000-00-00' and $current_date $product_available_date) {
?>
<div class="availability">
<?php echo vmText::_('COM_VIRTUEMART_PRODUCT_AVAILABLE_DATE') .': 'JHtml::_('date'$this->product->product_available_datevmText::_('DATE_FORMAT_LC4')); ?>
</div>
<?php
}
?>

je třeba jej nahradit výše uvedeným řádkem.

Výsledek nastavení dostupnosti ve Virtuemartu bude takovýto:

1. Zboží je skladem - tj. výše skladových zásob je vyšší než 0 a v poli dostupnost není nic napsané:

100-be dostupnost zboží skladem

Administrace - nastavení produktu                                  Web - z pohledu zákazníka

2. Zboží není skladem a v poli dostupnost máte vyplněný vlastní text (na objednávku, do měsíce, apod.)

zboží není skladem virtuemartzboží na objednávku virtuemart

Administrace - nastavení produktu                              Web - z pohledu zákazníka

Tuto variantu můžete využít i v případě, že nevedete zásoby a chcete, aby se ukazovalo to, co chcete, např. poslední 3 kusy, skladem, na objednávku atd. (tady ale pozor na nastavení toho, co se bude dít, když zboží není skladem - tj. In stock máte 0 nebo prázdné. Aby se vám nepřestalo zobrazovat tlačítko "Vložit do košíku" - o tom více níže.

3. Zboží není skladem a pole dostupnosti je prázdné.

Pak se zobrazí výchozí text, který si sami definuteje v souboru stockhandle.php zde:

vychozi-text

neni skladem prazdna dostupnostnení skladem výchozí text

 

Administrace - nastavení produktu                              Web - z pohledu zákazníka

C) Nastavení chování Virtuemartu, pokud zboží není skladem

Toto nastavení najdete v Komponenty - Virtuemart - Nastavení - záložka Konfigurace (Configuration) - Konfigurace (Configuration) - záložka Frontend obchodu (Shopfront) , sekce Akce, když není výrobek skladem (Action when a product is out of stock):

nastavení virtuemartu

Zde si můžete  nadefinovat, zda se bude tlačítko "Vložit do košíku" schovávat, když zboží nebude skladem a nahrazovat odkazem "Upozornit až bude zboží skladem" - volba: Zobrazuje 'Upozornit' místo tlačítka 'Přidat do košíku'

nebo můžete umožnit objednat i zboží, které není skladem (tak to musíte mít nastavené v případě, že nedržíte skladové zásoby a máte v nastavení produktu nulu nebo nic.) volba: lze objednat, žádná speciální akce

Zboží můžete i úplně schovat (při skladových zásobách), pokud zvolíte volbu: Nezobrazovat zboží. To mi přijde ale ne přílíš ideální pro seo, když máte stránku s produktem zaindexovanou a lidi kliknou na googlu a dostanou se na chybu. Lepší řešení je první varianta. Pokud víte, že ho už nikdy nebudete mít, pak ho stačí smazat z produktů.

Podělte se s ostatními o své zkušenosti...

{fcomment}

0 z 5 - 0 hlasů
Děkujeme za hodnocení. Pokud se vám článek líbil, budeme rádi, když jej budete sdílet dál!

Vytisknout   E-mail

Jsme tým ajťáků, které jejich práce baví a doufáme, že je to vidět. Milujeme redakční systémy Joomla!WordPress a eshop VirtueMart, ale pomůžeme vám i se SEO a texty pro web nebo správou sociálních sítí a PPC kampaní.

Našimi zákazníky jsou drobní živnostníci, malé a střední firmy, školy, ale i stavební firmy s milionovými obraty v České republice i v zahraničí. Baví nás pomáhat lidem plnit jejich sny, ať už jím je vlastní blog nebo prodej výrobků či služeb...


Ochrana soukromí | Mapa stránek

Slovy našich klientů

Flexibilita, rychlost a vstřícnost, to byl můj první dojem při zahájení spolupráce se StaWEBnice.

Oceňuji zejména sqělé a moderní návrhy řešení a jejich bezproblémovou implementaci na našich webech.

V současné době nám spravují 4 weby a jsme maximálně spokojeni.

Zavolejte nám

Napište nám na

Zastavte se za námi

Hojerova 1647/2, Kuřim

Napište nám
můžete ještě napsat 2000 znaků