Post by People's Code » Wed Jan 16, 2013 10:42 pm

Αυτό το ποστ έχει συμπτυγμένες τις πληροφορίες σχετικά με τη ρύθμιση Ελληνικού timezone για το Opencart που αναπτύχθηκαν σε αυτό το thread.

Πρώτα μια μικρή ανάλυση για να γίνει κατανοητό ποιο είναι το πρόβλημα:
Η ρύθμιση Ελληνικού timezone εξυπηρετεί στο να εμφανίζονται με Ελληνική ώρα οι συναλλαγές και οποιεσδήποτε μεταβολές έχουν να κάνουν με χρόνο που υπολογίζεται από την εφαρμογή ή καταγράφεται στη βάση δεδομένων.

Όσοι χρήστες έχουν Dedicated ή VPS server έχουν τη δυνατότητα να ρυθμίσουν γενικά το timezone του server τους από το php.ini για τη PHP και από το my.cnf για τη MySql.

Αν κάποιος έχει Shared Hosting, δεν έχει δυνατότητα τροποποίησης στα αρχεία php.ini και my.cnf γιατί μόνο ο διαχειριστής του server μπορεί να τα τροποποιήσει. Έτσι αν ο server βρίσκεται εκτός Ελλάδας, θα έχει εκ των πραγμάτων ρυθμισμένο timezone της περιοχής που βρίσκεται.

Σε Shared Hosting όσον αφορά τη PHP, υπάρχει η δυνατότητα να αλλάξουμε τη συμπεριφορά του Server προσθέτοντας διάφορες ρυθμίσεις σε ένα αρχείο .htaccess που υπερισχύουν των εντολών του php.ini τοπικά μόνο για το συγκεκριμένο folder που βρίσκεται το .htaccess και για τα subfolders που περιέχει. Στα subfolders μπορούν να υπάρχουν και άλλα αρχεία .htaccess που θα υπερισχύουν των προηγούμενων.

Δυστυχώς δεν υπάρχει δυνατότητα να χρησιμοποιήσουμε .htaccess για να παρακάμψουμε ρυθμίσεις του my.cnf για τη MySQL και επειδή στο Opencart οι χρονικές καταγραφές γίνονται με functions της Mysql πχ NOW(), αυτές καταγράφονται αναγκαστικά με το λάθος timezone του server. Η μόνη λύση για να δώσουμε εντολή αλλαγής του timezone, είναι μέσα από την εφαρμογή, κάθε φορά που υπάρχει σύνδεση με τη βάση δεδομένων.

Με τις παρακάτω αλλαγές μπορούμε να έχουμε Ελληνικό timezone για PHP και MySQL:

Για τη PHP μπορούμε να το κάνουμε με δύο τρόπους:
Τρόπος Α
Μέσα στο φάκελο που βρίσκεται το Opencart, φτιάχνουμε ένα αρχείο text και το ονομάζουμε .htaccess
(Αν χρησιμοποιούμε ήδη το .htaccess για SEO του Opencart, χρησιμοποιούμε αυτό και δεν φτιάχνουμε άλλο)

Προσθέτουμε αυτό στην αρχή του .htaccess

Code: Select all

SetEnv TZ Europe/Athens
Για να διαπιστώσουμε αν η αλλαγή μας λειτούργησε,
στο αρχείο admin/view/template/common/header.tpl μετα το <body> προσθέτουμε αυτό:

Code: Select all

<?php echo date('H:i:s'); ?>
Αν στο backend πάνω αριστερά δούμε Ελληνική ώρα, σημαίνει ότι το .htaccess λειτουργεί και διαγράφουμε το προηγούμενο κώδικα από το header.tpl

Τρόπος Β
Αν υπάρχει κάποιο πρόβλημα πχ Error 500 κλπ, μπορούμε να κάνουμε την ίδια ρύθμιση προσθέτοντας το παρακάτω κώδικα στο αρχείο system/startup.php
Στη γραμμή 48 αντικαθιστάμε το:

Code: Select all

date_default_timezone_set('UTC');
με αυτό:

Code: Select all

date_default_timezone_set('Europe/Athens');
Για τη MySQL:
Στο system/database/mysql.php ,πριν τη γραμμή 14:

Code: Select all

mysql_query("SET NAMES 'utf8'", $this->link);
Προσθέτουμε στη γραμμή 13 αυτό:

Code: Select all

mysql_query("SET time_zone = 'Europe/Athens'", $this->link);
Πλέον το Opencart θα εμφανίζει Ελληνική ώρα παντού. (Αν υπάρχουν παλιότερες καταχωρήσεις στη βάση, αυτές θα εξακολουθούν να είναι στο παλιό timezone)

PeoplesCode.com
Επίσημος Αντιπρόσωπος OpenCart | Extensions - Φιλοξενία - Αναβάθμιση - Τεχνική Υποστήριξη OpenCart
Opencart-Hellas.gr - Η Ελληνική κοινότητα του Opencart
Πλήρης Ελληνική μετάφραση OpenCart


User avatar
Active Member

Posts

Joined
Fri Jul 27, 2012 5:30 am
Location - Hellas

Post by Louis7777 » Tue Jan 28, 2014 9:04 pm

Το δοκίμασα τοπικά στο XAMPP (MySQL 5.5.34, PHP 5.4.22).

Εμένα μου εμφανίζει λανθασμένη ώρα. Είναι μία ώρα πριν. Κάποιος εύκολος τρόπος για να υπολογίζεται και η χειμερινή/θερινή ώρα;

Βρήκα εδώ μια λύση αλλά είναι κάπως παλιό το ποστ: Setting Local Timezone values in database

New member

Posts

Joined
Fri Oct 25, 2013 9:10 am

Post by People's Code » Tue Jan 28, 2014 9:26 pm

Στο XAMPP έχει οριστεί default timezone στο php.ini date.timezone = Europe/Berlin (Γι' αυτό και η διαφορά μίας ώρας)

Μπορείς να το λύσεις με 2 τρόπους
α) Να ανοίξεις το php.ini και να το κάνεις date.timezone = Europe/Athens
β) ή στο system/startup.php
το

Code: Select all

if (!ini_get('date.timezone')) {
	date_default_timezone_set('UTC');
}
κάντο

Code: Select all

// if (!ini_get('date.timezone')) {
	    date_default_timezone_set('Europe/Athens');
// }

PeoplesCode.com
Επίσημος Αντιπρόσωπος OpenCart | Extensions - Φιλοξενία - Αναβάθμιση - Τεχνική Υποστήριξη OpenCart
Opencart-Hellas.gr - Η Ελληνική κοινότητα του Opencart
Πλήρης Ελληνική μετάφραση OpenCart


User avatar
Active Member

Posts

Joined
Fri Jul 27, 2012 5:30 am
Location - Hellas

Post by Louis7777 » Tue Jan 28, 2014 9:50 pm

Αυτό ήταν. Ευχαριστώ :)

New member

Posts

Joined
Fri Oct 25, 2013 9:10 am
Who is online

Users browsing this forum: No registered users and 2 guests