Блог в котором есть много интересной информации…
Основной файл через который делается листинг продуктов это administrator/components/com_virtuemart/html/shop.browse.php, для того, чтобы передать аттрибуты в шаблон листинга надо добавить вот такую строчку в этот файл:
$products[$i]['product_attribute'] = $db_browse->f('attribute');
$products[$i]['product_name'] = shopMakeHtmlSafe( $product_name );
$products[$i]['product_s_desc'] = $product_s_desc;
$products[$i]['product_details'] = $product_details;
$products[$i]['product_rating'] = $product_rating;
и в файле administrator/components/com_virtuemart/html/shop_browse_queries.php, в котором прописаны соответствующие SQL запросы надо добавить поле `attribute`:
// These are the names of all fields we fetch data from
$fieldnames = "`product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`#__{vm}_category`.`category_id`,
`#__{vm}_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,`product_parent_id`,`product_publish`,`product_in_stock`,`product_sku`, `product_url`,
`product_weight`,`product_weight_uom`,`product_length`,`product_width`,`product_height`,`product_lwh_uom`,`product_in_stock`,`product_available_date`,`product_availability`,`#__{vm}_product`.`mdate`, `#__{vm}_product`.`cdate`,`attribute`";
затем добавляем в файл components/com_virtuemart/themes/имя-шаблона/templates/browse/browse_3.php следующие строки:
<?php
require_once( 'product_parser.php' );
?>
<div class="browse-page-block">
<div class="browse-page-block-inner">
<div class="home-featured-blockImageContainer">
<?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' ) ?>
</div>
<a href="<?php echo $product_flypage ?>" class="browse-product-title"><?php echo $product_name ?></a>
<div class="home-featured-productPrice">
<span class="productPrice">
<?php
if ($product_attribute)
{
//echo $product_attribute;
$attributes = parse_advanced_attribute($product_attribute);
foreach($attributes as $attribute)
{
//echo $attribute['title'];
foreach ( $attribute['options_list'] as $options_item )
{
if( isset( $options_item['display_price']) )
{
echo $options_item['base_var'] . ' =' .$options_item['display_price'].'<br>';
}
else
{
echo "Vika entered a wrond attribute price.";
}
}
}
//show_product_attribute( $attribute );
}
else
{
echo $CURRENCY_DISPLAY->getFullValue($product_price_raw['product_price']);
}
//$db = new ps_DB();
//echo 'id = ' . $product_id;
//echo $product_attribute;
?>
</span>
</div>
<?php echo $product_s_desc ?> <a href="<?php echo $product_flypage ?>"> <?php echo $product_details ?></a>
</div>
</div>
предварительно добавив в каталог components/com_virtuemart/themes/имя-шаблона/templates/browse/ файл product_parser.php для парсинга аттрибутов:
<?php
function parse_advanced_attribute( $advanced_attribute_list )
{
global $CURRENCY_DISPLAY ;
$auth = $_SESSION['auth'] ;
$fields = explode( ";", $advanced_attribute_list ) ;
$attributes = array( ) ;
$i = 0 ;
foreach( $fields as $field ) {
$base = explode( ",", $field ) ;
$title = array_shift( $base ) ;
$titlevar = str_replace( " ", "_", $title ) ;
$attributes[$i]['product_id'] = $prod_index ;
$attributes[$i]['title'] = $title ;
$attributes[$i]['titlevar'] = $titlevar ;
$options_list = array( ) ;
foreach( $base as $base_value ) {
$options_item = array( ) ;
// the Option Text
$attribtxt = substr( $base_value, 0, strrpos( $base_value, '[' ) ) ;
if( $attribtxt != "" ) {
$vorzeichen = substr( $base_value, strrpos( $base_value, '[' ) + 1, 1 ) ; // negative, equal or positive?
if( $_SESSION["auth"]["show_price_including_tax"] == 1 ) {
$price = floatval( substr( $base_value, strrpos( $base_value, '[' ) + 2 ) ) * (1 + @$_SESSION['product_sess'][$product_id]['tax_rate']) ; // calculate Tax
} else {
$price = floatval( substr( $base_value, strrpos( $base_value, '[' ) + 2 ) ) ;
}
// Apply shopper group discount
$price *= 1 - ($auth["shopper_group_discount"] / 100) ;
$price = $GLOBALS['CURRENCY']->convert( $price, $productPrice['product_currency'] ) ;
if( $price == "0" ) {
$attribut_hint = "test" ;
}
$base_var = $base_value;
$base_var = substr( $base_var, 0, strrpos( $base_var, '[' ) ) ;
$options_item['base_var'] = $base_var ;
$options_item['base_value'] = $attribtxt ;
if( $_SESSION['auth']['show_prices'] && _SHOW_PRICES ) {
$options_item['sign'] = $vorzeichen ;
$options_item['display_price'] = $CURRENCY_DISPLAY->getFullValue( $price ) ;
}
} else {
$base_var = str_replace( " ", "_", $base_value ) ;
$options_item['base_var'] = $base_var ;
$options_item['base_value'] = $base_value ;
}
$options_list[] = $options_item ;
}
$attributes[$i]['options_list'] = $options_list ;
$i ++ ;
}
return $attributes;
}
?>
Пример того, как это выглядит: http://beauty-exclusive.ru/…
Чтобы цены в листинге показывались не в виде тултипа, а непосредственно в каждой ячейки таблицы надо поменять содержимое переменной $product_price, которая задаётся в функции ps_product::show_price в файле administrator/components/com_virtuemart/classes/ps_product.php, для этого надо сделать условие всегда ложным:
if( @$_REQUEST['page'] != "shop.product_details" && false) {
$html .= vmToolTip( $prices_table );
}
и в строке 2280 добавить рубли.
$prices_table .= "<tr class=\"sectiontableentry$i\"><td>".$db->f("price_quantity_start")." руб. - ".$db->f("price_quantity_end")." руб.</td>";
в итоге получается вот такая штука: http://beauty-exclusive.ru
в файле administrator/components/com_virtuemart/classes/ps_session.php комментарим одну строчку:
function doCookieCheck() {
global $mm_action_url, $VM_LANG;
$doCheck = vmGet( $_REQUEST, 'vmcchk', 0 );
$isOK = vmGet( $_SESSION, 'VMCHECK' );
if( $doCheck && $isOK != 'OK' ) {
//$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_SESSION_COOKIES_NOT_ACCEPTED_TIP',false) );
}
elseif( empty( $isOK )) {
$_SESSION['VMCHECK'] = 'OK';
$query_string = vmGet($_SERVER,'QUERY_STRING');
if( !empty($query_string) && empty( $_POST )) {
vmRedirect( $this->url( $mm_action_url . 'index.php?' .$query_string .'&vmcchk=1', true, false ));
}
}
}
редактируем
administrator/components/com_virtuemart/html/order.order_list.php
файл
administrator/components/com_virtuemart/html/order.order_printdetails.php
копируем в
administrator/components/com_virtuemart/html/order.order_printlables.php
и затем выкидываем всё лишнее
1 комментарий к записи Кастомизация Joomla VirtueMart
Alexander Chaus
16 марта 2011 в 20:33
Вы даже не представляете как я вам благодарен за хак с показом цен в листинге, спасибо!