OpenCart-Hellas 

Η Ελληνική κοινότητα υποστήριξης του Opencart

Αναφορές νέων & επίλυση γνωστών bugs.
#8308
Αυτό το FIX αφορά πολυγλωσσικά καταστήματα OpenCart (με ενεργοποιημένες πάνω από μία γλώσσες) όπου προκύπτει το πρόβλημα οι απευθείας ή εξωτερικοί σύνδεσμοι από μηχανές αναζήτησης, κλπ, δεν κατευθύνουν στη σωστή γλώσσα / μετάφραση στο κατάστημα.

Πως λειτουργεί το 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 της και δηλώστε το αντίστοιχα.

Σας ευχαριστώ πολύ για την απάντηση, σκεφτείτε η ε[…]

Έλεγξε αν έχεις πολύ μεγάλα αρχεία εικόνων και αν […]

Κάνε ένα restart τον σερβερ. (βασικα την λειτουργι[…]

Vqmod and SEARCH NOT FOUND

Καλησπέρα, έχω ένα xml που βγάζει αυτό το λάθος […]

Πριν ζητήσετε βοήθεια στο φόρουμ, παρακαλούμε ελέγξτε αν υπάρχει έτοιμη λύση στο OpenCart Extension Marketplace!