Πως λειτουργεί το OpenCart Ως Προεπιλογή
Κατά την επίσκεψη σε μία διεύθυνση URL του καταστήματος, αν δεν έχει οριστεί προηγουμένως cookie επιλογής γλώσσας, το OpenCart ως προεπιλεγμένη λειτουργία κατευθύνει στη γλώσσα (locale) που στέλνει ο Browser στο Accept-Language HTTP header request (HTTP_ACCEPT_LANGUAGE). Αν έχετε επιλέξει στις ρυθμίσεις του Browser σας προτιμώμενη γλώσσα Ελληνικά, θα στέλνει Ελληνικό locale στο Accept-Language HTTP header.
Έτσι για παράδειγμα με browser που έχει επιλεγμένα Αγγλικά, ο σύνδεσμος https://myshop.gr/akoustika-iphone-14 , ενώ θα έπρεπε να κατευθύνει στο Ελληνικό περιεχόμενο, κατευθύνει στο Αγγλικό.
Το ανάποδο, με browser που έχει επιλεγμένα Ελληνικά, ο σύνδεσμοςhttps://myshop.gr/iphone-14-headphones, ενώ θα έπρεπε να κατευθύνει στο Αγγλικό περιεχόμενο, κατευθύνει στο Ελληνικό.
!!! ΣΗΜΑΝΤΙΚΟ !!! Για εύκολη επίλυση του προβλήματος, αντί να εφαρμόσετε το ακόλουθο FIX, προτείνω να εγκαταστήσετε μία εξειδικευμένη επέκταση SEO (πχ GeekoDev Complete SEO Package, κλπ) που εκτός άλλων, περιλαμβάνουν μηχανισμούς κατεύθυνσης συνδέσμων στη σωστή γλώσσα.
!!! ΠΡΟΣΟΧΗ !!! To ακόλουθο FIX αφορά ΜΟΝΟ καταστήματα που δεν έχουν εγκατεστημένη εξειδικευμένη επέκταση SEO. Σε καταστήματα που έχουν επέκταση SEO, δεν χρειάζεται και δεν προτείνεται να εφαρμόζεται.
Παρακάτω ακολουθούν οδηγίες εφαρμογής τροποποιήσεων για εκδόσεις OpenCart 3.x, ώστε οι σύνδεσμοι να κατευθύνουν στη σωστή γλώσσα.
Οδηγίες Τροποποίησης
Αν δεν το έχετε κάνει ήδη, εφαρμόστε πρώτα τις οδηγίες που περιλαμβάνονται στο ακόλουθο FIX για Google Chrome SameSite Session Cookie και βεβαιωθείτε ότι έχετε έκδοση PHP μεγαλύτερη ή ίση με 7.3:
[FIX] OpenCart - Google Chrome SameSite Session Cookie
Αν έχετε ακολουθήσει οποιαδήποτε άλλη οδηγία τροποποίησης του OpenCart για τον ίδιο σκοπό, παρακαλώ αφαιρέστε την πριν εφαρμόσετε την ακόλουθη τροποποίηση.
Αν χρησιμοποιείτε κάποια επέκταση GDPR που δεν επιτρέπει την λήψη cookies πριν ο επισκέπτης πατήσει το κουμπί αποδοχής, φροντίστε τα cookies της γλώσσας "language" και "language_change", να εξαιρούνται και να επιτρέπονται αυτόματα, καθώς είναι απαραίτητα
Στο αρχείο:
catalog/controller/startup/seo_url.php
Μετά το:
$parts = explode('/', $this->request->get['_route_']);
Προσθέστε αυτό:
if (empty($this->request->cookie['language_change']) && !empty($parts[0])) {
$query = $this->db->query("SELECT language_id FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($parts[0]) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
if ($query->num_rows > 0) {
$languages = $this->model_localisation_language->getLanguages();
$language_codes = array_flip(array_column($languages, 'language_id', 'code'));
$this->config->set('config_language_id', $query->row['language_id']);
$this->config->set('config_language', $language_codes[$query->row['language_id']]);
$this->session->data['language'] = $language_codes[$query->row['language_id']];
setcookie('language', $language_codes[$query->row['language_id']], array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));
}
} else {
setcookie('language_change', null, -1, '/');
}
Στο αρχείο:
catalog/controller/common/language.php
Μετά το:
if (isset($this->request->post['code'])) {
Προσθέστε αυτό:
setcookie('language_change', $this->request->post['code'], array('expires' => time() + 60 * 60 * 24 * 30, 'path' => '/', 'domain' => ini_get('session.cookie_domain'), 'samesite' => 'None', 'secure' => true, 'httponly' => true));
Από τη διαχείριση, στη διαδρομή Επεκτάσεις > Τροποποιήσεις > πατήστε το μπλε κουμπί "Ανανέωση" για να ανανεωθεί η Cache των τροποποιήσεων.
Προεπιλογή locale (Προαιρετικό)
Προαιρετικά, αν θέλετε να εμφανίζεται συγκεκριμένη γλώσσα κατά την επίσκεψη σελίδων χωρίς SEO URL όπως για παράδειγμα η Αρχική σελίδα πριν ανατεθεί cookie γλώσσας, κάντε το ακόλουθο:
Στο αρχείο catalog/controller/startup/startup.php
Το :
// Language
$code = '';
Για προεπιλεγμένη γλώσσα τα Ελληνικά κάντε το:
$code = 'el-gr';
Για προεπιλεγμένη γλώσσα τα Αγγλικά κάντε το:
$code = 'en-gb';
Για οποιαδήποτε άλλη εγκατεστημένη γλώσσα, βρείτε το locale της και δηλώστε το αντίστοιχα.
OpenCart-Hellas.gr - Administrator & Founder
PeoplesCode.com - Επίσημος Αντιπρόσωπος OpenCart | Extensions - Φιλοξενία - Αναβάθμιση - Μεταφορά - Τεχνική Υποστήριξη OpenCart
Ελληνική μετάφραση & Επεκτάσεις OpenCart