Σελίδα 1 από 1

[ΛΥΘΗΚΕ] Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 25 Οκτ 2021, 21:15
από agathon
Καλησπέρα στην ομάδα του Opecart-hellas

Θα ήθελα να ρωτήσω αν υπάρχει η δυνατότητα κατά την αναζήτηση ενός προϊόντος με τον κωδικό του σε περίπτωση που μεσολαβεί παύλα ανάμεσα στα νούμερα να κάνει match η αναζήτηση και να το εμφανίζει.
Για παράδειγμα έχω εναν κωδικό
"10-101" όταν τον αναζητώ ως "10101"
χωρίς την παύλα να μπορεί να κάνει match στην αναζήτηση.

Opencart Version 2.3.0.2 - Theme Verito

Ευχαριστώ πολύ εκ των προτέρων για τον χρόνο σας

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 26 Οκτ 2021, 0:10
από Alexandra
Καλησπέρα,

Τα πάντα γίνονται και είναι θέμα χρόνου και κόστους. Αυτό που ανέφερες γίνεται με custom τροποποίηση. Παλιά είχα φτιάξει μία τέτοια custom επέκταση σε πελάτη η οποία έκανε αναζήτηση με αυτό που θες και με επιπλέον δυνατότητες όπως ταχύτητα αναζήτησης, προτεραιότητα αποτελεσμάτων σε κύρια προϊόντα έναντι των αξεσουάρ του ιδίου κατασκευαστή, κλπ. Ήταν για έκδοση 2.1.0.2 με journal 2, αλλά όπως συμβαίνει με πολλές αντίστοιχες "one-off" επεκτάσεις, δεν είχα χρόνο να την φτιάξω για νεότερες εκδόσεις. Έχεις ψάξει στο marketplace υπάρχει κάτι ανάλογο;

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 26 Οκτ 2021, 19:51
από agathon
Καλησπέρα,
Στο marketplace δεν έψαξα απλά βρήκα κάποια αποτελέσματα από τα forum του opencart.com

Αναφέρουν το path "catalog/model/catalog/product.php"

Αντικατάσταση το
$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
με αυτό
$sql .= " OR p.model LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
το δοκίμασα χωρίς αποτέλεσμα.

Αντίστοιχα στο admin search ανέφεραν για έκδοση 1.5.3.1
if (!empty($data['filter_name'])) {
$sql .= " AND LCASE(pd.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
}
Επιπλέον για το path "admin/model/catalog/product.php"

Αντικατατάσταση
$sql .= " AND LCASE(pd.name) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
με
$sql .= " AND LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'";
Οι παραπομπές από τα forum είναι εδω https://forum.opencart.com/viewtopic.php?t=67697
και https://forum.opencart.com/viewtopic.php?t=135837

Νομίζω είμαι κοντά όσο αναφορά το αρχείο και την γραμμή που πρέπει να αλλάξω αλλά κολλάω σε αυτό το σημείο και δεν μπορώ να το ολοκληρώσω.

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 27 Οκτ 2021, 13:57
από Alexandra
Καλησπέρα,

Θα έλεγα ότι δεν είναι κοντά σε αυτό που θες. Ο κώδικας που αναφέρεις μετατρέπει τους χαρακτήρες σε πεζούς. Εσύ χρειάζεσαι κάτι που είτε να ψάχνει στη βάση σε κάποιου τύπου "normalized" text ή για νεότερες εκδόσεις MySQL/MariaDB να χρησιμοποιεί regular expressions στο SELECT που να αφαιρεί τους special χαρακτήρες. Κάνε μία έρευνα για PCRE, regular expressions, regex στην έκδοση MySQL/MariaDB που χρησιμοποιείς.

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 27 Οκτ 2021, 20:44
από agathon
Καλησπέρα Αλεξάνδρα,

Κατα αρχάς ευχαριστώ για τον χρόνο σου. Επειδή δεν κατάφερα να βρώ σε ποιό σημείο υπάρχει το κομμάτι του κώδικα που κάνει αυτόν τον έλεγχο για το product model, δοκίμασα μια πιο "μπακαλίστικη" μέθοδο για να καταφέρω το ίδιο αποτέλεσμα.

Εγκατέστησα αυτό το extension https://www.opencart.com/index.php?rout ... n_id=22288
έτσι ώστε να μπορώ να παίρνω αποτέλεσμα στο search ακόμα και όταν ψάχνω με το mpn.

Στην συνέχεια πήγα στην βάση και εκτέλεσα τα εξής ερωτήματα
Κώδικας: Επιλογή όλων
UPDATE `oc_product` SET mpn=model;

UPDATE `oc_product` SET mpn= replace(mpn,'-','') where mpn LIKE '%-%';
Οπότε αντέγραψα το πεδίο model πχ. 10-101 στο πεδίο mpn ακριβώς το ίδιο 10-101 και στην συνέχεια έκανα replace στο mpn τις παύλες και αντικατέστησε το πεδίο mpn με 10101. Οπότε τώρα ψάχνοντας με τον κωδικό χωρίς παύλα παίρνω το αποτέλεσμα που θέλω.

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 28 Οκτ 2021, 9:30
από Alexandra
Καλημέρα,

Οκ, προτείνω να κάνεις μία τροποποίηση να χρησιμοποιείς το JAN που είναι περιττό σε Ελληνικά καταστήματα, γιατί το MPN χρειάζεται σε υλοποιήσεις Skroutz XML.

Re: Αναζήτηση με βάση τον κωδικό προϊόντος

Δημοσιεύτηκε: 28 Οκτ 2021, 19:10
από agathon
Καλησπέρα Αλεξάνδρα και Χρόνια πολλά,

Έχεις δίκιο το διόρθωσα, αντέγραψα όλους τους κωδικούς από το mpn στο πεδίο jan. Ευχαριστώ για τον χρόνο σου.