Интересно почитать… Блог в котором есть много интересной информации…

8 ноября 2010

Кастомизация Joomla VirtueMart

Категория: программирование — admin @ 4:41

Отображение аттрибутов продукта в листинге:

Основной файл через который делается листинг продуктов это 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

и затем выкидываем всё лишнее

Линии 3D/Шарики 3D

1 комментарий »

  1. Вы даже не представляете как я вам благодарен за хак с показом цен в листинге, спасибо!

    Комментарий by Alexander Chaus — 16 марта 2011 @ 20:33

RSS feed for comments on this post. TrackBack URL

Leave a comment

SlogPost.ru