OpenCart-Hellas 

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

Θέματα που αφορούν τη γενικότερη λειτουργία του Opencart.
#149
Καλημέρα,

Opencart: v.1.5.6.1 (δεν έχω πειράξει core files παρά μόνο με vQmod)
Theme: Journal v.2.1.2 (http://themeforest.net/item/journal-pre ... me/4260361)
Apache: v.2.2.26
MySQL: v.5.5.36
php: v.5.4.22

Προσπαθώ να αναθέσω το module "Category" στο
Layout: Product
Position: Column Right (δεν έχει και πολύ σημασία)

Η ανάθεση δουλεύει σε όλα τα Layouts (Home, Information, Manufacturer κτλ) εκτός από το Product.
Έφτιαξα λοιπόν ένα καινούργιο Layout που το ονόμασα CustomProduct και είναι ακριβώς το ίδιο με το Product Layout που "έρχεται" με την εγκατάσταση του opencart.

Όταν λοιπόν χρησιμοποιώ...
Κώδικας: Επιλογή όλων
Catalog -> Products -> Edit-A-Product -> Design -> Layout Override: CustomProduct
Δουλεύει μια χαρά!

Μπορείτε να μου δώσετε μερικές κατευθύνσεις για το τι πρέπει να κοιτάξω για το "χαλασμένο" μου Product Layout;

Ευχαριστώ!
#150
Καλημέρα, καλωσόρισες στην Ελληνική κοινότητα.

- Αυτή η συμπεριφορά παρατηρείται συνήθως όταν λείπει το route από το layout.
Πριν αρχίσουμε να το εξετάζουμε σε επίπεδο κώδικα, μπορείς πρώτα να ελέγξεις ότι στο
System->Design->Layouts->Product [edit] υπάρχει δηλωμένο route με την ακόλουθη τιμή;
Κώδικας: Επιλογή όλων
product/product
- Αν το παραπάνω είναι σωστά δηλωμένο θα πρότεινα σε αυτό το στάδιο να αφαιρέσεις προσωρινά ένα ένα τα vQmods σου για να ελέγξεις αν οφείλεται σε κάποιο από αυτά το πρόβλημα.

- Αν αφού αφαιρέσεις όλα τα vQmods και το πρόβλημα εξακολουθεί να υφίσταται, άνοιξε το controller του αρχείου θέσης. Επειδή αναφέρθηκες στη Δεξιά θέση άνοιξε το catalog/controller/common/column_right.php και στη γραμμή 38 πρόσθεσε
Κώδικας: Επιλογή όλων
echo $layout_id;

- Άνοιξε τη σελίδα ενός προϊόντος και διασταύρωσε το νούμερο που θα εμφανίσει με τα id's στο table "oc_layout" καθώς και τα id's των layouts που υπάρχουν στο table oc_setting στο value του key "category_module". Αν δεν έχεις κάνει προσθαφαιρέσεις στα layouts διαγράφοντας τα defaults, το νούμερο που θα πρέπει να εμφανίσει είναι το 2 που είναι και το id του layout "Product".

Έλεγξε αρχικά αυτά και αν δεν βρεθεί η αιτία το εξετάζουμε εκτενέστερα.
#152
Ακολουθώντας τα βήματα που προτείνεις, έφτασα και στο σημείο...
Opencart-Hellas έγραψε:Επειδή αναφέρθηκες στη Δεξιά θέση άνοιξε το catalog/controller/common/column_right.php και στη γραμμή 38 πρόσθεσε
Κώδικας: Επιλογή όλων
echo $layout_id;

- Άνοιξε τη σελίδα ενός προϊόντος και διασταύρωσε το νούμερο που θα εμφανίσει με τα id's στο table "oc_layout" καθώς και τα id's των layouts που υπάρχουν στο table oc_setting στο value του key "category_module". Αν δεν έχεις κάνει προσθαφαιρέσεις στα layouts διαγράφοντας τα defaults, το νούμερο που θα πρέπει να εμφανίσει είναι το 2 που είναι και το id του layout "Product".
εδώ λοιπόν πιάσαμε "τον ποντικό"! Το id που μου επιστρέφει είναι το 4 (Default Layout).

Πως στο καλό το έκανα αυτό?!?!
#153
Καλημέρα
εδώ λοιπόν πιάσαμε "τον ποντικό"! Το id που μου επιστρέφει είναι το 4 (Default Layout).

Πως στο καλό το έκανα αυτό?!?!
Δεν το έκανες εσύ. Πρόκειται για το προεπιλεγμένο layout που εφαρμόζεται σε περίπτωση που δεν έχει ανατεθεί κάποιο άλλο layout σε ένα route ή σε μία σελίδα. Αυτό το layout ορίζεται ως default κατά την εγκατάσταση και μπορείς να το δεις αν πας στα Settings->[tab]Store->Default Layout.

Ο λόγος που τελικά το $layout_id εμφανίζει ως τιμή το default layout, είναι διότι για κάποιον λόγο στο controller του αρχείου θέσης δεν μπορούν να βρεθούν τα layouts που έχεις ορίσει εσύ.

Για τη σελίδα product που σε ενδιαφέρει, στο controller column_right.php αρχικά εξετάζεται αν υπάρχει κάποιο layout override
Κώδικας: Επιλογή όλων
		if ($route == 'product/product' && isset($this->request->get['product_id'])) {
			$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
		}
Αν δεν βρει κάποιο layout override, ελέγχει το route της σελίδας και φορτώνει τα modules για αυτό το route
Κώδικας: Επιλογή όλων
		if (!$layout_id) {
			$layout_id = $this->model_design_layout->getLayout($route);
		}
Επειδή λοιπόν δεν βρήκε για κάποιον λόγο το route, εφάρμοσε το γενικό layout από τις ρυθμίσεις του καταστήματος.
Κώδικας: Επιλογή όλων
	if (!$layout_id) {
			$layout_id = $this->config->get('config_layout_id');
		}
- Έλεγξε αν κάποια παρέμβαση που έχεις κάνει τροποποιεί το route ή την class ModelDesignLayout στο catalog/model/design/layout.php. Επίσης απενεργοποίησε προσωρινά το .htaccess.
- Αν δεν βρεθεί το πρόβλημα, πόσταρε το περιεχόμενο της στήλης value του key "category_module" από το table oc_setting να δω τι έχει οριστεί για το Category module.
#154
Opencart-Hellas έγραψε:- Έλεγξε αν κάποια παρέμβαση που έχεις κάνει τροποποιεί το route ή την class ModelDesignLayout στο catalog/model/design/layout.php. Επίσης απενεργοποίησε προσωρινά το .htaccess.
Δεν έχει γίνει καμία παρέμβαση στην class ModelDesignLayout στο catalog/model/design/layout.php (εννοώ με vQmod, γιατί αλλαγές σε αρχεία δεν έχουν γίνει "καρφωτά").

Επειδή έχω "ψιλο"-μπερδευτεί, σε ποιο route πρέπει να δω αν έχω κάνει τροποποίηση;
Opencart-Hellas έγραψε:- Αν δεν βρεθεί το πρόβλημα, πόσταρε το περιεχόμενο της στήλης value του key "category_module" από το table oc_setting να δω τι έχει οριστεί για το Category module.
Το περιεχόμενο της στήλης value του key "category_module" από το table oc_setting είναι το ακόλουθο...
Κώδικας: Επιλογή όλων
a:1:{i:0;a:4:{s:9:"layout_id";s:1:"2";s:8:"position";s:12:"column_right";s:6:"status";s:1:"1";s:10:"sort_order";s:1:"1";}}
#155
Καλησπέρα

Σύμφωνα με τα δεδομένα της στήλης value του key "category_module", το module θα έπρεπε να εμφανίζεται κανονικά στη σελίδα του προϊόντος δεξιά.
Επειδή έχω "ψιλο"-μπερδευτεί, σε ποιο route πρέπει να δω αν έχω κάνει τροποποίηση;
Το route εμφανίζεται στο URL της σελίδας μετά το index.php πχ route=common/home ή route=product/product κλπ

Η αιτία που το controller column_right.php δηλώνει ως έσχατη επιλογή το default layout είναι γιατί δεν βρίσκει κάποιο route πχ product/product στην περίπτωση που σε ενδιαφέρει.

Στο controller column_right.php στην γραμμή 8 πρόσθεσε το ακόλουθο να δούμε αν βλέπει κάποιο route και ποιο είναι αυτό στην σελίδα του προϊόντος.
Κώδικας: Επιλογή όλων
echo $this->request->get['route'] . "<br />";
Επίσης αντικατέστησε προσωρινά το ακόλουθο:
Κώδικας: Επιλογή όλων
		if (!$layout_id) {
			$layout_id = $this->model_design_layout->getLayout($route);
		}
Με αυτό:
Κώδικας: Επιλογή όλων
echo $layout_id ? " Found layout_id " : " Not Found layout_id";
		if (!$layout_id) {
			$layout_id = $this->model_design_layout->getLayout($route);
echo "<br />Generic layout<br /> ";
		}
echo "Get Layout: " . $this->model_design_layout->getLayout($route);
Μετά πήγαινε στη σελίδα του προϊόντος. Αν όλα λειτουργούν σωστά θα πρέπει να σου εμφανίσει το παρακάτω, αλλιώς πόσταρε μου τι άλλο εμφάνισε.
product/product (βρήκε το σωστό route)
Not Found layout_id (δεν υπάρχει layout ovverride και δεν έχει δηλωθεί layout id πριν από εκεί που θέλουμε να το ψάξει)
Module's Generic layout (έτρεξε το σωστό condition για να βρει το layout του module)
Get Layout: 2 (ακόμα και αν δεν τρέξει το παραπάνω να δούμε αν υπάρχει πρόβλημα με το class ModelDesignLayout)
Επίσης πες μου αν το theme σου αντικαθιστά core files και αν προσθέτει κάποιο vqmod. Αν το κάνει, δοκίμασε να επαναφέρεις προσωρινά τα original αρχεία και από τα Settings να γυρίσεις το theme σου στο default για να ελέγξεις αν εκεί λειτουργούν σωστά τα layouts.
#156
Ιδού τα αποτελέσματα...
Κώδικας: Επιλογή όλων
product/product
Found layout_id
Get Layout: 2
Απλά να σου θυμήσω ότι το "Category Module" το έχω τοποθετήσει σε όλα τα Layouts (Home, Information, Manufacturer κ.τ.λ.) εκτός από το Product.

Το theme Journal v.2.1.2 (http://themeforest.net/item/journal-pre ... me/4260361) δεν αντικαθιστά core files και ναι προσθέτει κάποια vqmod!

Δυστυχώς ούτε με το Default theme λειτουργεί!

Μιλάμε για "αρουραίο" όχι απλώς "ποντικό"!
#157
Οκ,
Απλά να σου θυμήσω ότι το "Category Module" το έχω τοποθετήσει σε όλα τα Layouts (Home, Information, Manufacturer κ.τ.λ.) εκτός από το Product.
Το θυμάμαι ότι το έγραψες αλλά σύμφωνα με τις ρυθμίσεις του module Category που έστειλες προηγουμένως, το έχεις τοποθετήσει μόνο στο layout "Product". Θα έπρεπε λοιπόν να εμφανίζονται οι κατηγορίες μόνο στη σελίδα του προϊόντος. (οπουδήποτε αλλού εμφανίζονται οι κατηγορίες είναι με layout override)
Κώδικας: Επιλογή όλων
    a:1:{i:0;a:4:{s:9:"layout_id";s:1:"2";s:8:"position";s:12:"column_right";s:6:"status";s:1:"1";s:10:"sort_order";s:1:"1";}}
product/product
Found layout_id
Get Layout: 2
Από τα παραπάνω αποτελέσματα φαίνεται ότι υπάρχει layout override στο προϊον που αναιρεί τις γενικές ρυθμισεις layout του module. Αν έχεις κάνει layout override σε όλα τα προϊόντα είναι λογικό να μην λειτουργεί ...
Από το phpmyadmin κάνε backup τη βάση δεδομένων σου και διέγραψε όλα τα layout overrides των προϊόντων δίνοντας το παρακάτω SQL
Κώδικας: Επιλογή όλων
TRUNCATE oc_product_to_layout;
Μετά την διαγραφή των overrides θεωρητικά το Category θα εμφανίζεται δεξιά μόνο στη σελίδα του προϊόντος όπως έχει δηλωθεί από τις ρυθμίσεις του module (και σε όποιες άλλες σελίδες πχ category, information κλπ έχουν δηλωθεί άλλα overrides).

Πολύ φοβάμαι ότι επειδή αυτό το theme που χρησιμοποιείς προσθέτει τοποθετήσεις με custom layouts, μάλλον σε μπέρδεψε σχετικά με την ορθή χρήση των layouts γενικότερα στο OpenCart.
#158
Opencart-Hellas έγραψε:Το θυμάμαι ότι το έγραψες αλλά σύμφωνα με τις ρυθμίσεις του module Category που έστειλες προηγουμένως, το έχεις τοποθετήσει μόνο στο layout "Product". Θα έπρεπε λοιπόν να εμφανίζονται οι κατηγορίες μόνο στη σελίδα του προϊόντος. (οπουδήποτε αλλού εμφανίζονται οι κατηγορίες είναι με layout override)
Αφού δοκίμασα στα άλλα layouts και είδα ότι λειτουργεί τα αφαίρεσα και άφησα μόνο το "Module: Category" στο "Layout: Product" στο "Position: Column Right", για να μην μπερδεύομαι.
Opencart-Hellas έγραψε:Από τα παραπάνω αποτελέσματα φαίνεται ότι υπάρχει layout override στο προϊον που αναιρεί τις γενικές ρυθμισεις layout του module. Αν έχεις κάνει layout override σε όλα τα προϊόντα είναι λογικό να μην λειτουργεί...
Τον πίνακα oc_product_to_layout τον είχα κοιτάξει και ήταν (είναι) άδειος, άλλα για καλό και για κακό του έκανα και
Κώδικας: Επιλογή όλων
TRUNCATE oc_product_to_layout;
Δυστυχώς όμως χωρίς αποτέλεσμα!
Opencart-Hellas έγραψε:Πολύ φοβάμαι ότι επειδή αυτό το theme που χρησιμοποιείς προσθέτει τοποθετήσεις με custom layouts, μάλλον σε μπέρδεψε σχετικά με την ορθή χρήση των layouts γενικότερα στο OpenCart.
Αρχικά ήμουν σχεδόν σίγουρος ότι έφταιγε το theme, άλλα από τη στιγμή που δοκίμασα το Default theme του Opencart (και συνεχίζει να μη λειτουργεί), μάλλον κάτι άλλο είναι!

Κάπου έχω κάνει μ******... αλλά που!?
:(
#159
Από κάπου το variable $layout_id παίρνει λάθος τιμή. Αυτό εξακριβώθηκε από την προηγούμενη δοκιμή που έκανες.
Για να εντοπίσουμε ακριβώς το σημείο χρησιμοποίησε προσωρινά το επισυναπτόμενο column_right.php για να δούμε όλα τα βήματα ελέγχου τι βγάζουν.
Το σωστό θα ήταν αυτό:
Κώδικας: Επιλογή όλων
A:0
C:
E:2
G:2
Επίσης έλεγξε στο φάκελο vqmod/vqcache αν υπάρχει τροποποιημένο το column_right.php. Αν υπάρχει εκεί πόσταρε τον κώδικα.
Πρέπει να συνδεθείτε για να δείτε τα συνημμένα αρχεία σε αυτήν τη δημοσίευση.

Καλησπέρα στην ομάδα, θέλω να ρωτήσω το εξής: Σε O[…]

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

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

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

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