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_date, vmText::_('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_date, vmText::_('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é:
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.)
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:
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):
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}
Mohlo by vás také zajímat...
Děkujeme za hodnocení. Pokud se vám článek líbil, budeme rádi, když jej budete sdílet dál!