Elxis CMS Forum
Ελληνικό Forum => Γενικά Θέματα για το Elxis CMS => Topic started by: dimitriskriti on March 31, 2010, 15:08:09
-
εχω ενα noobslide πχ 500 επι 400 σε μια σελιδα και θελω οταν πας σε αλλη σελιδα να ειναι πιο μικρο και να δειχνει διαφορετικες photo πως γινεται αυτο??
-
Με κάθε επιφύλαξη δεν το έχω δοκιμάσει άλλα μου ήρθε μια ιδέα.
Καλό είναι να πουν και τα παιδιά αν γίνεται ή όχι.
Ιδέα :
Πας στα Modules μέσα στην διαχείριση και κάνεις Αντιγραφή του IOS Noobslide module.
Δώσε ονομασία Module Διαφορετική.
Μετά όρισε από το αρχικό module σε ποιες σελίδες θα τρέχει ( Δεξιά στήλη )
Και στο αντίγραφο που έχει φτιάξει όρισε το σε διαφορετικές θέσεις από ότι το προηγούμενο ( πάλι από την δεξιά στήλη).
Εκεί στις ρυθμίσεις του αντιγράφου όρισε μικρότερο μέγεθος των φωτογραφιών.
-
Σωστόοοοοοοος ο WebGift :D
Αυτή είναι η συνιστώμενη μέθοδος για οποιοδήποτε module που θέλουμε να εμφανίζεται διαφορετικά: Αντίγραφο με διαφορετικές ρυθμίσεις παραμέτρων.
-
Ωραία γίνεται.. !
Να ναι καλά η αποδέσμευση μνήμης με την εντολή unset που χρησιμοποιείτε παντού στην πλατφόρμα διαφορετικά θα την πίναμε Δημήτρη. ;D
Καλά τα λέω Γιάννη ;
-
Να ναι καλά η αποδέσμευση μνήμης με την εντολή unset που χρησιμοποιείτε παντού στην πλατφόρμα διαφορετικά θα την πίναμε Δημήτρη. ;D
Αυτό δεν το κατάλαβα...
-
Αν δεν χρησιμοποιούσαμε την εντολή unset στα modules π.χ. στην προκειμένη περίπτωση που αποδεσμεύει την μνήμη από τον Server τότε θα μπορούσε να γίνει αυτό που πρότεινα παρακάτω στον Δημήτρη.;
Ή δεν είναι άσχετο το ένα με το άλλο. ;
-
Όχι, δεν έχει να κάνει τίποτα το unset με αυτό. Όταν φορτώνεται κάθε module, είτε είναι το αρχικό είτε ένα αντίγραφό του, φορτώνεται πάντα ένα νέο δείγμα (instance) του object $params που εμπεριέχει τις παραμέτρους του εκάστοτε module (αρχικό ή αντίγραφο).
-
Αυτό το έχω! Αναφέρομαι στο γεγονός ότι π.χ. στην αρχική τρέχει το "αυθεντικό" module και σε μια δεύτερη σελίδα τρέχει το "αντίγραφό" του.
Η μετάβαση από την αρχική στην δεύτερη σελίδα δεν αποδεσμεύεται η μνήμη που χρησιμοποιεί το "αυθεντικό" module στην αρχική σελίδα και παράλληλα φορτώνεται ( με την διαδικασία που αναφέρεις παραπάνω) το "αντίγραφο" module ;
-
Κάτσε να βάλουμε τα πράγματα σε τάξη.
Κατά αρχάς δεν υπάρχει αυθεντικό ή αντίγραφο (χρησιμοποιούμε αυτή την έννοια για λόγους απλότητας). Κάθε module είναι μία εγγραφή στη βάση δεδομένων στον πίνακα elx_modules. Το καθένα από αυτά τα module αντιστοιχεί και σε κάποιο φυσικό αρχείο* (mod_.....php) αλλά μπορεί περισσότερες της μίας εγγραφής να αντιστοιχούν στο ίδιο φυσικό αρχείο.
Η διαδικασία φόρτωσης Module είναι εν συντομία η εξής:
Στο template μας έχουμε κάτι σαν αυτό: mosLoadModules('left', -2);
Η γραμμή αυτή λέει στο elxis να φορτώσει όλα τα Module που είναι ορισμένα στη θέση "left"
Τα elxis κάνει ένα query στη βάση (πίνακας elx_modules) και φορτώνει όλες τις εγγραφές που αντιστοιχούν στη θέση left.
Για κάθε μία από αυτές τις εγγραφές διαβάζει το όνομα του φυσικού αρχείο του module (mod_....php) από τη βάση δεδομένων. Με το ίδιο όνομα υπάρχει και ένα XML αρχείο. Σε κάθε εγγραφή υπάρχει και ένα κελί με το όνομα "parameters". Αυτές είναι οι τιμές των παραμέτρων του module. Το elxis κατόπιν κάνει parse το XML αρχείο του module ώστε να διαβάσει τους ορισμούς των παραμέτρων και κατόπιν "δένει" σε αυτές τις τιμές του κελιού parameters που διάβασε από τη βάση. Αυτοί οι παράμετροι γίνονται προσπελάσιμοι μέσω του object $params. Όταν το elxis κατόπιν κάνει include το php αρχείο του module το object $params είναι ήδη δημιουργημένο και έτοιμο για χρήση.
Μόλις τελειώσει το include του πρώτου module συνεχίζει με την δεύτερη εγγραφή που τράβηξε από τη βάση δεδομένων και ξαναδημιουργεί το Object $params με τον ίδιο τρόπο. Και ομοίως για όλα τα άλλα module που υπάρχουν στη θέση left.
Άρα λοιπόν το κάθε module είναι μία αυτόνομη οντότητα και οι παράμετροί του μοναδικοί. Δεν υπάρχει η έννοια του αντίγραφου και του πρωτότυπου για τον πυρήνα του elxis.
* Σημείωση: υπάρχει ένας τύπος module στον οποίο δεν αντιστοιχεί κανένα φυσικό αρχείο php αλλά μόνο ένας οδηγός XML για τις παραμέτρους (custom.xml). Αυτός είναι το "user" ή "custom" module.
-
Απλά τέλεια η περιγραφή.
Αυτό μπορεί να χρησιμοποιηθεί σαν πρόλογος σε οδηγό.
2 παρερμηνείες της έλυσα όσον αφορά των πυρήνα του Elxis.
Δεν το έθεσα όπως πρέπει προηγουμένως και υπάρχει παρερμηνεία.
Αναφερόμενος κατά κύριο λόγο στην εντολή unset που χρησιμοποιούμε στο τέλος κάθε module στο εκάστοτε αρχείο php των Modules.
Να το θέσω διαφορετικά το ερώτημα :
Αν δεν χρησιμοποιούσαμε την εντολή unset τότε θα μπορούσαμε να χρησιμοποιήσουμε το παρών module (π.χ noobslide ) και να φτιάξουμε και αντίγραφο αυτού;
-
Η εντολή unset το μόνο που κάνει είναι να "καταστρέφει" την μεταβλητή που του είπαμε να κάνει unset. Με αυτό τον τρόπο αποδεσμεύεται μνήμη.
Όταν ένα αρχείο php εκτελείται ή γίνεται include όλες οι μεταβλητές, οι σταθερές, οι ορισμοί και οι συναρτήσεις των κλάσεων, κλπ, κλπ, αποθηκεύονται στην μνήμη του server (RAM). Σε μία μεγάλη εφαρμογή όπως το elxis αυτές μπορεί να είναι εκατοντάδες ή και χιλιάδες με την κάθε μία να περιέχει σημαντικές πληροφορίες σε μέγεθος. Κάνοντας unset ότι δεν χρειαζόμαστε πλέον (ότι εκτελέστηκε ήδη) αποδεσμεύουμε κάποια ποσότητα μνήμης. Ο server αποδεσμεύει τη μνήμη από μόνος του όταν εκτελεστεί όλος ο php κώδικας αλλά για όσο διάστημα συνεχίζει να εκτελείται η php φορτώνει τα πάντα στη μνήμη. Και φανταστείτε τι γίνεται σε ένα server με δεκάδες site που το καθένα έχει δεκάδες ή και εκατοντάδες ταυτόχρονους επισκέπτες.
Το να γράφουμε με αντικειμενοστραφή προγραμματισμό (Object oriented) έχει πάρα πολλά πλεονεκτήματα ένα εκ των οποίων είναι ότι μπορούμε με ένα απλό unset να καταστρέψουμε οτιδήποτε δημιουργήσαμε κατά την διάρκεια που εκτελούνταν το Module, το component, το bot, Κλπ.
class test {
public function hello($var1) {
echo 'hello '.$var1."\n";
}
public function welcome($var2, $var3) {
echo 'welcome '.$var2.' to '.$var3."\n";
}
}
$mytest = new test();
$mytest->hello('John');
$mytest->welcome('John', 'elxis.org');
unset($mytest);
Όταν γίνει Include ένα αρχείο που περιέχει την παραπάνω κλάση η php βάζει στην μνήμη, μεταξύ των άλλων, το όνομα της κλάσης και των διαθέσιμων μεθόδων (συναρτήσεων) της και των εισόδων που λαμβάνουν. Αυτές ακόμα και αν κάνουμε unset το object $mytest που δημιουργήσαμε δεν αφαιρούνται από την μνήμη. Ωστόσο το μέγεθος που καταλαμβάνουν αυτές οι πληροφορίες είναι ασήμαντες σε σχέση με αυτές του Object $mytest που δημιουργήσαμε. Άρα καταστρέφοντας το object $mytest απελευθερώνεται ένα κομμάτι μνήμης αλλά όχι όλο. Σημείωση: τα περιεχόμενα των συναρτήσεων δεν αποθηκεύονται στη μνήμη.
Δυστυχώς δεν μπορώ να γράψω πολύ περισσότερα για αυτό το θέμα εδώ μέσα γιατί θα ξημερωθούμε.
-
Και ναι είναι αλήθεια τώρα τα ξεκαθάρισα τα πράγματα 100%.
Το χω το χω.! ;D
// τώρα το διαβάζω ξανά.
/*******************
hello John
welcome John to elxis.org
*******************/
:)