Отображение аттрибутов продукта в листинге:
Основной файл через который делается листинг продуктов это 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
Удаление сообщения «Ваш браузер не принимает cookies….»
в файле 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
и затем выкидываем всё лишнее
Вы даже не представляете как я вам благодарен за хак с показом цен в листинге, спасибо!
Комментарий by Alexander Chaus — 16 марта 2011 @ 20:33