2015-05-04 3 views
1

У меня есть порядок сортировки по умолчанию для всех категорий по цене low-high (p.date_added ASC), но для конкретной категории пример «новые продукты». Я хочу, чтобы сортировка была p.date_added DESC.opencart сортировка только для определенной категории

В `каталог/контроллер/продукта/category.php у меня есть:

<?php class ControllerProductCategory extends Controller { 
public function index() { 
    $this->language->load('product/category'); 

    $this->load->model('catalog/category'); 

    $this->load->model('catalog/product'); 

    $this->load->model('tool/image'); 



    if (isset($this->request->get['filter'])) { 
     $filter = $this->request->get['filter']; 
    } else { 
     $filter = ''; 
    } 

    if (isset($this->request->get['sort'])) { 
     $sort = $this->request->get['sort']; 
    } else { 
     $sort = 'p.price'; 
    } 

    if (isset($this->request->get['order'])) { 
     $order = $this->request->get['order']; 
    } else { 
     $order = 'ASC'; 
    } 

Как я могу сделать для категории "Новые продукты" Рода p.date_added DESC?

Я пробовал:

if (isset($this->request->get['sort'])) { 
    $sort = $this->request->get['sort']; 
} else { 
    $sort = 'p.price'; 
} 

if (isset($this->request->get['sort'])) { 
    $sort = $this->request->get['sort']; 
} else (isset($category_id) && $category_id == '109') { 
    $sort = 'p.date_added'; 
} 

Но не работает.

Thank you.

ответ

0

Если вы действительно хотите жестко закодировать это в контроллере, что я не рекомендую, вы можете просто установить сортировку по умолчанию в зависимости от категории. Один из способов сделать это было бы создать массив с параметрами и ссылаться на него в логике:

$categorySorts = array(
    'default' => array('sort' => 'p.price', 'order' => 'ASC'), 
    '109'  => array('sort' => 'p.date_added', 'order' => 'DESC') 
); 

$default = $categorySorts['default']; 
if (isset($this->request->get['path'])) { 
    $parts = explode('_', (string)$this->request->get['path']); 
    $category_id = (int)array_pop($parts); 
    if (isset($categorySorts[$category_id])) { 
     $default = $categorySorts[$category_id]; 
    } 
} 

if (isset($this->request->get['sort'])) { 
    $sort = $this->request->get['sort']; 
} else { 
    $sort = $default['sort']; 
} 

if (isset($this->request->get['order'])) { 
    $order = $this->request->get['order']; 
} else { 
    $order = $default['order']; 
} 

Затем можно добавить в свой массив для других категорий в будущем, если вам так хочется:

$categorySorts = array(
    'default' => array('sort' => 'p.price', 'order' => 'ASC'), 
    '109'  => array('sort' => 'p.date_added', 'order' => 'DESC'), 
    '110'  => array('sort' => 'p.sort_order', 'order' => 'DESC'), 
    '111'  => array('sort' => 'rating', 'order' => 'DESC') 
); 

Лично я бы не спустился по этому пути. Это затруднит вашу жизнь и жизнь других разработчиков, которые могут быть прокляты необходимостью работать на этом сайте. Вместо этого я советую вам копать немного глубже и создать настройку для этого в панели администратора. Это будет намного больше работы, но в конечном итоге вы многому научитесь, и ваш сайт не станет путаницей жестко закодированных правил.

+0

Я добавил код в контроллере после линии: F (Исеть ($ this-> request-> ПОЛУЧИТЬ [ 'страницы'])) { \t \t \t $ страница = $ this-> request-> получить [ 'страница']; \t \t} else { \t \t \t $ page = 1; \t} и doesent work, он изменяет идентификатор всех категорий на сортировку по умолчанию –

+0

Вы изменили ключ массива в соответствии с идентификатором вашей категории? Это был только пример, так как я не могу догадываться, какой идентификатор категории вы используете. Поскольку вы обновили свой вопрос, я предполагаю, что это 109. – billynoah

+0

да, я отредактировал массив для моей конкретной категории –

0

Что вы должны сделать, это проверить текущий статус категории, хорошо, вы должны поместить следующий код перед первым, если:

$current_category_id = array(); 
$targeted_category_name = "new products"; 
$should_change = false; // this is a boolean telling us if the current category 
         // is what we want 
if(isset($_GET['path'])) 
{ 
    $current_category_id = explode($_GET['path']); 
} 

foreach($current_category_id as (int)$cat) 
{ 
    if($cat != 0) 
    { 
     $category_info = $this->model_catalog_category->getCategory($path_id); 
     if($category_info['name'] == $targeted_category_name) 
     { 
      $should_change = true; 
      break; // discontinue the loop 
     } 
    } 

} 

И затем, после того как вы добавили код выше, вы должны изменить sort если условие из:

if (isset($this->request->get['sort'])) { 
       $url .= '&sort=' . $this->request->get['sort']; 
      } 

To:

if (isset($this->request->get['sort']) && $should_change == false) { 
       $url .= '&sort=' . $this->request->get['sort']; 
} 
else 
{ 
    $url .= 'p.date_added'; 
} 

Хотя для того, чтобы иметь доминирование над вашим ядром и возможность легко обновлять ваш документ, вам лучше включить то, что вы пишете (конечно, увидев, что оно работает и не содержит ошибок) в модуль.

Смежные вопросы