Posted in

Cs-Cart Shop Feed

UPDATE 13/10/14: Πολύ κοντά; την έκδοση 12/10/14 δεν την παίζουμε! Παίζουμε αυτή, ένας ακόμη βαθμός ελευθερίας! Υπάρχουν κατάλογοι που χρησιμοποιούν px το αρχείο του skroutz, αλλά ο πελάτης θέλει να έχει διαφορετικές εξαιρέσεις για τον καθένα. Τώρα μπορεί ο χρήστης να ορίζει να feed που θα παράγωνται. (Προιοντα->Shopfeed->manage) Πχ το feed1 με exporter skroutz και όνομα αρχείου feed1, feed2 με με exporter skroutz και όνομα αρχείου feed2 και έτσι μπορεί να όριζει εξαιρέσεις χωριστά για το κάθε αρχείο. Θα γράψω τις επιπλέον οδηγίες σύντομα.
Για αναβάθμιση τρέχουμε τα sql queries:

ALTER TABLE cscart_products CHANGE COLUMN `exclude_from_shopfeed` `exclude_from_shopfeed` TEXT CHARACTER SET 'latin1' NOT NULL ;
ALTER TABLE cscart_categories CHANGE COLUMN `exclude_from_shopfeed` `exclude_from_shopfeed` TEXT CHARACTER SET 'latin1' NOT NULL ;
UPDATE cscart_products SET exclude_from_shopfeed='';
UPDATE cscart_categories SET exclude_from_shopfeed='';
CREATE TABLE `cscart_shopFeed_feeds` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `feed` varchar(10) NOT NULL,
  `exporter` varchar(20) NOT NULL,
  `filename` varchar(45) NOT NULL,
  `title` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

UPDATE 12/10/14: Τώρα μπορεί ο χρήστης να όρισει από ποιά feed θα εξαιρείτε η κατηγορία ή το προιον. Οχι αν απλά θα εξαιρείτε ή όχι. Αν θέλει να εξαιρείτε γενικώς, απλά επιλέγει όλα τα feed. Προσοχή! Έγιναν αλλαγές στα πεδία στην βάση, συνεπώς όπου κάνουμε αναβάθμιση για να μην χάσει ο πελάτης τις ρυθμίσεις του, ean κατασκευαστές κλπ δεν κάνουμε απεγκατάσταση και εγκετάσταση, αλλά τρέχουμε τα παρακάτω queries με το phpmyadmin:

ALTER TABLE cscart_products CHANGE COLUMN `exclude_from_shopfeed` `exclude_from_shopfeed` TEXT CHARACTER SET 'latin1' NOT NULL ;
ALTER TABLE cscart_categories CHANGE COLUMN `exclude_from_shopfeed` `exclude_from_shopfeed` TEXT CHARACTER SET 'latin1' NOT NULL ;
UPDATE cscart_products SET exclude_from_shopfeed='';
UPDATE cscart_categories SET exclude_from_shopfeed='';

UPDATE 26/07/14: Γενικές βελτιώσεις στον κώδικα. Προσθήκη σελίδας με το ιστορικό των export. Υπολογισμός του αποθέματος με τα options. Προσθήκη ρυθμίσεων για τα προιοντα που δεν έχουν απόθεμα.
UPDATE 30/06/14: Τώρα και πεδίο ΕΑΝ
UPDATE 28/06/14: Τώρα και τα μεγέθη για ρούχα, παπούτσια κλπ.
UPDATE 21/06/14: Τώρα έχει και πεδίο Κατασκευαστής!
UPDATE 13/12/13: Τώρα η ακόμα πληρέστερη έκδοση! έχει και το πεδίο MPN του skroutz.

Η πιο πλήρης έκδοση του shopFeed.

  • Η μηχανή του δουλεύει για όλες τις εκδόσεις από 2.0 και μετά.
  • Παράγει feeds για Skroutz, Ricardo, BestPrice, AzShop, Ntynomai.gr, Paidi.gr, και ότι άλλο χρειαστεί.
  • Στις τιμές λαμβάνει υπόψιν τα promotions καταλόγου.
  • Στο απόθεμα λαμβάνει υπόψιν τα combinations.
  • Addon για όλες τις ρυθμίσεις.
  • Σελίδα με το ιστορικό εκτέλεσης
  • Προσθέτει στο προιον τα πεδία EAN, MPN, manufancturer
  • Επιλογή για το χειρισμό προιοντων με απόθεμα και χωρίς
  • Επιλογή για το χειρισμό προιοντων χωρίς απόθεμα
  • Επιλογή εξαίρεσης κατηγορίας από συγκεκριμένα feed
  • Επιλογή εξαίρεσης προιοντος από συγκεκριμένα feed
  • Επιλογή εξ ορισμού διαθεσιμότητας για το κατάστημα
  • Επιλογή εξ ορισμού διαθεσιμότητας για κάθε κατηγορία
  • Επιλογή ορισμού διαθεσιμοτητας προιοντος

Μαζί με τη μηχανή εχει πλέον και addon για τις ρυθμίσεις. Μπορούμε να ορίσουμε γενική διαθεσιμότητα για όλα τα είδη και να επιλέξουμε ποια feeds θα παράγει.
Ανά κατηγορία να εξαιρέσουμε μια κατηγορία (και τις υποκατηγορίες της) από τα feed, και να ορίσουμε τη διαθεσιμότητα που θα έχουν τα προιοντα αυτής και μοιραία και των υποκατηγοριών της. Τέλος μπορούμε να κάνουμε fine tuning και να εξαιρέσουμε συγκεκριμένο προιον ή να ορίσουμε τη διαθεσιμότητα του. Τέλος μπορούμε να του ορίσουμε το λεκτικό από το option που έχει το μέγεθος (για ρουχα, παπούτσια) για να εξάγει στο αρχείου του Skroutz και το tag size.

Ρυθμίσεις του addon
shopfeed-settings

Αν δεν κάνουμε καμιά άλλη ρύθμιση θα δίνει όλα τα προιοντα Αμμεσα Διαθέσιμα. Αν παίζει ο καταστηματάρχης promotions ενεργοποιούμε εδω και τα promotions. Δεν είναι default ενεργό γιατί δεν το παίζουν όλοι και τρώει χρόνο για να δουλέψει.

“Το λεκτικό του option μεγέθους, πχ Μέγεθος (αν δεν χρησιμοποιείτε options αφήστε το κενό, είναι θέμα επιδόσεων)” αυτό είναι για καταστήματα πχ παπουτσαδικα που πρέπει να στέλνουν στο skroutz και τα νούμερα. Το option σε όλα πρέπει να έχει τον ίδιο τίτλο και αυτό τον τίτλο βάζουμε εδώ (δεν έχω άλλο τρόπο να ξέρω πιο είναι το μέγεθος).

Η επιλογή “Τα είδη που έχουν απόθεμα να τα εμφανίζει ‘Σε απόθεμα’ παρακάμπτοντας τις άλλες επιλογές:” όταν επιλεχθεί τότε όσα προιοντα έχουν αποθεμα (δηλαδή ενεργοποιημένη παρακολούθηση αποθέματος και ο καταστηματάρχης φροντίζει τα αποθέματα) τα δείχνει “Σε απόθεμα” για τα υπόλοιπα δείχνει την επιλογή που έχουμε κάνει από τις λοιπες ρυθμίσεις. Δηλαδή έδω κάνουμε ρυθμίσεις για αυτά που δεν έχουν απόθεμα.

Η επιλογή “Τα είδη που έχουν δεν έχουν απόθεμα να τα εξαιρεί από την εξαγωγή” όταν επιλεχθεί τότε όσα προιοντα ειναι ενεργά και δεν έχουν απόθεμα εξαιρούνται από την εξαγωγή.

Ρυθμίσεις κατηγορίας
shopfeed-category-edit

Εδώ μπορούμε να ορίσουμε την default διαθεσιμότητα της κατηγορίας, δουλεύει κληρονομικά την ίδια παίρνουν και όλες οι υπο-κατηγορίες τους.
Επίσης μπορούμε να ορίσουμε αν θέλουμε τα feed από τα οποία θα εξαιρείτε η κατηγορία (στη λίστα δείχνει μόνο τα feed που έχουμε ενεργοποιήσει στις ρυθμίσεις του addon).

Ρυθμίσεις προιοντος
shopfeed-product-edit

Εδώ τα πράγματα είναι απλά, έχουμε κάποια πρόσθετα πεδία, EAN, MPN και κατασκευαστή, τη ρύθμιση για τη διαθεσιμότητα του προιοντος. Επίσης μπορούμε να ορίσουμε αν θέλουμε τα feed από τα οποία θα εξαιρείτε το προιον (στη λίστα δείχνει μόνο τα feed που έχουμε ενεργοποιήσει στις ρυθμίσεις του addon).

Μαζικές εξαιρέσεις

Πλέον στη σελίδα της λίστας προιοντων προσθέτει μια στήλη ακόμη που δείχνει αν το προιον εξαιρείτε από κάποια feed. Το έχω δοκιμάσει μόνο σε 3.0.6 και 4.χ για 2.0.χ δεν ξέρω ακόμη αν δουλεύει ή θέλει κάτι.

product-list

Στις εκδόσεις 3.x και 4.χ αυτόματα προστήθενται και στο μενού στο κάτω μέρος επιλογές για μαζική εξαίρεση ή μη των επιλεγμένων εγγραφών

product-list-2

Στις εκδόσεις 2.x δεν είχε hook στο template για να προστεθούν επιλογές σε αυτό το μενού, οπότε πρέπει να γίνει ένα hack στο αρχείο skins/SKIN_NAME/admin/views/products/manage.tpl. Περίπου στη γραμμή 98 μετά από τη λίστα <li> με τις επιλογές που έχει, είμαστε μέσα στο
{capture name=”tools_list”}
<ul>
πριν το </ul> που είναι λίγες γραμμές παρακάτω προσθέτουμε τις γραμμές

{** Hook for the actions menu on the products manage page *}
{hook name="products:list_tools"}
{/hook}

ο κώδικας πρέπει να είναι τελικά κάπως έτσι

product-list-3

Ιστορικό εξαγωγών
Από το μένου: Προιόντα -> Ιστορικό shopFeed τότε εμφανίζεται η σελίδα:

shopfeed-history

Στη σελίδα με το ιστορικό του shopFeed βλέπουμε για κάθε φορά που τρέχει το shopFeed το χρονολογικό σήμαντρο, τον αριθμό των προιοντων που εξήχθησαν και τα feed που δημιουργήθηκαν.

Εγκατάσταση

Το shopFeed.php το ρίχνουμε στο φάκελο που είναι το κατάστημα ( ο φακελος shopFeed που ρίχναμε μαζί με το shopFeed.php έχει μεταφερθεί μέσα στο addon).
Τα υπόλοιπα είναι το addon που το εγκαθιστούμε όπως κάθε addon.
Μετά την εγκατάσταση ρυθμίζουμε στις ρυθμίσεις του addon ποια feeds θέλουμε να παραχθούν.
Βαζουμε σε cron job to shopFeed.php να τρέχει πχ 1 φορά τη μέρα. Δεν έχει νόημα να τρέχει πολύ τακτικά μιας και ο skroutz διαβάζει 4-5 φορές τη μέρα. Πότε το κάνει μπορούμε να το δούμε από το merchant περιβάλλον του skroutz του εκάστοτε καταστήματος.
Αν δεν δημιουργήσει το φάκελο μέσα στο κατάστημα xml_feed, τον φτιάχνουμε εμείς με το χέρι και δίνουμε δικαιώματα τουλάχιστον 775.

Μερικές φορές σε εκδόσεις 2.1 που έρχονται από αναβάθμιση από 2.0 το $cart_language δεν είναι EL όπως θα έπρεπε, αλλά είναι GR όπως έρχεται από την 2.0. Τότε πρέπει να πάμε στο shopFeed/ShopFeed.php γραμμή 31
$cart_language=’EL’
και το EL να το κάνουμε GR. Στις εκδόσεις 4.x οι κωδικοί γλώσσας είναι με lower case, δηλαδή ‘el’, ‘en’ κλπ.
Αυτό νομίζω ότι το αντιμετώπισα.

Hack για να δείχνει τη διαθεσιμότητα που επιλέξαμε για τα feed και στο κατάστημα.

Προσοχή! Για να δουλέψει πρέπει να είναι απενεργοποιημένη η παρακολούθηση αποθέματος από τις γενικές ρυθμίσεις.
Πρόσθεσα στο addon τη function shop_feed_get_product_avail_opt στο func.php (δείτε αν την έχει το δικό σας, διαφορετικά κατεβάστε νεότερη έκδοση του addon).

Το hack τώρα,
– ανοίγουμε το αρχείο skins/[to skin mou]/customer/common_templates/product_data.tpl
– κάνουμε αναζήτηση το {capture name=”product_amount_`$obj_id`”}
– το βρίσκουμε και πηγαίνουμε εκεί που τελειώνει το block αυτο, (hint: βρίσκουμε το επόμενο {/capture})
– πάνω από το {/capture} προσθέτουμε το

{* [ShopFeed] *}
{assign var="pavail_opt" value=$product.product_id|shop_feed_get_product_avail_opt}
{assign var="avail_opt" value="shopFeed_avail_opt`$pavail_opt`"}
{assign var="avail_opt" value="`$lang.$avail_opt`"}
{$avail_opt|replace:"Διαθέσιμο":$stock_word}
{* [/ShopFeed] *}

– Αποθηκεύουμε. Καθαρίζουμε cache. Τέλος.

Download
2x-3x.zip (Oct, 14, 2014)
4.x.zip (Oct, 14, 2014)

Legacy
shopFeed.zip (Dec, 13, 2013)

Add a new Exporter

Για να προσθέσουμε ένα νέο Exporter η διαδικασία είναι η εξής.
Η κλαση του Exporter πρέπει να κάνει extend την ShopFeedExportBase.
Το αρχείο της κλάσης πρέπει να είναι στο φάκελο Exporters και το όνομα του αρχείου να είναι ShopFeedExportOnomafeed.class.php.
Το όνομα της κλάσης πρέπει να είναι το ShopFeedExportOnomafeed.
Στο addons.xml προσθέτουμε στα settings για το νέο exporter

      
        Να γίνει εξαγωγή csv
        checkbox
        N
        
        
        
      

μετά πρέπει να κάνουμε απεγκατάσταση-εγκατάσταση το addon. ΠΡΟΣΟΧΗ! Για να μην χαθούν οι ρυθμίσεις σε κατηγορίες, προιοντα που έχει κάνει ο χρήστης σχολιάζουμε στο addon xml το block opt_queries.
Τα σχολία στην xml είναι όπως στην html . Κάνουμε απεγκατάσταση και εγκατάσταση του addon ώστε να διαβάσει το cs-cart το setting για το νέο feed.

Για τους απροσεκτους. Αν για παράδειγμα το feed το λένε Lady Gaga:

  • στο settings βάζουμε export_ladygaga (κανένα γράμμα κεφαλαίο),
  • το όνομα της κλάσης ShopFeedExportLadygaga (μόνο πρώτο γράμμα κεφαλαίο)
  • και το όνομα του αρχείου ShopFeedLadygaga.class.php.

Αν το feed δεν είναι xml ή θέλουμε το αρχείο να έχει άλλη επέκταση τότε στην κλάση μας ορίζουμε την protected property $fileExtension. Για παράδειγμα αν θέλουμε να είναι .csv λέμε:

  protected $fileExtension = '.csv';

Μπορεί να δειχνουν παράξενες οι συμβάσεις με τα ονόματα αλλά είναι αναγκαίες για το αυτόματο include των απαραίτητων αρχείων. Δεν αναφέραμε πουθενά ότι κάπου πρέπει να γίνει include κάτι.
Οταν τρέχει το shopFeed.php παίρνει τα ονόματα από τα feeds που έχουν ενεργό setting και με βάση αυτό φορτώνει τον κατάλληλο expoerter.

Διαφορές στον κώδικα 2.x-3.x και 4.x
Μετά τις αλλαγές την 27/7/14 η μηχανή είναι κοινή για όλες τις εκδόσεις. Δηλαδή ο φάκελος /addons/shop_feed/lib, το αρχειο /shopFeed.php είναι κοινά για όλες τις εκδόσεις. Αναγκαστικά εχει διαφορές στο addon για την 4 και μετά.