Для реализации сорировки товара по производителям, необходимо внести ряд модификаций.
1. Открываем файл
administrator/components/com_virtuemart/html/shop.browse.php:найти строку 121:
$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
и заменить на:
$db->query( "SELECT manufacturer_id, mf_name FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
Далее, в этом же файле найти кусок кода: (172 строка)
if ( $num_rows > 1 && @$_REQUEST['output'] != "pdf") {
if ( $num_rows > 5 ) { // simplified logic
$search_string = $mm_action_url."index.php?option=com_virtuemart&Itemid=$Itemid&category_id=$category_id&page=$modulename.browse";
$search_string .= empty($manufacturer_id)? '' : "&manufacturer_id=$manufacturer_id";
$search_string .= empty($keyword)? '' : '&keyword='.urlencode( $keyword );
if (!empty($keyword1)) {
$search_string.="&keyword1=".urlencode($keyword1);
$search_string.="&search_category=".urlencode($search_category);
$search_string.="&search_limiter=$search_limiter";
if (!empty($keyword2)) {
$search_string.="&keyword2=".urlencode($keyword2);
$search_string.="&search_op=".urlencode($search_op);
}
}
и заменить на:
if ( $num_rows > 1 && @$_REQUEST['output'] != "pdf") {
if ( $num_rows > $limit || $num_rows > 5 ) {
$search_string = $mm_action_url."index.php?option=com_virtuemart&page=$modulename.browse&category_id=$category_id&keyword=".urlencode( $keyword )."&manufacturer_id=$manufacturer_id&Itemid=$Itemid";
$search_string .= !empty($orderby)? "&orderby=".urlencode($orderby) : "";
if (!empty($keyword1)) {
$search_string.="&keyword1=".urlencode($keyword1);
$search_string.="&search_category=$search_category";
$search_string.="&search_limiter=$search_limiter";
if (!empty($keyword2)) {
$search_string.="&keyword2=".urlencode($keyword2);
$search_string.="&search_op=$search_op";
}
}
Строку 187:
if (substr($key, 0,13) == "product_type_"){
заменить на:
if (substr($key, 0,13) == "product_type_" || substr($key, 0,5) == "price"){
Далее, после строки 232:
$tpl->set( 'orderby_form', $orderby_form );
Добавить такой код:
//CHANGES FOR MANUFACTURER FILTER
$orderby_form = $tpl->fetch( 'browse/includes/browse_filterbymf.tpl.php' );
$tpl->set( 'filterby_mf', $orderby_form );
//END CHANGES FOR MANUFACTURER FILTER
После строки 235:
$tpl->set( 'orderby_form', '' );
Добавить вот это:
//CHANGES FOR MANUFACTURER FILTER
$tpl->set( 'filterby_mf', '' );
//END CHANGES FOR MANUFACTURER FILTER
2. Открываем файл
administrator/components/com_virtuemart/html/shop_browse_queries.php:Строки 22-25:
// Descending or Ascending Order? possible values: [ASC|DESC]
$DescOrderBy = strtoupper($vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', "ASC" ));
$DescOrderBy == 'ASC' ? 'ASC' : 'DESC';
заменить на:
// Descending or Ascending Order? possible values: [ASC|DESC]
$DescOrderBy = $vmInputFilter->safeSQL( $vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', "ASC" ) );
строки 63-67:
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
заменить на:
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "#__{vm}_product_category_xref`.`category_id`=".$category_id;
//MODIFIED FOR FILTER MANUFACTURER
//} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
} elseif( empty( $keyword )) {
//END MODIFIED FOR FILTER MANUFACTURER
После строки 299 дописать такой код:
$count = "SELECT $count_name FROM ($table_names) ";
и перед
if( $perm->is_registered_customer($auth['user_id']) ) {
Добавить:
//DEBUG x FILTER MANUFACTURER
//echo '<br />'.'--------------------'.'<br />';
//echo 'list='.$list.'<br />';
//echo '<br />'.'--------------------'.'<br />';
//echo 'count='.$count.'<br />';
//$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=16 ";
Строку 309:
$where_clause[] = "`product_parent_id`=0 ";
заменить на:
$where_clause[] = "((`product_parent_id`='0') OR (`product_parent_id`='')) ";
После строки 321:
$q .= "\n ORDER BY $orderbyField $DescOrderBy";
Вставить:
//DEBUG x FILTER MANUFACTURER
//echo '<br />'.'--------------------'.'<br />';
//echo 'q='.$q.'<br />';
3. Открываем
components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyform.tpl:
после строк 18-19:
<input class="button" type="submit" value="'.$VM_LANG->_('PHPSHOP_SUBMIT').'" />');
}
добавляем:
//CHANGES FOR FILTER MANUFACTURER
echo $this->fetch( 'browse/includes/browse_filterbymf.tpl.php');
//END CHANGES FOR FILTER MANUFACTURER
Строку 25:
<input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id ?>" />
Заменяем на строки:
<!-- CHANGES FOR FILTER MANUFACTURER
<input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id ?>" />
-->
<input type="hidden" name="limitstart" value="0" />
Находим строку 32:
echo '<input type="hidden" name="product_type_id" value="'.$product_type_id.'" />';
и закомментируем ее.
находим строки 36-55:
if( $show_top_navigation ) {
?>
<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>
<?php $pagenav->writeLimitBox(); ?>
<noscript><input type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>
<!-- PAGE NAVIGATION AT THE TOP -->
<br/ >
<div style="text-align:center;"><?php
$pagenav->writePagesLinks( $search_string );
echo '<br />';
$pagenav->writePagesCounter();
?>
</div>
<?php
}
?>
и заменяем на:
//if( $show_top_navigation ) {
?>
<!-- <form action="<?php echo $mm_action_url."index.php" ?>" method="get" name="order">
<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>
<?php $pagenav->writeLimitBox( $search_string ); ?>
<noscript><input type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>
-->
<!-- PAGE NAVIGATION AT THE TOP -->
<!-- <br />
<div style="text-align:center;"><?php
$pagenav->writePagesLinks( $search_string );
echo '<br />';
$pagenav->writePagesCounter();
?>
</div>
-->
<?php
// }
?>
4. Создаём файл
components/com_virtuemart/themes/default/templates/browse/includes/browse_filterbymf.tpl.php (файл приложен в аттаче)
Готово.
P.S. Это
пока черновик, статью писал опираясь на сравнение хаков вот
этого решения. Опробую на сайте вечером.
[вложение удалено Администратором]