το Import/Export Tool για 1.4.93 είναι δωρεάν και μπορείς να περάσεις πολλά προϊόντα μαζεμένα
http://www.opencart.com/index.php?route ... order=DESC
η αναζήτηση λειτούργει κανονικά και εγώ έτσι τα πέρασα
αν δεν λειτούργει κάνε το επόμενο
ελληνηκη αναζητηση
Λύση - Αναζήτηση προϊόντων με Ελληνικούς χαρακτήρες
Postby tzabaman » Thu Mar 31, 2011 10:06 am
Μετά από ψάξιμο κατάφερα να λύσω το πρόβλημα της αναζήτησης προϊόντων των οποίων ο τίτλος, περιγραφή, μοντέλο κτλ περιέχει ελληνικούς χαρακτήρες. Τώρα η αναζήτηση θα φέρει όλα τα προϊοντα τα οποία ΤΑΙΡΙΑΖΟΥΝ στο keyword με το οποίο αναζητούμε, ανεξάρτητα αν αυτό είναι τονισμένο, ατόνιστο, κεφαλαίο ή μικρό (Case-Insesitive και Αccent-Insesitive).
Αρχικά να πω ότι δεν πείραξα το collation της βάσης ή του κάθε πεδίου ξεχωριστά. Είναι όλα utf8-bin.
Η αλλαγή που περιγραφω πιο κάτω αφορά το search στο front-end by keword. Οι αλλαγές μπορούν να επεκταθούν και στο search by tag front-end και στο διαχειριστικό, γενικά όπου υπάρχει search.
πχ.
- catalog/model/catalog/product.php
- function getTotalProductsByKeyword(...)
ας πάρουμε τη γραμμή που λέει:
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";
πρέπει να γίνουν 2 αλλαγές
1)
Code: Select all
strtolower($keyword)
να γίνει
Code: Select all
mb_strtolower($keyword,'UTF-8')
2) να προστεθεί (περίπου) στο τέλος της γραμμής το
Code: Select all
COLLATE utf8_general_ci
. Αυτό αλλάζει το COLLATION του πεδίου on-the-fly σε utf8_general_ci.
Άρα η γραμμή διαμορφώνεται ως εξής
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci ";
Αυτές οι 2 αλλαγές πρέπει να γίνονται μέσα στα sql ερωτήματα τα οποία ζητάνε δεδομένα από πεδία τα οποία μπορεί να περιέχουν ελληνικούς χαρακτήρες, πχ name, descpription κτλ.
Οι αλλαγές αυτές πρέπει να γίνουν σε αρκετα σημεία μέσα στο αρχείο που αναφέρω πιο πάνω και το on-the-fly conversion του πεδίου να προστίθεται μετα από κάθε αναφορά πεδίου στο ερώτημα.
δηλαδή...
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%' OR LCASE(pd.description) LIKE '%" . $this->db->escape(strtolower($keyword)) . "%'";
πρέπει να γίνει
Code: Select all
$sql .= " AND (LCASE(pd.name) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci OR LCASE(pd.description) LIKE '%" . $this->db->escape(mb_strtolower($keyword,'UTF-8')) . "%' COLLATE utf8_general_ci";