...Στη δήλωση του component στη βάση το "iscore" πρέπει να είναι 0 σε third party components. Μόνο τα ενσωματωμένα component στο Elxis έχουν iscore = 1. INSERT INTO `elx_components` (`id`, `name`, `component`, `route`, `iscore`, `params`) VALUES (NULL, 'Name Street', 'com_namestreet', NULL, 0, NULL);Επίσης όταν κάνεις insert την τιμή του primary key του πίνακα (εδώ id) δεν την ορίζεις καρφωτά αλλά την βάζεις NULL ώστε να την πάρει αυτόματα αφού το πεδίο είναι auto increment. Το ίδιο λάθος το έχεις κάνει και στο elx_components και στο elx_acl.
Ο φάκελος "plugins" δεν χρειάζεται, είναι μόνο για το component content. Οι φάκελοι css, js, images είναι κατα βούληση, μπορείς να κάνεις ότι δομή θέλεις εσύ. Οι "υποχρεωτικοί" (στην πραγματικότητα δεν υπάρχεουν υποχρεωτικοί φάκελοι) είναι τρεις: controllers, models, views. Οι controllers περιέχουν την λογική (εσωτερικός php κώδικας), τα models την άντληση των δεδομένων (από την βάση, κάποιο άρχείο ή άλλη πηγή) και τα view εμφανίζουν την τελική html που βλέπουμε στον browser.
Στο ACL έβαλες permissions που είναι ειδικά για το component content και μόνο. Αυτά να τα σβήσεις. Τα υποχρεωτικά permissions σε ένα component είναι view και manage. Το view δηλώνει ποιος μπορεί να δει το component στο δημόσιο τμήμα και το manage ποιος μπορεί να το διαχειριστεί/δει στην διαχείριση. Οι συνήθεις τιμές για το view είναι minlevel=0, gid=0, uid=0, aclvalue=1 που σημαίνει ότι μπορούν να το δουν όλοι. Οι συνήθεις τιμές για το manage είναι minlevel=70, gid=0, uid=0, aclvalue=1 που σημαίνει ότι μπορούν να το δουν στη διαχείριση όσοι έχουν επίπεδο πρόσβασης από 70 και πάνω (managers και administrators). Μπορείς να προσθέσεις επιπλέον permissions (ότι θες εσύ) ανάλογα του component και του τι κάνει.
H καρδιά ενός component είναι ο router του (αρχείο namestreet.php) στον οποία αναλύεις τα segments (τμήματα) της url που ζητήθηκε και φορτώνεις τα αντίστοιχα Controller Model View και εκτελείς το task (συνάρτηση) που επιλεγμένου controller. Στο αρχείο router υπάρχει μία κλάση με όνομα {component}Router η οποία επεκτείνει την κλάση elxisRouter του πυρήνα του Elxis.class namestreetRouter extends elxisRouter {Μέσα σε αυτή την κλάση πρέπει να υπάρχει μία public μέθοδος** με όνομα route. Αυτή είναι που καλεί το Elxis για να τρέξει το component σου. public function route() {...}
Ο τρόπος που σκέφτεσε κάνει τους developer να πηδάνε από τα παράθυρα Έγραψες πολλά πανάθεμά σε, τι να πρωτοσχολιάσω;
- Τα plugins είναι επεκτάσεις του content, δεν έχουν νόημα πουθενά αλλού.- Στο acl ΜΟΝΟ αυτά τα δύο που σου είπα (view, manage).
- Αν έχεις μόνο έναν controller δεν σου χρειάζεται το "base". Το "base" το χρησιμοποιείς όταν θες να έχεις συναρτήσεις κοινές σε όλους τους controller/models/views και θες το κάθε από αυτά να επεκτείνει το base.
- Η σκέψη ότι χρησιμοποιώ ένα component που έχει editor είναι αδιάφορη. Δεν χρειάζεται να κάνεις τίποτα απολύτως για τον editor, το κάνει μόνο του το Elxis. Ο editor φορτώνει μόνο με μία δήλωση (editor => html) σε οποιοδήποτε πεδίο textarea. Σε μία φόρμα για να φτιάξουμε ένα πεδίο textarea που να φορτώνει τον editor και να είναι και πολυγλωσσικό γράφουμε: $clang = $elxis->getConfig('LANG');$cinfo = $eLang->getallinfo($clang);$trdata = array('category' => 'com_namestreet', 'element' => 'mydesc', 'elid' => (int)$row->id);$form->addMLTextarea('mydesc', $trdata, $row->mydesc, 'My description' array('cols' => 80, 'rows' => 8, 'forcedir' => $cinfo['DIR'], 'editor' => 'html', 'contentslang' => $clang));
- Οι στήλες desc_el και desc_en είναι λάθος. Το Elxis είναι πολυγλωσσικό, δεν χρειάζεται να δημιουργήσεις ένα πεδίο για κάθε γλώσσα. Βάζεις μόνο ένα πεδίο που αποθηκεύει το κείμενο στην κύρια γλώσσα και τις μεταφράσεις τις αποθηκεύει το Elxis αυτόματα στον πίνακα elx_translations.