Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

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)
 • красивые алиасы (чпу) без тормозов и дублей!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться