Копался в интернете по поводу витрины с возможностью прокрутки товара. Ну как в старой доброй версии VM 1.1.x...
К сожалению поиск выдавал либо коммерческие версии (в большинстве случаев) либо коряво анимированный (нашел только один).
Поломав голову и скрестив пару модулей от старой версии VM1.1.9 (mod_productscroller) и нового... VM2.0.4 - mod_virtuemart_product
получилось сие чудо грандиозной русской смекалки =)))
В общем модуль "крутит" товар рандомный, новый, старый...
Имеет кучу настроек и причем с русским переводом..
Так что прошу если не любить, то не закидывать камнями.. =))))
Собственно админка:Вид на сайте:И сам файл:http://www.forum.virtuemart.ru/download/file.php?id=789Код:mod_productscroller.php<?php
/**
* VirtueMart2 Product Scroller Module
**/
defined('_JEXEC') or die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
global $my, $mosConfig_absolute_path;
require_once (JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
require_once( JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'config.php' );
require_once( JPATH_VM_ADMINISTRATOR.DS.'models'.DS.'product.php' );
if( !class_exists('productScroller')) { // Prevent double class declaration
class productScroller {
/**
* @var $NumberOfProducts
*/
var $NumberOfProducts = 5;
/**
* @var $featuredProducts
*/
var $featuredProducts = false;
/**
* // scroll, alternate, slide
* @var $ScrollBehavior
*/
var $ScrollBehavior = 'scroll';
/**
* @var $PS_DIRECTION
*/
var $ScrollDirection = 'up';
/**
* @var $ScrollHeight
*/
var $ScrollHeight = '125';
/**
* @var $ScrollWidth
*/
var $ScrollWidth = '150';
/**
* @var $ScrollAmount
*/
var $ScrollAmount = '2';
/**
* @var $ScrollDelay
*/
var $ScrollDelay = '80';
/**
* @var $ScrollAlign
*/
var $ScrollAlign = 'center';
/**
* // newest [asc], oldest [desc], random [rand]
* @var $SortMethod
*/
var $ScrollSortMethod = 'random';
/**
* @var $ScrollTitles
*/
var $ScrollTitles = 'yes';
/**
* @var $ScrollSpaceChar
*/
var $ScrollSpaceChar = ' ';
/**
* @var $ScrollSpaceCharTimes
*/
var $ScrollSpaceCharTimes = 5;
/**
* @var $ScrollLineChar
*/
var $ScrollLineChar = '<br />';
/**
* @var $ScrollLineCharTimes
*/
var $ScrollLineCharTimes = 2;
/**
* @var $ScrollSection
*/
var $ScrollSection = 0;
// CSS override -----------------------
/**
* @var $ScrollCSSOverride
*/
var $ScrollCSSOverride = 'no';
/**
* @var $ScrollTextAlign
*/
var $ScrollTextAlign = 'left';
/**
* @var $ScrollTextWeight
*/
var $ScrollTextWeight = 'normal';
/**
* @var $ScrollTextSize
*/
var $ScrollTextSize = '10';
/**
* @var $ScrollTextColor
*/
var $ScrollTextColor = '#000000';
/**
* @var $ScrollBGColor
*/
var $ScrollBGColor = 'transparent';
/**
* @var $ScrollMargin
*/
var $ScrollMargin = '2';
/**
* @var $tdHeight
*/
var $tdHeight = '150px';
/**
* @var $tdWidth
*/
var $tdWidth = '100px';
var $params = null;
/**
* set mammeters
*/
function productScroller (&$params) {
global $my, $mosConfig_offset;
$this->params = $params;
// standard mammeters
$this->show_product_name = $params->get('show_product_name', "yes");
$this->show_addtocart = $params->get('show_addtocart', "yes");
$this->show_price = $params->get('show_price', "yes");
$this->category_id = intval( $params->get('category_id', 0 ) );
// Limit by NoP
$this->NumberOfProducts = $params->get('NumberOfProducts', $this->NumberOfProducts);
$this->featuredProducts = $params->get('featuredProducts', $this->featuredProducts);
$this->ScrollSection = $params->get('ScrollSection', $this->ScrollSection);
$this->ScrollBehavior = $params->get('ScrollBehavior', $this->ScrollBehavior);
$this->ScrollDirection = $params->get('ScrollDirection', $this->ScrollDirection);
$this->ScrollHeight = $params->get('ScrollHeight', $this->ScrollHeight);
$this->ScrollWidth = $params->get('ScrollWidth', $this->ScrollWidth);
$this->ScrollAmount = $params->get('ScrollAmount', $this->ScrollAmount);
$this->ScrollDelay = $params->get('ScrollDelay', $this->ScrollDelay);
$this->ScrollAlign = $params->get('ScrollAlign', $this->ScrollAlign);
$this->ScrollSortMethod = $params->get('ScrollSortMethod', $this->ScrollSortMethod);
$this->ScrollTitles = $params->get('ScrollTitles', $this->ScrollTitles);
$this->ScrollSpaceChar = $params->get('ScrollSpaceChar', $this->ScrollSpaceChar);
$this->ScrollSpaceCharTimes = $params->get('ScrollSpaceCharTimes', $this->ScrollSpaceCharTimes);
$this->ScrollLineChar = $params->get('ScrollLineChar', $this->ScrollLineChar);
$this->ScrollLineCharTimes = $params->get('ScrollLineCharTimes', $this->ScrollLineCharTimes);
// customization mammeters
$this->ScrollCSSOverride = $params->get('ScrollCSSOverride', $this->ScrollCSSOverride);
$this->ScrollTextAlign = $params->get('ScrollTextAlign', $this->ScrollTextAlign);
$this->ScrollTextWeight = $params->get('ScrollTextWeight', $this->ScrollTextWeight);
$this->ScrollTextSize = $params->get('ScrollTextSize', $this->ScrollTextSize);
$this->ScrollTextColor = $params->get('ScrollTextColor', $this->ScrollTextColor);
$this->ScrollBGColor = $params->get('ScrollBGColor', $this->ScrollBGColor);
$this->ScrollMargin = $params->get('ScrollMargin', $this->ScrollMargin);
$this->tdHeight = $params->get('tdHeight', $this->tdHeight);
$this->tdWidth = $params->get('tdWidth', $this->tdWidth);
}
/**
* Display Product Data
*/
function product_snapshot_new( $product_id, $show_product_name = true, $show_price=true, $show_detail=true, $show_addtocart=true, $cart_text2="Купить" ) {
global $sess, $mm_action_url;
$product_manager = new VirtueMartModelProduct;
$pr = $product_manager->getProduct($product_id);
if ($pr) {
$db = JFactory::getDBO();
$q="SELECT * FROM #__virtuemart_medias where virtuemart_media_id = '".$pr->virtuemart_media_id[0]."'";
$db->setQuery( $q );
$image = $db->loadObject();
$html="";
//$cid = $ps_product_category->get_cid( $product_id );
$cid = $pr->virtuemart_category_id;
if ($pr->product_parent_id) {
$url = "?page=shop.product_details&category_id=$cid";
$url .= "&product_id=" . $pr->product_parent_id;
} else {
$url = "?page=shop.product_details&category_id=$cid";
$url .= "&product_id=" . $pr->virtuemart_product_id;
}
$product_link = $pr->link;
if ($show_product_name) {
$html .= '<div>'.'<a href="'. $product_link .'" title="'.$pr->product_name.'"><img src="'.JURI::base(true).'/'.$image->file_url_thumb.'" alt="'.$pr->product_name.'" /><br/>'.$pr->product_name.'</a></div>';
} else {
$html .= '<div>'.'<a href="'. $product_link .'" title=""><img src="'.JURI::base(true).'/'.$image->file_url_thumb.'" alt="'.$pr->product_name.'" /></a></div>';
}
if ($show_price) {
$db->setQuery("SELECT REPLACE(REPLACE(C.currency_positive_style,'{symbol}',C.currency_symbol ),'{number}',cast(P.product_price as decimal(19,2))) As pricetext
FROM
#__virtuemart_product_prices as P
LEFT JOIN
#__virtuemart_currencies as C on C.virtuemart_currency_id = P.product_currency
WHERE P.virtuemart_product_id = '" . $product_id . "' LIMIT 1 ");
$price_object = $db->loadObject();
$price = $pr->prices['salesPrice'];
$price = '<div class="productPrice">'.$price_object->pricetext.'</div>';
}
else $price='';
if ($show_detail) {
$html .= '<div align="center">'.$pr->product_s_desc.'</div>';
}
if ($show_price) {
$html .= '<div style="line-height:36px;" align="center">'.$price.'</div>';
}
if( $show_addtocart == 1){
$html .= '<form action="'.JURI::base().'index.php" method="post" name="addtocart" >
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" class="pname" value="'.$pr->product_name.'">
<input type="hidden" name="view" value="cart">
<input type="hidden" name="task" value="add" />
<input type="hidden" name="virtuemart_product_id[]" value="'. ($product_id).'" />
<input type="hidden" name="quantity[]" value="1" />
<input type="hidden" name="virtuemart_manufacturer_id" value="'.$pr->virtuemart_manufacturer_id.'">
<input type="hidden" name="virtuemart_category_id[]" value="'.join(",",$pr->categories).'">
<input type="submit" name="addtocart" class="addtocart-button addtocart_button_module2" value="'.$cart_text2.'" title="Купить" />
</form>';}
else $html .= '';
return $html;
}
return '';
}
function displayScroller (&$rows) {
$database = JFactory::getDbo();
$productModel = new VirtueMartModelProduct;
$cnt=0;
if($this->ScrollCSSOverride=='yes') {
$txt_size = $this->ScrollTextSize . 'px';
$margin = $this->ScrollMargin . 'px';
//$height=($height-intval($margin+0));
//$width=($width-intval($margin+30));
echo $this->params->get( 'pretext', "");
echo " <div style=\"text-align:".$this->ScrollAlign.";background-color: ".$this->ScrollBGColor."; width:".$this->ScrollWidth."px;
margin-top: $margin; margin-right: $margin; margin-bottom: $margin; margin-left: $margin;\" >
<marquee behavior=\"".$this->ScrollBehavior."\"
direction=\"".$this->ScrollDirection."\"
height=\"".$this->ScrollHeight."\"
width=\"".$this->ScrollWidth."\"
scrollamount=\"".$this->ScrollAmount."\"
scrolldelay=\"".$this->ScrollDelay."\"
truespeed=\"true\" onmouseover=\"this.stop()\" onmouseout=\"this.start()\"
style=\"text-align: ".$this->ScrollTextAlign."; color: ".$this->ScrollTextColor."; font-weight: ".$this->ScrollTextWeight."; font-size: $txt_size;\" >";
}
else {
echo " <div style=\"width:".$this->ScrollWidth."px;text-align:".$this->ScrollAlign.";\">
<marquee behavior=\"".$this->ScrollBehavior."\"
direction=\"".$this->ScrollDirection."\"
height=\"".$this->ScrollHeight."\"
width=\"".$this->ScrollWidth."\"
scrollamount=\"".$this->ScrollAmount."\"
scrolldelay=\"".$this->ScrollDelay."\"
truespeed=\"true\" onmouseover=\"this.stop()\" onmouseout=\"this.start()\">";
}
$show_product_name = ( $this->show_product_name == "yes" )? true : false;
$show_addtocart = ( $this->show_addtocart == "yes" )? true : false;
$show_price = ( $this->show_price == "yes" )? true : false;
if (($this->ScrollDirection=='left') || ($this->ScrollDirection=='right')) {
echo '<table border="0"><tr>';
}
foreach($rows as $row) {
if (($this->ScrollDirection=='left') || ($this->ScrollDirection=='right')) {
echo '<td style="vertical-align:middle;padding: 5px; width:'.$this->tdWidth.'; heigth:'.$this->tdHeight.';">';
}
echo $this->product_snapshot_new($row->virtuemart_product_id); //echo '<li>'.$row->virtuemart_product_id.'</li>';
if (($this->ScrollDirection=='left') || ($this->ScrollDirection=='right')) {
echo '</td>';
} else {
for($i=0;$i<$this->ScrollLineCharTimes;$i++) {
echo $this->ScrollLineChar;
}
}
}
if (($this->ScrollDirection=='left') || ($this->ScrollDirection=='right')) {
echo '</tr></table>';
}
echo " </marquee>
</div>";
} // end displayScroller
} // end class productScroller
/**
* Helper DB function
*/
function getProductSKU( $limit=0, $how=null, $category_id=0, $featuredProducts='no' ) {
$database = JFactory::getDbo();
if($limit>0) {
$limit = "LIMIT $limit";
} else {
$limit = "";
}
if ( $category_id != 0 ) {
$query = "SELECT DISTINCT P.virtuemart_product_id FROM
#__virtuemart_products as P
LEFT JOIN
#__virtuemart_product_categories as PC on PC.virtuemart_product_id = P.virtuemart_product_id
WHERE
P.published = 1
AND PC.virtuemart_category_id = ".$category_id;
if( VmConfig::get('check_stock') && VmConfig::get('show_out_of_stock_products')!= "1") {
$query .= " AND P.product_in_stock > 0 ";
}
if( $featuredProducts=='yes' ) {
$query .= " AND P.product_special = '1' ";
}
}
else {
$query = "SELECT DISTINCT P.virtuemart_product_id FROM
#__virtuemart_products as P
WHERE
P.product_parent_id='' AND P.published = 1";
if( VmConfig::get('check_stock') && VmConfig::get('show_out_of_stock_products')!= "1") {
$query .= " AND P.product_in_stock > 0 ";
}
if( $featuredProducts=='yes' ) {
$query .= " AND P.product_special = '1' ";
}
}
switch( $how ) {
case 'random':
$query .= "\n ORDER BY RAND() $limit";
break;
case 'newest':
$query .= "\n ORDER BY p.cdate DESC $limit";
break;
case 'oldest':
$query .= "\n ORDER BY p.cdate ASC $limit";
break;
default:
$query .= "\n ORDER BY p.cdate DESC $limit";
break;
}
$database->setQuery($query);
$rows = $database->loadObjectList();
return $rows;
}
}
// start of Product Scroller Script
$params = new JParameter( $module->params );
$scroller = new productScroller($params);
/**
* Load Products
**/
$rows = getProductSKU( $scroller->NumberOfProducts, $scroller->ScrollSortMethod, $scroller->category_id, $scroller->featuredProducts );
/**
* Display Product Scroller
**/
$scroller->displayScroller($rows);
?>
И другой нужный:mod_productscroller.xml<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="2.5" client="site" method="upgrade">
<name>VirtueMart Product Scroller</name>
<creationDate>April 2012</creationDate>
<author>Felix Facies</author>
<authorEmail>info|at|entercafe.kz</authorEmail>
<authorUrl>http://www.entercafe.kz</authorUrl>
<copyright>
Copyright (C) 2012 Felix Facies. All rights
reserved.
</copyright>
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
<version>1.1.0</version>
<description>Отображает продукты в прокручивающемся списке</description>
<files>
<filename module="mod_productscroller">mod_productscroller.php</filename>
</files>
<config>
<fields name="params">
<fieldset name="advanced">
<field name="pretext" type="text" default="" label="Предварительный текст"
description="Этот текст будет отображаться чуть выше скроллера." />
<field name="NumberOfProducts" type="text" default="5"
label="Количество продуктов"
description="Количество продуктов, которые будут отображаться в скроллере." />
<field name="featuredProducts" type="radio" default="no"
label="Только рекомендуемые товары"
description='Показать только продукты, которые отмечены как "Рекомендуем"'>
<option value="yes">Да</option>
<option value="no">Нет</option>
</field>
<field name="ScrollSortMethod" type="radio" default="random"
label="В каком порядке показывать продукты?"
description="Определяет порядок отображения продуктов.">
<option value="newest">Новые</option>
<option value="oldest">Старые</option>
<option value="random">Разные</option>
</field>
<field name="show_product_name" type="radio" default="yes"
label="Показывать название продукта?"
description="Определяет, будет ли отображаться название продуктов или нет.">
<option value="yes">Да</option>
<option value="no">Нет</option>
</field>
<field name="show_addtocart" type="radio" default="yes"
label='Показать кнопку "Купить"?'
description="Определяет, будет ли отображаться кнопка приобретения товара или нет.">
<option value="yes">Да</option>
<option value="no">Нет</option>
</field>
<field name="show_price" type="radio" default="yes"
label="Показать цену?"
description="Показать или скрыть цены на продукты.">
<option value="yes">Да</option>
<option value="no">Нет</option>
</field>
<field name="ScrollHeight" type="text" default="125"
label="Высота скроллера" description="Настройка высоты скроллера. По умолчанию значение равно 125рх" />
<field name="ScrollWidth" type="text" default="150"
label="Ширина скроллера" description="Настройка ширины скроллера. По умолчанию значение равно 150рх" />
<field name="ScrollBehavior" type="list" default="scroll"
label="Режим скроллера"
description="Это должно быть оставлено на свиток, если у вас есть хороший повод, чтобы изменить его. Другие варианты есть для полноты картины.">
<option value="scroll">Прокрутка</option>
<option value="slide">Слайд</option>
<option value="alternate">Поочередный</option>
</field>
<field name="ScrollDirection" type="list" default="up"
label="Направление прокрутки"
description="Настройка направления прокрутки">
<option value="up">Вверх</option>
<option value="down">Вниз</option>
<option value="left">Налево</option>
<option value="right">Направо</option>
</field>
<field name="ScrollAmount" type="list" default="scroll"
label="Количество прокруток"
description="Регулирует количество линий скроллер прыжков.">
<option value="1">1 линия</option>
<option value="2">2 линии</option>
<option value="3">3 линии</option>
<option value="4">4 линии</option>
<option value="5">5 линий</option>
</field>
<field name="ScrollDelay" type="text" default="80"
label="Задержка прокрутки"
description="Контроль скорости прокрутки. Чем меньше число, тем быстрее движение прокрутки." />
<field name="ScrollAlign" type="list" default="left"
label="Выравнивание скроллера"
description="Выравнивание контента в таблице скроллера.">
<option value="left">Левый край</option>
<option value="right">Правый край</option>
<option value="center">Центр</option>
<option value="justify">По ширине</option>
</field>
<field name="ScrollSpaceChar" type="text" default="&nbsp;"
label="Пробел скроллера"
description="Использование HTML-пробела при прокрутке влево или вправо. По умолчанию: пробел [&nbsp;]" />
<field name="ScrollSpaceCharTimes" type="list" default="5"
label="Разы пробела скроллера"
description="Количество раз пробелов, чтобы отобразить скроллер.">
<option value="0">Ни одного</option>
<option value="1">1 раз</option>
<option value="2">2 раза</option>
<option value="3">3 раза</option>
<option value="4">4 раза</option>
<option value="5">5 раз</option>
<option value="6">6 раз</option>
<option value="7">7 раз</option>
<option value="8">8 раз</option>
<option value="9">9 раз</option>
<option value="10">10 раз</option>
</field>
<field name="ScrollLineChar" type="list" default="<br />"
label="Символ перевода строки"
description="HTML символ перевода строки, используемые при прокрутке вверх или вниз. По умолчанию: разрыв [BR]">
<option value="<br />">HTML Break</option>
<option value="<hr />">Горизонтальная линия</option>
</field>
<field name="ScrollLineCharTimes" type="list" default="2"
label="Разы символа перевода строки"
description="Количество раз, чтобы отобразить скроллер.">
<option value="0">Ни одного</option>
<option value="1">1 раз</option>
<option value="2">2 раза</option>
<option value="3">3 раза</option>
<option value="4">4 раза</option>
<option value="5">5 раз</option>
<option value="6">6 раз</option>
<option value="7">7 раз</option>
<option value="8">8 раз</option>
<option value="9">9 раз</option>
<option value="10">10 раз</option>
</field>
<field name="ScrollCSSOverride" type="list" default="no"
label="Переопределить CSS"
description="Переопределяет сайты основных умолчанию CSS элементов и позволяет mammemters ниже. Это должен быть установлен да использовать настройки ниже.">
<option value="yes">Да</option>
<option value="no">Нет</option>
</field>
<field name="tdHeight" type="text" default="150px"
label="Высота блока скроллера"
description="Высота блока скроллера (в процентах либо в пикселах), в котором отображается контент. По умолчанию 150px." />
<field name="tdWidth" type="text" default="100px"
label="Ширина блока скроллера"
description="Ширина блока скроллера (в процентах либо в пикселах), в котором отображается контент. По умолчанию 100px." />
<field name="ScrollTextAlign" type="list" default="left"
label="Выравнивание"
description="Выравнивание текста контента">
<option value="left">Слева</option>
<option value="right">Справа</option>
<option value="center">Центр</option>
<option value="justify">По ширине</option>
</field>
<field name="ScrollTextWeight" type="list" default="normal"
label="Стиль текста" description="Настройки стиля текста.">
<option value="normal">Normal</option>
<option value="bold">Bold</option>
<option value="bolder">Bolder</option>
<option value="lighter">Lighter</option>
</field>
<field name="ScrollTextSize" type="list" default="10"
label="Размер текста"
description="Настрока размера текста в пикселах.">
<option value="7">7 px</option>
<option value="8">8 px</option>
<option value="9">9 px</option>
<option value="10">10 px</option>
<option value="11">11 px</option>
<option value="12">12 px</option>
<option value="13">13 px</option>
<option value="14">14 px</option>
<option value="15">15 px</option>
<option value="16">16 px</option>
<option value="17">17 px</option>
<option value="18">18 px</option>
</field>
<field name="ScrollTextColor" type="text" default="#000000"
label="Цвет текста"
description="Устанавливает цвет текста (#[числовой код цвета])" />
<field name="ScrollBGColor" type="text" default="transparent"
label="Цвет заднего фона"
description="Устанавливает цвет заднего фона (#[числовой код цвета])" />
<field name="ScrollMargin" type="list" default="2"
label="Отступ"
description="Настройка отступа контента в пикселах.">
<option value="0">0 px</option>
<option value="1">1 px</option>
<option value="2">2 px</option>
<option value="3">3 px</option>
<option value="4">4 px</option>
<option value="5">5 px</option>
<option value="6">6 px</option>
<option value="7">7 px</option>
<option value="8">8 px</option>
<option value="9">9 px</option>
<option value="10">10 px</option>
<option value="11">11 px</option>
<option value="12">12 px</option>
<option value="13">13 px</option>
<option value="14">14 px</option>
<option value="15">15 px</option>
<option value="20">20 px</option>
<option value="25">25 px</option>
</field>
<field name="cache" type="radio" default="0"
label="Кэшировать"
description="Выберите, следует ли кэшировать содержимое этого модуля">
<option value="0">Нет</option>
<option value="1">Да</option>
</field>
<field name="moduleclass_sfx" type="text" default=""
label="Суффикс класса модуля"
description="Суффикс применяется к классу CSS модуля (table.moduletable), что позволяет переопределить стиль модуля" />
<field name="class_sfx" type="text" default=""
label="Суффикс класса меню"
description="Суффикс применяется к классу CSS пунктов меню." />
</fieldset>
</fields>
</config>
</extension>