Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 25 Ответов
  • 3976 Просмотров
*

TrOn

  • Захожу иногда
  • 91
  • 0 / 0
Отметка NEW
« : 10.12.2009, 08:23:23 »
Как сделать так чтоб у новых товаров в категории была какая либо отметка об этом? например надпись NEW возле названия товара?
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #1 : 16.12.2009, 01:41:56 »
Имхо самый простой способ.
Например в шаблоне описания товара flypage вставить вместо echo $product_name
следующий код

Код
<?php
$db =& new ps_DB;
$q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
$db->query($q);
$max=$db->f("product_id");
if ($product_id>$max-10) {
echo $product_name.'<span style="color:red;"> NEW</span>';
}
else {
echo $product_name;
};
?>

Здесь будут выводиться последние 10 добавленных товаров с такой меткой. Без всяких условий на наличие на складе и т. п.

Но лучше вставить  код в shop.product_details.php инициализировать там новую переменную и ее уже выводить
*

xxx87

  • Захожу иногда
  • 130
  • 4 / 0
  • прошу любить и жаловать
Re: Отметка NEW
« Ответ #2 : 09.05.2010, 19:25:12 »
Спасибо. Но как сделать тоже самое но в browsepage ? что бы сразу пометочка выскакивала.. а не только в описании товара. Спасибо :))))
« Последнее редактирование: 21.05.2010, 20:35:18 от xxx87 »
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #3 : 19.05.2010, 16:20:43 »
Да простой решение для flypage, но как же это реализовать все таки для browsepage?    ;)
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #4 : 19.05.2010, 21:26:56 »
В директории щаблона для виртуемарта ищете файл вывода товаров в категории (в зависимости как настроено в админке - свойство Product List Style).
У меня например это свойство Flat product list.

Правите  файл browse_listtable.tpl.php (в моем случае) В зависимости от выбранного отображения списка товаров могут быть другие файлы: browse_layouttable.tpl.php, browse_notables.tpl.php

Третьей строкой в него, после
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__); ?>

вставляете
Код
<?php 
$db =& new ps_DB;
$q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
$db->query($q);
$max=$db->f("product_id");
?>

Потом находите далее по тексту где задается вывод наименования товара, должно быть что то типа:
Код
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
В вашем шаблоне может быть по разному и меняете его на такую конструкцию:
Код
			if ($product['product_id']>$max-10) {
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>'.'<span style="color:red;"> NEW</span>';
}
else {
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
};



Это для стандартного шаблона привел. Главное найти в тексте где $product['product_name'] используется и использовать вместо стандартной обработки
такую конструкцию :
Код
		if ($product['product_id']>$max-10) {
Стандартная обработка.'<span style="color:red;"> NEW</span>';
}
else {
Стандартная обработка;
};



*

xxx87

  • Захожу иногда
  • 130
  • 4 / 0
  • прошу любить и жаловать
Re: Отметка NEW
« Ответ #5 : 20.05.2010, 22:04:48 »
У меня не работает. Вроде сдалала как Вы написали.
« Последнее редактирование: 21.05.2010, 21:15:11 от xxx87 »
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #6 : 20.05.2010, 22:34:05 »
Присоединяюсь к "xxx87". Проделал все описанное Вами, но безрезультатно - не отображается заветная надпись NEW в списке товаров, в самом товаре отображается но в списке нет.
Что не так делаем "yadrinez"?
Специально изменил свойство Product List Style как у Вас на Flat product list и правил browse_listtable.tpl.php - не работало.  :(
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #7 : 20.05.2010, 23:00:11 »
У меня работает. Вот мой файл
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__); ?>

<?php echo $buttons_header // The PDF, Email and Print buttons ?>
<?php echo $browsepage_header // The heading, the category description ?>
<?php echo $parameter_form // The Parameter search form ?>
<?php echo $orderby_form // The sort-by, order-by form PLUS top page navigation ?>
<?php
   $db =& new ps_DB;
   $q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
   $db->query($q);
   $max=$db->f("product_id");
?>
<?php
$data =array(); // Holds the rows of products
$i = 1; $row = 0; // Counters

// Table header
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_NAME');
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_SKU');
if( _SHOW_PRICES && $auth['show_prices'] ) {
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_PRICE');
}
$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_FORM_THUMB_IMAGE');
$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_DESC_TITLE');
if( _SHOW_PRICES && $auth['show_prices'] && USE_AS_CATALOGUE != '1' ) {
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_ACTION');
}

// Creates a new HTML_Table object that will help us
// to build a table holding all the products
$table = new HTML_Table('width="100%"');

$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );

foreach( $products as $product ) {

foreach( $product as $attr => $val ) {
// Using this we make all the variables available in the template
// translated example: $this->set( 'product_name', $product_name );
$this->set( $attr, $val );
}
  if ($product['product_id']>$max-1000) {
               $data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>'.'<span style="color:red;"> NEW</span>';
            }
            else {
               $data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
            };
//$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
$data[$row][] = $product['product_sku'];
if( _SHOW_PRICES && $auth['show_prices'] ) {
$data[$row][] = $product['product_price'];
}
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'
. ps_product::image_tag( $product['product_thumb_image'] )
. '</a>';
$data[$row][] = $product['product_s_desc'];
if( $product['has_addtocart'] ) {
$data[$row][] = $product['form_addtocart'];
}
else {
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'
. $product['product_details']
. '</a>';
}

$row++;

}


// Loop through each row and build the table
foreach($data as $key => $value) {

$table->addRow( $data[$key], 'class="sectiontableentry'.$i.'"', 'td', true );
$i = $i == 1 ? 2 : 1;
}
// Display the table
echo $table->toHtml();
?>
<br class="clr" /><br />
<?php echo $browsepage_footer ?>
<?php
// Show Featured Products
if( $this->get_cfg( 'showFeatured', 1 )) {
    /* featuredproducts(random, no_of_products,category_based) no_of_products 0 = all else numeric amount
    edit featuredproduct.tpl.php to edit layout */
    echo $ps_product->featuredProducts(true,10,true);
} ?>
<?php echo $recent_products ?>

*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #8 : 20.05.2010, 23:06:04 »
Вот скрин. Попробуйте исправить с 10 последних товаров на 1000 как у меня для проверки.
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #9 : 20.05.2010, 23:09:11 »
xxx87, у меня ваш листинг работает.
Скорее всего категория которую вы смотрите, там нет последних добавленных товаров.
Измените 10 на 1000 для проверки (в коде -    if ($product['product_id']>$max-10) { )

В другом варианте вы правите не тот файл. Или не вашего шаблона, или  вариант вывода у вас другой.
« Последнее редактирование: 20.05.2010, 23:18:58 от yadrinez »
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #10 : 20.05.2010, 23:29:37 »
Вот скрин. Попробуйте исправить с 10 последних товаров на 1000 как у меня для проверки.

Это тоже не помогло.
Возможно что-то в самих настройках у нас отличается?
VirtueMart 1.1.4 stable


Это то что у меня стоит. Для чистоты эксперимента скажи что именно у тебя.
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #11 : 20.05.2010, 23:36:39 »
Да отличается. не то выбрано у вас.
у меня так

*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #12 : 20.05.2010, 23:38:03 »
А шаблон категории выбрано: managed

в вашем случае еще надо browse_3.php редактировать
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #13 : 21.05.2010, 12:51:12 »
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #14 : 21.05.2010, 19:47:27 »
В файле browse3 замени на это
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__);
 ?>
 <?php
$db =& new ps_DB;
$q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
$db->query($q);
$max=$db->f("product_id");
?>
 <div class="browseProductContainer">
  <h2>
  <a style="font-size:16px; font-weight:bold;" href="<?php echo $product_flypage ?>">
<?php
echo 'id='.$product_id.'   max='.$max.'<br>';
if ($product_id>$max-337) {
echo $product_name.'<span style="color:red;"> NEW</span>';
}
else {
echo $product_name;
};
?></a>
  </h2>
  <p ><?php echo $product_price ?></p>
  <div style="float:left;width:90%" >
  <a style="height:100px; display:block;" href="<?php echo $product_flypage ?>" title="<?php echo $product_name ?>">
        <?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?>
       </a>
  </div>
 
  <br style="clear:both;" />
 
  <div style="float:left;width:90%"><?php echo $product_s_desc ?></div>
 
  <a href="<?php echo $product_flypage ?>">[<?php echo $product_details ?>...]</a>
  <br style="clear:both;" />
  <div style="float:left;width:90%;margin-top: 3px;">
      <?php echo $product_rating ?>
  </div>
  <div style="float:left;width:90%;margin-top: 3px;"><?php echo $form_addtocart ?>
  </div>
  <br style="clear:both;" />
</div>

Убрал в коде повтор запроса. И добавил
вывод: текущий id и максимальный id продукта. Вычитай из максимального разницу (337 или 338)
и смотри че не так.

Если все нормально строчку echo 'id='.$product_id.'   max='.$max.'<br>'; грохни.
browse_listtable.tpl.php не правь. не надо.
Все должно работать.
*

xxx87

  • Захожу иногда
  • 130
  • 4 / 0
  • прошу любить и жаловать
Re: Отметка NEW
« Ответ #15 : 21.05.2010, 21:17:39 »
И снова здравствуйте! Поставила уже шаблон, который уж точно перепутать нельзя. Но не могу найти в тексте где $product['product_name']
Вот сам код :
Цитировать
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__); ?>

<?php echo $buttons_header // The PDF, Email and Print buttons ?>
<?php echo $browsepage_header // The heading, the category description ?>
<?php echo $parameter_form // The Parameter search form ?>
<?php echo $orderby_form // The sort-by, order-by form PLUS top page navigation ?>

<div id="product_list" style="width:100%;">
<?php
$data =array(); // Holds the rows of products
$i = $row = $tmp_row = 0; // Counters
$num_products = count( $products );

foreach( $products as $product ) {
   
      /*** Now echo the filled cell ***/
      if( $tmp_row != $row || $row == 0 ) {
         if ( ($num_products - $i) < $products_per_row ) {
            $cell_count =$num_products - $i;
         }
         else {
            $cell_count = $products_per_row;
         }
         $row++;
         $tmp_row = $row;
      }
      $colspan = $products_per_row - $cell_count + 1;
      if( $cell_count < 1 ) {
         $cell_count = 1;
      }
      
      $bormarg = $cell_count*0.8;
      $siminmar = 99.8-$bormarg;
      $energwidth = $siminmar/$cell_count;
      
      echo "<div style=\"margin: 0.4%; width:".$energwidth."%; float:left;\" id=\"".uniqid( "ilvm_" )."\">";
      
      foreach( $product as $attr => $val ) {
         // Using this we make all the variables available in the template
         // translated example: $this->set( 'product_name', $product_name );
         $this->set( $attr, $val );
      }
      
      // Parse the product template (usually 'browse_x') for each product
      // and store it in our $data array
      echo $this->fetch( 'browse/'.$templatefile .'.php' );
      
      $i++;
      if ( ($i) % $products_per_row == 0) {
         $row++;
         /** if yes, close the current "row" ***/
         echo "\n</div><br class=\"clr\" />";
      }
      else {
         echo "\n</div>";
         
      }
      
}
?>
</div>

<?php
echo $browsepage_footer;

// Show Featured Products
if( $this->get_cfg( 'showFeatured', 1 )) {
    /* featuredproducts(random, no_of_products,category_based) no_of_products 0 = all else numeric amount
    edit featuredproduct.tpl.php to edit layout */
    echo $ps_product->featuredProducts(true,10,true);
}
echo $recent_products;


*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #16 : 21.05.2010, 21:54:49 »
xxx87 там нет такого $product['product_name']. Как называется этот файл у тебя?
Попробуй сделать всё так как описал yadrinez с использованием тех шаблонов.
Я дошел уже до надписи NEW, но в данный момент у меня надпись NEW отображается у всех товаров либо не отображается вовсе, когда меняю значения ($product_id>$max-____).
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #17 : 24.05.2010, 21:03:40 »
Для того чтоб все вышеперчисленное работало, необходимо еще внести следующие изменения (они у меня были, а в стандартном виртуемарте нет)

правим файл в папке

Ищем строку примерно под номером 461
     
Код
  $products[$i]['product_url'] = $db_browse->f("product_url");
после нее вставляем
   
Код
//yadrinez добавляем вывод id категории
$products[$i]['product_id'] = $db_browse->f('product_id');

перед
   
Код
} // END OF while loop
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #18 : 24.05.2010, 21:10:02 »
ВСЕ ЗАРАБОТАЛО! :D
Огромное спасибо "yadrinez" за решение этого вопроса.
Все кому помог этот пост ставьте ему БОЛЬШОЙ ПЛЮС. ;)

Подытожим:
1) Изменения вносятся в файле - shop.browse.php, лежит тут: administrator/components/com_virtuemart/html/
Код файла изменена строка 462-463
Код
<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
* This is the Main Product Listing File!
*
* @version $Id: shop.browse.php 1847 2009-07-11 13:15:14Z tkahl $
* @package VirtueMart
* @subpackage html
* @copyright Copyright (C) 2004-2009 soeren - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
mm_showMyFileName( __FILE__ );

// load important class files
require_once (CLASSPATH."ps_product.php");
$ps_product = new ps_product;
require_once (CLASSPATH."ps_product_category.php");
$ps_product_category = new ps_product_category;
require_once (CLASSPATH."ps_product_files.php");
require_once (CLASSPATH."ps_reviews.php");
require_once (CLASSPATH."imageTools.class.php");
require_once (CLASSPATH."PEAR/Table.php");
require_once(CLASSPATH . 'ps_product_attribute.php' );
$ps_product_attribute = new ps_product_attribute;

$Itemid = $sess->getShopItemid();
$keyword1 = $vmInputFilter->safeSQL( urldecode(vmGet( $_REQUEST, 'keyword1', null )));
$keyword2 = $vmInputFilter->safeSQL( urldecode(vmGet( $_REQUEST, 'keyword2', null )));

$search_op= $vmInputFilter->safeSQL( vmGet( $_REQUEST, 'search_op', null ));
$search_limiter= $vmInputFilter->safeSQL( vmGet( $_REQUEST, 'search_limiter', null ));

if (empty($category_id)) $category_id = $search_category;

$default['category_flypage'] = FLYPAGE;

$db_browse = new ps_DB;
$dbp = new ps_DB;
// NEW: Include the query section from an external file
// If settings are loaded, extended Classes are allowed and the user_class/shop_browse_queries.php exisits...
if (!defined('VM_ALLOW_EXTENDED_CLASSES') && file_exists(dirname(__FILE__).'/../virtuemart.cfg.php')) include_once(dirname(__FILE__).'/../virtuemart.cfg.php');
if (defined('VM_ALLOW_EXTENDED_CLASSES') && defined('VM_THEMEPATH') && VM_ALLOW_EXTENDED_CLASSES && file_exists(VM_THEMEPATH.'user_class/shop_browse_queries.php')) {
// Load the theme-user_class shop_browse_queries.php
require_once( VM_THEMEPATH.'user_class/shop_browse_queries.php' );
} else {
require_once( PAGEPATH. "shop_browse_queries.php" );
}


$db_browse->query( $count );

$num_rows = $db_browse->f("num_rows");

if( $limitstart > 0 && $limit >= $num_rows) {

$list = str_replace( 'LIMIT '.$limitstart, 'LIMIT 0', $list );
}
if( $category_id ) {
/**
    * CATEGORY DESCRIPTION
    */
$db->query( "SELECT category_id, category_name FROM #__{vm}_category WHERE category_id='$category_id'");
$db->next_record();
$category_name = shopMakeHtmlSafe( $db->f('category_name') );

// Set Dynamic Page Title
$vm_mainframe->setPageTitle( $db->f("category_name") );

$desc =  $ps_product_category->get_description($category_id);
$desc = vmCommonHTML::ParseContentByPlugins( $desc );
// Prepend Product Short Description Meta Tag "description" when applicable
$mainframe->prependMetaTag( "description", substr(strip_tags($desc ), 0, 255) );

}
// when nothing has been found we tell this here and say goodbye
if ($num_rows == 0 && (!empty($keyword)||!empty($keyword1))) {
echo $VM_LANG->_('PHPSHOP_NO_SEARCH_RESULT');
}
elseif( $num_rows == 0 && empty($product_type_id) && !empty($child_list)) {
echo $VM_LANG->_('EMPTY_CATEGORY');
}

elseif( $num_rows == 1 && ( !empty($keyword) || !empty($keyword1) ) ) {
// If just one product has been found, we directly show the details page of it
$db_browse->query( $list );
$db_browse->next_record();
$flypage = $db_browse->sf("category_flypage")? $db_browse->sf("category_flypage") : FLYPAGE;

$url_parameters = "page=shop.product_details&amp;flypage=$flypage&amp;product_id=" . $db_browse->f("product_id"). "&amp;category_id=" . $db_browse->f("category_id");
vmRedirect( $sess->url($url_parameters, true, false ) );
}
else {
// NOW START THE PRODUCT LIST
$tpl = vmTemplate::getInstance();

if( $category_id ) {
/**
    * CATEGORY DESCRIPTION
    */
$browsepage_lbl = $category_name;
$tpl->set( 'browsepage_lbl', $browsepage_lbl );

$tpl->set( 'desc', $desc );

$category_childs = $ps_product_category->get_child_list($category_id);
$tpl->set( 'categories', $category_childs );
$navigation_childlist = $tpl->fetch( 'common/categoryChildlist.tpl.php');
$tpl->set( 'navigation_childlist', $navigation_childlist );

// Set up the CMS pathway
$category_list = array_reverse( $ps_product_category->get_navigation_list($category_id) );
$pathway = $ps_product_category->getPathway( $category_list );
$vm_mainframe->vmAppendPathway( $pathway );

$tpl->set( 'category_id', $category_id );
$tpl->set( 'category_name', $category_name );

$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_category.tpl.php' );

}
elseif( $manufacturer_id) {
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
$db->next_record();
$mainframe->setPageTitle( $db->f("mf_name") );

$browsepage_lbl = shopMakeHtmlSafe( $db->f("mf_name") );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );
$browsepage_lbltext = $db->f("mf_desc");
$tpl->set( 'browsepage_lbltext', $browsepage_lbltext );
$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_manufacturer.tpl.php' );
}
elseif( $keyword ) {
$mainframe->setPageTitle( $VM_LANG->_('PHPSHOP_SEARCH_TITLE',false) );
$browsepage_lbl = $VM_LANG->_('PHPSHOP_SEARCH_TITLE').': '.shopMakeHtmlSafe( $keyword );
$tpl->set( 'browsepage_lbl', $browsepage_lbl );

$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_keyword.tpl.php' );
}
else {
$mainframe->setPageTitle( $VM_LANG->_('PHPSHOP_BROWSE_LBL',false) );#
$browsepage_lbl = $VM_LANG->_('PHPSHOP_BROWSE_LBL');
$tpl->set( 'browsepage_lbl', $browsepage_lbl );

$browsepage_header = $tpl->fetch( 'browse/includes/browse_header_all.tpl.php' );
}
$tpl->set( 'browsepage_header', $browsepage_header );

if (!empty($product_type_id) && @$_REQUEST['output'] != "pdf") {
$tpl->set( 'ps_product_type', $ps_product_type);
$tpl->set( 'product_type_id', $product_type_id);
$parameter_form = $tpl->fetch( 'browse/includes/browse_searchparameter_form.tpl.php' );
}
else {
$parameter_form = '';
}
$tpl->set( 'parameter_form', $parameter_form );

// Decide whether to show the limit box
$show_limitbox = ( $num_rows > 5 && @$_REQUEST['output'] != "pdf" );
$tpl->set( 'show_limitbox', $show_limitbox );

// Decide whether to show the top navigation
$show_top_navigation = ( PSHOP_SHOW_TOP_PAGENAV =='1' && $num_rows > $limit );
$tpl->set( 'show_top_navigation', $show_top_navigation );

// Prepare Page Navigation
require_once( CLASSPATH . 'pageNavigation.class.php' );
$pagenav = new vmPageNav( $num_rows, $limitstart, $limit );
$tpl->set( 'pagenav', $pagenav );

$search_string = '';
if ( $num_rows > 1 && @$_REQUEST['output'] != "pdf") {
if ( $num_rows > 5 ) { // simplified logic
$search_string = $mm_action_url."index.php?option=com_virtuemart&amp;Itemid=$Itemid&amp;category_id=$category_id&amp;page=$modulename.browse";
$search_string .= empty($manufacturer_id)? '' : "&amp;manufacturer_id=$manufacturer_id";
$search_string .= empty($keyword)? '' : '&amp;keyword='.urlencode( $keyword );
if (!empty($keyword1)) {
$search_string.="&amp;keyword1=".urlencode($keyword1);
$search_string.="&amp;search_category=".urlencode($search_category);
$search_string.="&amp;search_limiter=$search_limiter";
if (!empty($keyword2)) {
$search_string.="&amp;keyword2=".urlencode($keyword2);
$search_string.="&amp;search_op=".urlencode($search_op);
}
}

if (!empty($product_type_id)){
foreach($_REQUEST as $key => $value){
if (substr($key, 0,13) == "product_type_"){
$val = vmGet($_REQUEST, $key );
if( is_array( $val )) {
foreach( $val as $var ) {
$search_string .="&".$key."[]=".urlencode($var);
}
} else {
$search_string .="&".$key."=".urlencode($val);
}
}
}
}

}

$tpl->set( 'VM_BROWSE_ORDERBY_FIELDS', $VM_BROWSE_ORDERBY_FIELDS);

    if ($DescOrderBy == "DESC") {
        $icon = "sort_desc.png";
        $selected = Array( "selected=\"selected\"", "" );
  $asc_desc = Array( "DESC", "ASC" );
}
else {
  $icon = "sort_asc.png";
        $selected = Array( "", "selected=\"selected\"" );
        $asc_desc = Array( "ASC", "DESC" );
    }
$tpl->set( 'orderby', $orderby );
$tpl->set( 'icon', $icon );
$tpl->set( 'selected', $selected );
$tpl->set( 'asc_desc', $asc_desc );
$tpl->set( 'category_id', $category_id );
$tpl->set( 'manufacturer_id', $manufacturer_id );
$tpl->set( 'keyword', urlencode( $keyword ) );
$tpl->set( 'keyword1', urlencode( $keyword1 ) );
$tpl->set( 'keyword2', urlencode( $keyword2 ) );
$tpl->set( 'Itemid', $Itemid );

if( $show_top_navigation ) {
$tpl->set( 'search_string', $search_string );
}

$orderby_form = $tpl->fetch( 'browse/includes/browse_orderbyform.tpl.php' );
$tpl->set( 'orderby_form', $orderby_form );
    }
    else {
    $tpl->set( 'orderby_form', '' );
    }

$db_browse->query( $list );
$db_browse->next_record();

$products_per_row = (!empty($category_id))? $db_browse->f("products_per_row") : PRODUCTS_PER_ROW;

if( $products_per_row < 1 ) {
$products_per_row = 1;
}
$buttons_header = '';
/**
*   Start caching all product details for a later loop
*
**/
if(@$_REQUEST['output'] != "pdf") {

// Show the PDF, Email and Print buttons
$tpl->set('option', $option);
$tpl->set('category_id', $category_id );
$tpl->set('product_id', $product_id );
$buttons_header = $tpl->fetch( 'common/buttons.tpl.php' );

$templatefile = (!empty($category_id))? $db_browse->f("category_browsepage") : CATEGORY_TEMPLATE;
if( $templatefile == 'managed' ) {
// automatically select the browse template with the best match for the number of products per row
$templatefile = file_exists(VM_THEMEPATH.'templates/browse/browse_'.$products_per_row.'.php' )
? 'browse_'.$products_per_row
: 'browse_5';
} elseif( !file_exists(VM_THEMEPATH.'templates/browse/'.$templatefile.'.php')) {
$templatefile = 'browse_5';
}
}
else {
$templatefile = "browse_lite_pdf";
}

$tpl->set( 'buttons_header', $buttons_header );

$tpl->set('products_per_row', $products_per_row );
$tpl->set('templatefile', $templatefile );

$db_browse->reset();

$products = array();
$counter = 0;
/*** Start printing out all products (in that category) ***/
while ($db_browse->next_record()) {

// If it is item get parent:
$product_parent_id = $db_browse->f("product_parent_id");
if ($product_parent_id != 0) {
$dbp->query("SELECT product_full_image,product_thumb_image,product_name,product_s_desc FROM #__{vm}_product WHERE product_id='$product_parent_id'" );
$dbp->next_record();
}

// Set the flypage for this product based on the category.
// If no flypage is set then use the default as set in VirtueMart.cfg.php
$flypage = $db_browse->sf("category_flypage");

if (empty($flypage)) {
            $flypage = FLYPAGE;
        }
        $url_parameters = "page=shop.product_details&amp;flypage=$flypage&amp;product_id=" . $db_browse->f("product_id"). "&amp;category_id=" . $db_browse->f("category_id");
        if( $manufacturer_id ) {
        $url_parameters .= "&amp;manufacturer_id=" . $manufacturer_id;
        }
        if( $keyword != '') {
        $url_parameters .= "&amp;keyword=".urlencode($keyword);
        }
        $url = $sess->url( $mm_action_url.'?'.$url_parameters );

        // Price: xx.xx EUR
if (_SHOW_PRICES == '1' && $auth['show_prices']) {
$product_price = $ps_product->show_price( $db_browse->f("product_id") );
}
else {
$product_price = "";
}
// @var array $product_price_raw The raw unformatted Product Price in Float Format
$product_price_raw = $ps_product->get_adjusted_attribute_price($db_browse->f('product_id'));

// i is the index for the array holding all products, we need to show. to allow sorting by discounted price,
// we need to use the price as first part of the index name!
$i = $product_price_raw['product_price'] . '_' . ++$counter;

        if( $db_browse->f("product_thumb_image") ) {
            $product_thumb_image = $db_browse->f("product_thumb_image");
}
else {
if( $product_parent_id != 0 ) {
$product_thumb_image = $dbp->f("product_thumb_image"); // Use product_thumb_image from Parent Product
}
else {
$product_thumb_image = 0;
}
}
if( $product_thumb_image ) {
if( substr( $product_thumb_image, 0, 4)!= "http" ) {
if(PSHOP_IMG_RESIZE_ENABLE == '1') {
$product_thumb_image = $mosConfig_live_site."/components/com_virtuemart/show_image_in_imgtag.php?filename=".urlencode($product_thumb_image)."&amp;newxsize=".PSHOP_IMG_WIDTH."&amp;newysize=".PSHOP_IMG_HEIGHT."&amp;fileout=";
}
elseif( !file_exists( IMAGEPATH."product/".$product_thumb_image )) {
                    $product_thumb_image = VM_THEMEURL.'images/'.NO_IMAGE;
                }
}
}
else {
$product_thumb_image = VM_THEMEURL.'images/'.NO_IMAGE;
}

// Get the full image path, or URL if set, or the no_image
if( $db_browse->f("product_full_image") ) {
$product_full_image = $db_browse->f("product_full_image");
} elseif( $product_parent_id != 0 ) {
$product_full_image = $dbp->f("product_full_image"); // Use product_full_image from Parent Product
}
else {
$product_full_image = VM_THEMEURL . 'images/' . NO_IMAGE;

// Get the size information for the no_image
if( file_exists( VM_THEMEPATH . 'images/' . NO_IMAGE ) ) {
$full_image_info = getimagesize( VM_THEMEPATH . 'images/' . NO_IMAGE );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}
}

// Get image size information and add the full URL
if( substr( $product_full_image, 0, 4)!= 'http' ) {
// This is a local image
if( file_exists( IMAGEPATH . 'product/' . $product_full_image ) ) {
$full_image_info = getimagesize( IMAGEPATH . 'product/' . $product_full_image );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}

$product_full_image = IMAGEURL . 'product/' . $product_full_image;
} elseif( !isset( $full_image_width ) || !isset( $full_image_height ) ) {
// This is a URL image
$full_image_info = @getimagesize( $product_full_image );
$full_image_width = $full_image_info[0]+40;
$full_image_height = $full_image_info[1]+40;
}

$files = ps_product_files::getFilesForProduct( $db_browse->f('product_id') );
$products[$i]['files'] = $files['files'];
$products[$i]['images'] = $files['images'];

$product_name = $db_browse->f("product_name");
if( $db_browse->f("product_publish") == "N" ) {
$product_name .= " (". $VM_LANG->_('CMN_UNPUBLISHED',false).")";
}

if( empty($product_name) && $product_parent_id!=0 ) {
$product_name = $dbp->f("product_name"); // Use product_name from Parent Product
}
$product_s_desc = $db_browse->f("product_s_desc");
if( empty($product_s_desc) && $product_parent_id!=0 ) {
$product_s_desc = $dbp->f("product_s_desc"); // Use product_s_desc from Parent Product
}
$product_details = $VM_LANG->_('PHPSHOP_FLYPAGE_LBL');

if (PSHOP_ALLOW_REVIEWS == '1' && @$_REQUEST['output'] != "pdf") {
// Average customer rating: xxxxx
        // Total votes: x
$product_rating = ps_reviews::allvotes( $db_browse->f("product_id") );
}
else {
$product_rating = "";
}

// Add-to-Cart Button
if (USE_AS_CATALOGUE != '1' && $product_price != ""
&& $tpl->get_cfg( 'showAddtocartButtonOnProductList' )
&& !stristr( $product_price, $VM_LANG->_('PHPSHOP_PRODUCT_CALL') )
&& !ps_product::product_has_attributes( $db_browse->f('product_id'), true )) {

$tpl->set( 'i', $i );
$tpl->set( 'product_id', $db_browse->f('product_id') );
$tpl->set( 'product_in_stock', $db_browse->f('product_in_stock') );
$tpl->set( 'ps_product_attribute', $ps_product_attribute );
$products[$i]['form_addtocart'] = $tpl->fetch( 'browse/includes/addtocart_form.tpl.php' );
$products[$i]['has_addtocart'] = true;
}
else {
$products[$i]['form_addtocart'] = '';
$products[$i]['has_addtocart'] = false;
}

$products[$i]['product_flypage'] = $url;
$products[$i]['product_thumb_image'] = $product_thumb_image;
$products[$i]['product_full_image'] = $product_full_image;
$products[$i]['full_image_width'] = $full_image_width;
$products[$i]['full_image_height'] = $full_image_height;

// Unset these for the next product
unset($full_image_width);
unset($full_image_height);

$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;
$products[$i]['product_price'] = $product_price;
$products[$i]['product_price_raw'] = $product_price_raw;
$products[$i]['product_sku'] = $db_browse->f("product_sku");
$products[$i]['product_weight'] = $db_browse->f("product_weight");
$products[$i]['product_weight_uom'] = $db_browse->f("product_weight_uom");
$products[$i]['product_length'] = $db_browse->f("product_length");
$products[$i]['product_width'] = $db_browse->f("product_width");
$products[$i]['product_height'] = $db_browse->f("product_height");
$products[$i]['product_lwh_uom'] = $db_browse->f("product_lwh_uom");
$products[$i]['product_in_stock'] = $db_browse->f("product_in_stock");
$products[$i]['product_available_date'] = $VM_LANG->convert( vmFormatDate($db_browse->f("product_available_date"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['product_availability'] = $db_browse->f("product_availability");
$products[$i]['cdate'] = $VM_LANG->convert( vmFormatDate($db_browse->f("cdate"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['mdate'] = $VM_LANG->convert( vmFormatDate($db_browse->f("mdate"), $VM_LANG->_('DATE_FORMAT_LC') ));
$products[$i]['product_url'] = $db_browse->f("product_url");
//yadrinez добавляем вывод id категории
$products[$i]['product_id'] = $db_browse->f('product_id');
} // END OF while loop

// Need to re-order here, because the browse query doesn't fetch discounts
if( $orderby == 'product_price' ) {
if ($DescOrderBy == "DESC") {
// using krsort when the Array must be sorted reverse (Descending Order)
krsort($products, SORT_NUMERIC);
} else {
// using ksort when the Array must be sorted in ascending order
ksort($products, SORT_NUMERIC);
}
}
$tpl->set( 'products', $products );
$tpl->set( 'search_string', $search_string );

if ( $num_rows > 1 ) {
$browsepage_footer = $tpl->fetch( 'browse/includes/browse_pagenav.tpl.php' );
$tpl->set( 'browsepage_footer', $browsepage_footer );
} else {
$tpl->set( 'browsepage_footer', '' );
}


$recent_products = $ps_product->recentProducts(null,$tpl->get_cfg('showRecent', 5));
$tpl->set('recent_products',$recent_products);

$tpl->set('ps_product',$ps_product);

echo $tpl->fetch( $tpl->config->get( 'productListStyle' ) );
}
?>
2)  Изменения вносятся в файле Вашего шаблона (у нас это был) - browse_3.php лежит тут: /components/com_virtuemart/themes/default/templates/browse/
Код файла изменены строки 4-9 и 14-21
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__);
 ?>
 <?php
$db =& new ps_DB;
$q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
$db->query($q);
$max=$db->f("product_id");
?>
 <div class="browseProductContainer">
  <h2>
  <a style="font-size:16px; font-weight:bold;" href="<?php echo $product_flypage ?>">
<?php
//echo 'id='.$product_id.'   max='.$max.'<br>';
if ($product_id>$max-30) {
echo $product_name.'<span style="color:red;"> NEW</span>';
}
else {
echo $product_name;
};
?></a>
  </h2>
  <p ><?php echo $product_price ?></p>
  <div style="float:left;width:90%" >
  <a style="height:100px; display:block;" href="<?php echo $product_flypage ?>" title="<?php echo $product_name ?>">
        <?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?>
       </a>
  </div>
 
  <br style="clear:both;" />
 
  <div style="float:left;width:90%"><?php echo $product_s_desc ?></div>
 
  <a href="<?php echo $product_flypage ?>">[<?php echo $product_details ?>...]</a>
  <br style="clear:both;" />
  <div style="float:left;width:90%;margin-top: 3px;">
      <?php echo $product_rating ?>
  </div>
  <div style="float:left;width:90%;margin-top: 3px;"><?php echo $form_addtocart ?>
  </div>
  <br style="clear:both;" />
</div>
3) Изменения вносятся в файле Вашего шаблона (у нас это был) browse_listtable.tpl.php лежит тут: /components/com_virtuemart/themes/default/templates/browse/includes
Код файла изменены строки 8-13 и 43-48
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__); ?>

<?php echo $buttons_header // The PDF, Email and Print buttons ?>
<?php echo $browsepage_header // The heading, the category description ?>
<?php echo $parameter_form // The Parameter search form ?>
<?php echo $orderby_form // The sort-by, order-by form PLUS top page navigation ?>
<?php
   $db =& new ps_DB;
   $q  = "SELECT MAX(product_id) AS product_id FROM #__{vm}_product";
   $db->query($q);
   $max=$db->f("product_id");
?>
<?php
$data =array(); // Holds the rows of products
$i = 1; $row = 0; // Counters

// Table header
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_NAME');
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_SKU');
if( _SHOW_PRICES && $auth['show_prices'] ) {
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_PRICE');
}
$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_FORM_THUMB_IMAGE');
$tableheader[] = $VM_LANG->_('PHPSHOP_PRODUCT_DESC_TITLE');
if( _SHOW_PRICES && $auth['show_prices'] && USE_AS_CATALOGUE != '1' ) {
$tableheader[] = $VM_LANG->_('PHPSHOP_CART_ACTION');
}

// Creates a new HTML_Table object that will help us
// to build a table holding all the products
$table = new HTML_Table('width="100%"');

$table->addRow( $tableheader, 'class="sectiontableheader"', 'th', true );

foreach( $products as $product ) {

foreach( $product as $attr => $val ) {
// Using this we make all the variables available in the template
// translated example: $this->set( 'product_name', $product_name );
$this->set( $attr, $val );
}
  if ($product['product_id']>$max-30) {
               $data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>'.'<span style="color:red;"> NEW</span>';
            }
            else {
               $data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
            };
//$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'.$product['product_name'].'</a>';
$data[$row][] = $product['product_sku'];
if( _SHOW_PRICES && $auth['show_prices'] ) {
$data[$row][] = $product['product_price'];
}
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'
. ps_product::image_tag( $product['product_thumb_image'] )
. '</a>';
$data[$row][] = $product['product_s_desc'];
if( $product['has_addtocart'] ) {
$data[$row][] = $product['form_addtocart'];
}
else {
$data[$row][] = '<a href="'.$product['product_flypage'].'" title="'.$product['product_name'].'">'
. $product['product_details']
. '</a>';
}

$row++;

}


// Loop through each row and build the table
foreach($data as $key => $value) {

$table->addRow( $data[$key], 'class="sectiontableentry'.$i.'"', 'td', true );
$i = $i == 1 ? 2 : 1;
}
// Display the table
echo $table->toHtml();
?>
<br class="clr" /><br />
<?php echo $browsepage_footer ?>
<?php
// Show Featured Products
if( $this->get_cfg( 'showFeatured', 1 )) {
    /* featuredproducts(random, no_of_products,category_based) no_of_products 0 = all else numeric amount
    edit featuredproduct.tpl.php to edit layout */
    echo $ps_product->featuredProducts(true,10,true);
} ?>
<?php echo $recent_products ?>
« Последнее редактирование: 24.05.2010, 21:50:59 от bos$ »
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Отметка NEW
« Ответ #19 : 24.05.2010, 21:14:04 »
вообще это не верно привязывать проверку на "новшество" к айди товаров. а что если я насоздам товаров а потом удалю предпоследние 9? ИМХО нужно делать сортировку по дате DESC, LIMIT 10, строить массив с извлеченными айди. и потом проверять in_array(). Если я ниче не упустил - это и будет истинный путь.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #20 : 24.05.2010, 21:34:34 »
danik.html выложи решение конкретное если есть. Совершенству нет предела, может будет несколько в итоге способов добавлять надпись NEW к товару - пока конкретный только один.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Отметка NEW
« Ответ #21 : 24.05.2010, 21:45:54 »
что значт конкретное? я кажется вполне конкректо описал как делать. и это даже не алгоритм, а конкретные названия функций, операторов. Осталось просто оформить в код. Делать это лень. так как валяюьс на кровати и под рукой нет Joomla  к тому же.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

bos$

  • Захожу иногда
  • 77
  • 2 / 0
Re: Отметка NEW
« Ответ #22 : 24.05.2010, 21:55:43 »
что значт конкретное? я кажется вполне конкректо описал как делать. и это даже не алгоритм, а конкретные названия функций, операторов. Осталось просто оформить в код. Делать это лень. так как валяюьс на кровати и под рукой нет Joomla  к тому же.
Просто я к примеру не знаю как это сделать, "языками не владею". И конкретное решение для меня это кусок кода который можно вставить по указанному маршруту, чтобы в итоге все работало. Так что когда будет под рукой Joomla! и желание - может будет Ваше решение этого вопроса.
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #23 : 25.05.2010, 15:49:01 »
вообще это не верно привязывать проверку на "новшество" к айди товаров. а что если я насоздам товаров а потом удалю предпоследние 9? ИМХО нужно делать сортировку по дате DESC, LIMIT 10, строить массив с извлеченными айди. и потом проверять in_array(). Если я ниче не упустил - это и будет истинный путь.

Да никто и говорит что это самое верное. Сказали самое простое. На скорую руку.
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
Re: Отметка NEW
« Ответ #24 : 25.05.2010, 15:53:05 »
cdate: date of creation
можно по этому полю будет отфильтровывать.
Свободное время будет выложу.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: Отметка NEW
« Ответ #25 : 25.05.2010, 17:19:31 »
$db =& JFactory::getDBO();
$query = "SELECT product_id from #__{vm}_product "
         .= "ORDER BY cdate DESC "
         .= "LIMIT 10 "
         ;
$db->setQuery($query);
$recent_rows = $db->loadObjectList();
$recent_products - array();
foreach($recent_rows as $recent_row){
    $recent_products[] = $recent_row->product_id;
}

if ( in_array($recent_products, $product_id) ) echo 'это новый товар!';

После пары правок код должен работать. Сдесь выбирается 10 последних добавленных товаров. Цикл foreach по идее можно избежать какой то функцией обработки массивов.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться