2015-05-04 155 views
1

我對所有類別的價格低 - 高(p.date_added ASC)的默認排序順序,但對於特定類別示例「新產品」,我希望排序爲p.date_added DESCopencart僅針對特定類別的排序順序

在`目錄/控制器/產品/ 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'; 
} 

但不起作用。

謝謝。

回答

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

我加入的行後面的CONTROLER的代碼:F(isset($這 - >請求 - > GET [ '頁'])){ \t \t \t $頁= $這個 - >請求 - >得到[ '頁']; \t \t} else { \t \t \t $ page = 1; \t \t}和doesent工作,它會將所有類別的id更改爲默認排序 –

+0

您是否更改數組鍵以匹配您的類別ID?這只是一個例子,因爲我不能奇蹟般地猜出你使用的是什麼類別ID。既然你已經更新了你的問題,我會認爲它是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']; 
      } 

到:

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

儘管你的核心優勢在於能夠輕鬆更新你的opencart,但你最好把你的寫作(當然在看到它運行並且沒有bug的情況下)寫成一個模塊。