За последние 24 часа нас посетили 24400 программистов и 1726 роботов. Сейчас ищут 1878 программистов ...

Метод сортировки для VirtueMart

Тема в разделе "Сделайте за меня", создана пользователем OgecuT, 24 ноя 2014.

  1. OgecuT

    OgecuT Новичок

    С нами с:
    22 июл 2014
    Сообщения:
    9
    Симпатии:
    0
    сайт каталог на virtuemart под управления joomla. Стандартно из админку можно задать сортировку по 1 полю для всего магазина некоторым категория нужно сделать свою сортировку. Для это нужно переопредилить шаблон вывода категорий(материалов) для этой категории это сделано. Дальше шаблон ссылается на стандартный метод сортировки
    Код из шаблона:

    Код (Text):
    1.  
    2.  
    3. <div class="orderby-displaynumber">
    4.         <div class="width45 floatleft">
    5.                 <?php echo $this->orderByList['orderby']; ?>
    6.                 <?php echo $this->orderByList['manufacturer']; ?>
    7.                
    8.         </div>
    9.    
    10.         <div class="width15 floatleft display-number"><?php echo $this->vmPagination->getResultsCounter ();?><br/><?php echo $this->vmPagination->getLimitBox (); ?></div>
    11.         <div class="vm-pagination">
    12.                 <?php echo $this->vmPagination->getPagesLinks (); ?>
    13.                 <span style="float:right"><?php echo $this->vmPagination->getPagesCounter (); ?></span>
    14.         </div>
    15.  
    16.         <div class="clear"></div>
    17. </div> <!-- end of orderby-displaynumber -->
    18.  
    19.  
    вот метод на который ссылаются

    Код (Text):
    1.  
    2.  
    3.         function getOrderByList ($virtuemart_category_id = FALSE) {
    4.  
    5.                 $getArray = (JRequest::get ('get'));
    6.                 $link = '';
    7.                 $fieldLink = '';
    8.                 // remove setted variable
    9.                 unset ($getArray['globalCurrencyConverter'], $getArray['virtuemart_manufacturer_id'], $getArray['order'], $getArray['orderby']);
    10.  
    11.                 // foreach ($getArray as $key => $value )
    12.                 // $fieldLink .= '&'.$key.'='.$value;
    13.                 //vmdebug('getOrderByList',$getArray);
    14.                 foreach ($getArray as $key => $value) {
    15.                         if (is_array ($value)) {
    16.                                 foreach ($value as $k => $v) {
    17.                                         $fieldLink .= '&' . $key . '[' . $k . ']' . '=' . $v;
    18.                                 }
    19.                         }
    20.                         else {
    21.                                 if($key=='dir' or $key=='orderby') continue;
    22.                                 if(empty($value)) continue;
    23.                                 $fieldLink .= '&' . $key . '=' . $value;
    24.                         }
    25.                 }
    26.                 $fieldLink[0] = "?";
    27.                 $fieldLink = 'index.php' . $fieldLink;
    28.  
    29.                 $orderDirLink = '';
    30.                 $orderDirConf = VmConfig::get ('prd_brws_orderby_dir');
    31.                 $orderDir = JRequest::getWord ('dir', $orderDirConf);
    32.                 if ($orderDir != $orderDirConf ) {
    33.                         $orderDirLink .= '&dir=' . $orderDir;   //was '&order='
    34.                 }
    35.  
    36.                 $orderbyTxt = '';
    37.                 $orderby = JRequest::getVar ('orderby', VmConfig::get ('browse_orderby_field'));
    38.                 $orderby = $this->checkFilterOrder ($orderby);
    39.  
    40.                 $orderbyCfg = VmConfig::get ('browse_orderby_field');
    41.                 if ($orderby != $orderbyCfg) {
    42.                         $orderbyTxt = '&orderby=' . $orderby;
    43.                 }
    44.  
    45.                 $manufacturerTxt = '';
    46.                 $manufacturerLink = '';
    47.                 if (VmConfig::get ('show_manufacturers')) {
    48.  
    49.                         // manufacturer link list
    50.                         $virtuemart_manufacturer_id = JRequest::getInt ('virtuemart_manufacturer_id', '');
    51.                         if ($virtuemart_manufacturer_id != '') {
    52.                                 $manufacturerTxt = '&virtuemart_manufacturer_id=' . $virtuemart_manufacturer_id;
    53.                         }
    54.  
    55.                         // if ($mf_virtuemart_product_ids) {
    56.                         $query = 'SELECT DISTINCT l.`mf_name`,l.`virtuemart_manufacturer_id` FROM `#__virtuemart_manufacturers_' . VMLANG . '` as l';
    57.                         $query .= ' JOIN `#__virtuemart_product_manufacturers` AS pm using (`virtuemart_manufacturer_id`)';
    58.                         $query .= ' LEFT JOIN `#__virtuemart_products` as p ON p.`virtuemart_product_id` = pm.`virtuemart_product_id` ';
    59.                         $query .= ' LEFT JOIN `#__virtuemart_product_categories` as c ON c.`virtuemart_product_id` = pm.`virtuemart_product_id` ';
    60.                         $query .= ' WHERE p.`published` =1';
    61.                         if ($virtuemart_category_id) {
    62.                                                 $catscont = array();
    63.                                                 $this->untreeCat($virtuemart_category_id, $catscont);
    64.                                                 $qkat = ' AND c.`virtuemart_category_id` IN('.$virtuemart_category_id;
    65.                                                 foreach ($catscont as &$kat){
    66.                                                    $qkat .= ', '.$kat;
    67.                                                 }        
    68.                                                 $qkat .= ')';
    69.                                                 $query .= $qkat;
    70.                                         }
    71.                         $query .= ' ORDER BY l.`mf_name`';
    72.                         $this->_db->setQuery ($query);
    73.                         $manufacturers = $this->_db->loadObjectList ();
    74.                         //              vmdebug('my manufacturers',$this->_db->getQuery());
    75.                         $manufacturerLink = '';
    76.                         if (count ($manufacturers) > 0) {
    77.                                 $manufacturerLink = '<div class="orderlist">';
    78.                                 if ($virtuemart_manufacturer_id > 0) {
    79.                                         $manufacturerLink .= '<div><a title="" href="' . JRoute::_ ($fieldLink . $orderbyTxt . $orderDirLink , FALSE) . '">' . JText::_ ('COM_VIRTUEMART_SEARCH_SELECT_ALL_MANUFACTURER') . '</a></div>';
    80.                                 }
    81.                                 if (count ($manufacturers) > 1) {
    82.                                         foreach ($manufacturers as $mf) {
    83.                                                 $link = JRoute::_ ($fieldLink . '&virtuemart_manufacturer_id=' . $mf->virtuemart_manufacturer_id . $orderbyTxt . $orderDirLink,FALSE);
    84.                                                 if ($mf->virtuemart_manufacturer_id != $virtuemart_manufacturer_id) {
    85.                                                         $manufacturerLink .= '<div><a title="' . $mf->mf_name . '" href="' . $link . '">' . $mf->mf_name . '</a></div>';
    86.                                                 }
    87.                                                 else {
    88.                                                         $currentManufacturerLink = '<div class="title">' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '</div><div class="activeOrder">' . $mf->mf_name . '</div>';
    89.                                                 }
    90.                                         }
    91.                                 }
    92.                                 elseif ($virtuemart_manufacturer_id > 0) {
    93.                                         $currentManufacturerLink = '<div class="title">' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '</div><div class="activeOrder">' . $manufacturers[0]->mf_name . '</div>';
    94.                                 }
    95.                                 else {
    96.                                         $currentManufacturerLink = '<div class="title">' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '</div><div class="Order"> ' . $manufacturers[0]->mf_name . '</div>';
    97.                                 }
    98.                                 $manufacturerLink .= '</div>';
    99.                         }
    100.                         // }
    101.                 }
    102.  
    103.                 /* order by link list*/
    104.                 $orderByLink = '';
    105.                 $fields = VmConfig::get ('browse_orderby_fields');
    106.                 if (count ($fields) > 1) {
    107.                         $orderByLink = '<div class="orderlist">';
    108.                         foreach ($fields as $field) {
    109.                                 if ($field != $orderby) {
    110.  
    111.                                         $dotps = strrpos ($field, '.');
    112.                                         if ($dotps !== FALSE) {
    113.                                                 $prefix = substr ($field, 0, $dotps + 1);
    114.                                                 $fieldWithoutPrefix = substr ($field, $dotps + 1);
    115.                                                 //                              vmdebug('Found dot '.$dotps.' $prefix '.$prefix.'  $fieldWithoutPrefix '.$fieldWithoutPrefix);
    116.                                         }
    117.                                         else {
    118.                                                 $prefix = '';
    119.                                                 $fieldWithoutPrefix = $field;
    120.                                         }
    121.  
    122.                                         $text = JText::_ ('COM_VIRTUEMART_' . strtoupper ($fieldWithoutPrefix));
    123.  
    124.                                         $field = explode('.',$field);
    125.                                         if(isset($field[1])){
    126.                                                 $field = $field[1];
    127.                                         } else {
    128.                                                 $field = $field[0];
    129.                                         }
    130.                                         $link = JRoute::_ ($fieldLink . $manufacturerTxt . '&orderby=' . $field,FALSE);
    131.  
    132.                                         $orderByLink .= '<div><a title="' . $text . '" href="' . $link . '">' . $text . '</a></div>';
    133.                                 }
    134.                         }
    135.                         $orderByLink .= '</div>';
    136.                 }
    137.  
    138.  
    139.                 if($orderDir == 'ASC'){
    140.                         $orderDir = 'DESC';
    141.                 } else {
    142.                         $orderDir = 'ASC';
    143.                 }
    144.  
    145.                 if ($orderDir != $orderDirConf ) {
    146.                         $orderDirLink = '&dir=' . $orderDir;    //was '&order='
    147.                 } else {
    148.                         $orderDirLink = '';
    149.                 }
    150.  
    151.                 //$orderDirTxt = JText::_ ('COM_VIRTUEMART_SEARCH_ORDER_'.$orderDir);
    152.                 $orderDirTxt = JText::_ ('COM_VIRTUEMART_'.$orderDir);
    153.  
    154.                 $link = JRoute::_ ($fieldLink . $orderbyTxt . $orderDirLink . $manufacturerTxt,FALSE);
    155.  
    156.                 // full string list
    157.                 if ($orderby == '') {
    158.                         $orderby = $orderbyCfg;
    159.                 }
    160.                 $orderby = strtoupper ($orderby);
    161.  
    162.  
    163.                 $dotps = strrpos ($orderby, '.');
    164.                 if ($dotps !== FALSE) {
    165.                         $prefix = substr ($orderby, 0, $dotps + 1);
    166.                         $orderby = substr ($orderby, $dotps + 1);
    167.                         //                              vmdebug('Found dot '.$dotps.' $prefix '.$prefix.'  $fieldWithoutPrefix '.$fieldWithoutPrefix);
    168.                 }
    169.                 else {
    170.                         $prefix = '';
    171.                         //              $orderby = $orderby;
    172.                 }
    173.  
    174.                 $orderByList = '<div class="orderlistcontainer"><div class="title">' . JText::_ ('COM_VIRTUEMART_ORDERBY') . '</div><div class="activeOrder"><a title="' . $orderDirTxt . '" href="' . $link . '">' . JText::_ ('COM_VIRTUEMART_' . $orderby) . ' ' . $orderDirTxt . '</a></div>';
    175.                 $orderByList .= $orderByLink . '</div>';
    176.  
    177.                 $manuList = '';
    178.                 if (VmConfig::get ('show_manufacturers')) {
    179.                         if (empty ($currentManufacturerLink)) {
    180.                                 $currentManufacturerLink = '<div class="title">' . JText::_ ('COM_VIRTUEMART_PRODUCT_DETAILS_MANUFACTURER_LBL') . '</div><div class="activeOrder">' . JText::_ ('COM_VIRTUEMART_SEARCH_SELECT_MANUFACTURER') . '</div>';
    181.                         }
    182.                         $manuList = ' <div class="orderlistcontainer">' . $currentManufacturerLink;
    183.                         $manuList .= $manufacturerLink . '</div><div class="clear"></div>';
    184.  
    185.                 }
    186.  
    187.                 return array('orderby'=> $orderByList, 'manufacturer'=> $manuList);
    188.         }
    189.  
    190.  
    нужно написать маленький метод без возможности управления с админки и других параметров сортировки просто что бы он сортировал товары рендомом. помогите пожалуйста