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

Petra Procházková
Autor: Petra Procházková


Datum: 30 duben 2015

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}

Mohlo by vás také zajímat...

Chcete se na něco zeptat?
1000 znaků zbývá
facebook StaWEBnice twitter StaWEBnice YouTube StaWEBnice Google+ StaWEBnice