Если еще актуально:
В админке VirtueMart предусмотрен вывод featured products(Специальное предложение) и latest products(новые товары) на главной странице(shop.index). Но отображаются только featured products.
Файла latestProducts.tpl.php отвечающего за вывод новых товаров нет. В файле administrator\components\com_virtuemart\classes\ps _product.php функция вывода latest products имеет вид:
function latestProducts($random, $products, $categories) {
return "";
}
Не понятно почему, но разработчики VirtueMart либо забыли прописать данную функцию, либо забыли. Далее будем исправлять это недоразумение.
В файле administrator\components\com_virtuemart\classes\ps _product.php заменяем функцию latestProducts:
function latestProducts($random, $products, $categories) {
//return "";
global $VM_LANG;
require_once( CLASSPATH . 'ps_product_attribute.php');
$ps_product_attribute = new ps_product_attribute();
$db = new ps_DB;
$tpl = new $GLOBALS['VM_THEMECLASS']();
$category_id = null;
if($categories) {
$category_id = vmRequest::getInt('category_id');
}
if ( $category_id ) {
$q = "SELECT DISTINCT product_sku,#__{vm}_product.product_id,product_name,product_s_desc,product_thumb_image, product_full_image, product_in_stock, product_url FROM #__{vm}_product, #__{vm}_product_category_xref, #__{vm}_category WHERE \n";
$q .= "(#__{vm}_product.product_parent_id='' OR #__{vm}_product.product_parent_id='0') \n";
$q .= "AND #__{vm}_product.product_id=#__{vm}_product_category_xref.product_id \n";
$q .= "AND #__{vm}_category.category_id=#__{vm}_product_category_xref.category_id \n";
$q .= "AND #__{vm}_category.category_id='$category_id' \n";
$q .= "AND #__{vm}_product.product_publish='Y' \n";
if( CHECK_STOCK && PSHOP_SHOW_OUT_OF_STOCK_PRODUCTS != "1") {
$q .= " AND product_in_stock > 0 \n";
}
$q .= 'ORDER BY #__{vm}_product.product_id DESC LIMIT 0, '.(int)$products;
}
else {
$q = "SELECT DISTINCT product_sku,product_id,product_name,product_s_desc,product_thumb_image, product_full_image, product_in_stock, product_url FROM #__{vm}_product WHERE ";
$q .= "(#__{vm}_product.product_parent_id='' OR #__{vm}_product.product_parent_id='0') AND vendor_id='".$_SESSION['ps_vendor_id']."' ";
$q .= "AND #__{vm}_product.product_publish='Y' ";
if( CHECK_STOCK && PSHOP_SHOW_OUT_OF_STOCK_PRODUCTS != "1") {
$q .= " AND product_in_stock > 0 ";
}
$q .= 'ORDER BY #__{vm}_product.product_id DESC LIMIT 0, '.(int)$products;
}
$db->query($q);
// Output using template
if( $db->num_rows() > 0 ) {
$i = 0;
$latest_products = array();
while($db->next_record()) {
//$flypage = $this->get_flypage($db->f("product_id"));
$latest_products[$i]['product_sku'] = $db->f("product_sku");
$latest_products[$i]['product_name'] = $db->f("product_name");
$price = "";
if (_SHOW_PRICES == '1') {
// Show price, but without "including X% tax"
$price = $this->show_price( $db->f("product_id"), false );
}
$latest_products[$i]['product_price'] = $price;
$latest_products[$i]['product_s_desc'] = $db->f("product_s_desc");
$latest_products[$i]['product_url'] = $db->f("product_url");
$latest_products[$i]['product_thumb'] = $db->f("product_thumb_image");
$latest_products[$i]['product_full_image'] = $db->f("product_full_image");
$latest_products[$i]['product_id'] = $db->f("product_id");
$latest_products[$i]['flypage'] = $flypage;
$latest_products[$i]['form_addtocart'] = "";
if (USE_AS_CATALOGUE != '1' && $price != ""
&& !stristr( $price, $VM_LANG->_('PHPSHOP_PRODUCT_CALL') )
&& !$this->product_has_attributes( $db->f('product_id'), true )
&& $tpl->get_cfg( 'showAddtocartButtonOnProductList' ) ) {
$tpl->set( 'i', $i );
$tpl->set( 'product_id', $db->f('product_id') );
$tpl->set( 'ps_product_attribute', $ps_product_attribute );
$tpl->set( 'product_in_stock', $db->f('product_in_stock'));
$latest_products[$i]['form_addtocart'] = $tpl->fetch( 'browse/includes/addtocart_form.tpl.php' );
$latest_products[$i]['has_addtocart'] = true;
}
$i++;
}
$tpl->set( 'latest_products', $latest_products );
return $tpl->fetch( 'common/latestProducts.tpl.php');
}
}
Далее в папке components\com_virtuemart\theme\default\templates\common\ создаем файл latestProducts.tpl.php в нем прописываем код:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
$iCol = 1;
//Number of latest products to show per row
$latest_per_row = 2;
//Set the cell width
$cellwidth = intval( (100 / $latest_per_row) - 6 );
if( empty( $latest_products )) {
return; // Do nothing, if there are no latest products!
}
echo "<h3 style=\"margin-top:-10px\">".$VM_LANG->_('VM_LATEST_PRODUCT')."</h3>";
foreach( $latest_products as $latest ) {
?>
<div class="browseProductContainer latestProducts" style="float:left;width:<?php echo $cellwidth ?>%;text-align:top;padding:0px; border:1px solid #dedede; margin:5px; padding:0 4px; height:230px;" >
<?php
if ( $latest["product_thumb"] ) { ?>
<div class="browseProductImageContainer image_a_gauche">
<a title="<?php echo $latest["product_name"] ?>" href="<?php $sess->purl(URL."index.php?option=com_virtuemart&page=shop.product_details&flypage=".$latest["flypage"]."&product_id=".$latest["product_id"])?>">
<?php echo ps_product::image_tag( $latest["product_thumb"], " class='browseProductImage' border=\"0\" alt=\"".$latest["product_name"]."\"");
?></a></div>
<?php
}?>
<h3 class="browseProductTitle"><a title="<?php echo $latest["product_name"] ?>" href="<?php $sess->purl(URL."index.php?option=com_virtuemart&page=shop.product_details&flypage=".$latest["flypage"]."&product_id=".$latest["product_id"])?>">
<?php echo $latest["product_name"] ?></a></h3>
<div class="browseProductDescription"><?php echo $latest['product_s_desc'] ?><br /></div>
<div class"homeAddToCart" style="text-align:right; padding:5px 10px;"><div style="float:left"><?php echo $latest['product_price'] ?></div><?php echo ereg_replace('<input type="submit"','<br><input type="submit"',$latest['form_addtocart']);?></div>
</div>
<?php
// Do we need to close the current row now?
if ($iCol == $latest_per_row) { // If the number of products per row has been reached
echo "<br style=\"clear:both;\" />\n";
$iCol = 1;
}
else {
$iCol++;
}
}
?>
<br style="clear:both;" />
Далее в в файле components\com_virtuemart\theme\defa ult\templates\common\shopIndex.tpl.php делаем замену кода:
ps_product::latestProducts(true,4,false,false);
на код:
echo $ps_product->latestProducts(true,4,false,false);
Это все!
(Источник:
http://slaffko.name/virtuemart/86-latest-products-on-frontpage.html)