我是opencart的新手,我想知道如何修改搜索功能以按選項或價格搜索產品。我有一個適合我的大學的項目,我需要創建這樣一個功能。Opencart按價格或按產品選項篩選產品
你能告訴我怎麼樣?我需要一個例子。
Thanx!
我是opencart的新手,我想知道如何修改搜索功能以按選項或價格搜索產品。我有一個適合我的大學的項目,我需要創建這樣一個功能。Opencart按價格或按產品選項篩選產品
你能告訴我怎麼樣?我需要一個例子。
Thanx!
我使用Opencart的1.5.3.1這個例子
您需要修改的getProducts()函數。搜索查詢看起來像這樣建在:
SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id =
p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT
JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store
p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_tag pt ON (p.product_id =
pt.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW
() AND p2s.store_id = '0' AND (LCASE(pd.name) LIKE '%large%' OR LCASE(pt.tag) LIKE
'%large%' AND pt.language_id = '1') GROUP BY p.product_id ORDER BY p.sort_order ASC, LCASE
(pd.name) ASC LIMIT 0,15
您需要的選項值說明添加到查詢以及添加參數WHERE子句:
SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id =
p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT
JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN
product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_option_value
pov ON (p.product_id = pov.product_id) LEFT JOIN option_value_description ovd ON
(pov.option_value_id = ovd.option_value_id) LEFT JOIN product_tag pt ON (p.product_id
= pt.product_id) WHERE pd.language_id = '1' AND p.status = '1' AND p.date_available <=
NOW() AND p2s.store_id = '0' AND (LCASE(pd.name) LIKE '%large%' OR LCASE(ovd.name)
LIKE '%large%' OR LCASE(pt.tag) LIKE '%large%' AND pt.language_id = '1') GROUP BY
p.product_id ORDER BY p.sort_order ASC, LCASE(pd.name) ASC LIMIT 0,15
要做到這一點,編輯目錄/model/catalog/product.php。查找線路37,38:
if (!$product_data) {
$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM
" . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1'
GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " .
DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " .
DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id)";
添加後:
//add option values to search query
$sql.= " LEFT JOIN " . DB_PREFIX . "product_option_value pov ON (p.product_id = pov.product_id)";
$sql.= " LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (pov.option_value_id = ovd.option_value_id)";
// - - - - - - - - - - - - -
查找行70:
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
將其更改爲:
$implode[] = "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'
OR LCASE(ovd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
現在搜索將「請參閱「大」,「紅」等產品選項值名稱。
要搜索的價格是非常容易,只包括在參數的WHERE子句 完全匹配使用:
"pd.price = '" . $this->db->escape(utf8_strtolower($word)) . "'
的,比方說,價格值達到一定值時,使用:
"pd.price <= '" . $this->db->escape(utf8_strtolower($word)) . "'
希望,你明白了。
現在,這是一個快速和骯髒的例子只有,打算讓你去。
我不是建議這是最終的解決方案。
您需要考慮添加新的GET變量以控制是否在搜索中包含選項和/或價格。此外,搜索價格範圍,而不是價格。添加變量以控制是否使用AND或OR運算符 - 即查找「紅色」和「XL」或兩者中的任何一個。
祝你好運。
感謝它在版本2.3.0.2中的工作 –
這不是真的,你可以顯示一個例子。它需要相當多的編碼。 OpenCart擴展存儲上有擴展可以滿足您的需求。我的建議是將其中一個分開看看它是如何完成的 –
@JayGilford以及我不能使用任何模塊,因爲我的教授有一個反plagiation軟件,所以我不能使用任何其他功能。他還購買了一些最重要的高級搜索模塊。這就是爲什麼我需要一個例子。我知道我必須修改控制器和搜索功能,但我需要了解宏觀,因爲這是我第二次使用opencart。這就是爲什麼我需要一個例子。例如,在尺寸(S,M,L,XL等)後,我必須搜索一件T恤。尺寸是一個產品選項。請幫助我:) –
那麼,我會踢那個教授到他的屁股那種項目。除非您對PHP + MySQL編程非常滿意,並且知道OpenCart相當好,否則幾乎不可能完成它......您必須知道OpenCart中的產品選項如何工作,並且它不像產品屬性... – shadyyx