Elxis CMS Forum

Ελληνικό Forum => Γενικά Θέματα για το Elxis CMS => Topic started by: giokreta on October 31, 2006, 20:59:40

Title: Συμβατά κατόπιν μετατροπής
Post by: giokreta on October 31, 2006, 20:59:40
Τα components, modules, mambots που έχουν αναπτυχθεί για το Mambo, είναι συμβατά κατόπιν μετατροπής, με το Elxis CMS. Όλα τα templates είναι απόλυτα συμβατά.

Επειδή με ενδιαφέρει πολύ αυτό τι είδους μετατροπή μπορείς να κάνεις για να δουλέψει ένα module στο elxis?
Title: Re: Συμβατά κατόπιν μετατροπής
Post by: datahell on November 01, 2006, 08:27:54
Το Elxis έχει κάποιες σημαντικές διαφορές σε σχέση με τα mambo και Joomla τις οποίες προσπαθήσαμε κατά την κατασκευή του να "κρύψουμε" όσο μπορούσαμε περισσότερο προκειμένου να "παίζουν" τα υπάρχοντα component σε αυτό όσο γίνεται καλύτερα.

Για να αναφερθώ πλήρως σε αυτά θα πρέπει να γράψω έναν αναλυτικό οδηγό προγραμματιστών πράγμα το οποίο δεν μπορεί να γίνει εδώ αλλά κάποια στιγμή θα γίνει και αυτό. Συνοπτικά μπορώ να αναφερθώ μόνο σε μερικά από αυτά.

Διαχείριση αρχείων.

Αν και δεν υπάρχει πρόβλημα στο να χρησιμοποιούμε τις κλασσικές function της php (fopen, unlink, copy, fread κλπ) το elxis επειδή έχει ενσωματωμένη υποστήριξη ftp συστίνεται να χρησιμοποιείται τις function του file manager. Επίσης με τον file manager η δουλειά σας γίνεται πιο εύκολα. Ανοίξτε τον filemanager (includes/Core/filemanager.class.php) για να τον συμβουλευτείτε.

Παραδείγματα:
δημιουργία αρχείου: $fmanager->createFile('path', 'όνομα');
διαγραφή αρχείου: $fmanager->deleteFile('path');
αλλαγή αδειών χρήσης (έστω σε 644): $fmanager->spChmod('path', '0644');
Εγγραφή σε αρχείο: $fmanager->writeFile('path', 'δεδομένα εδώ');
Λίστα αρχείων σε κατάλογο: $fmanager->listFiles('διαδρομή καταλόγου');

προσοχή: η function mosReadDirectory των mambo/joomla έχει καταργηθεί. Χρησιμοποιήστε τις listFiles και listFolders του fmanager αντί αυτής. Έτσι για recursive list:
$fmanager->listFiles('διαδρομή καταλόγου', '.', true);

SQL queries

Η χρήση function ή εντολές της mysql στα queries μπορεί να δημιουργήσει πρόβλημα. Το elxis χρησιμοποιεί το υπόστρωμα ADODB για να μπορεί να "μιλάει" με πολλές διαφορετικές βάσεις και πρέπει οι εντολές να είναι συμβατές με αυτό.

παράδειγμα:
το limit σε ένα query δεν μπαίνει μέσα στο Query.
mambo/joomla:
$query = "SELECT * FROM #__test LIMIT 5";
$database->setQuery ($query);
$rows = $database->loadObjectList();

elxis:
$query = "SELECT * FROM #__test";
$database->setQuery ($query, '#__', 5, 0);
$rows = $database->loadObjectList();

άλλο παράδειγμα:
Αν θέλουμε να κάνουμε debugging μπορούμε να γράψουμε αυτό:
$database->_resource->debug = true;

To $database->resource μας αφήνει να μιλάμε κατευθείαν με το ADODB (αν και ποτέ σχεδόν δεν χρειάζεται). Έτσι μπορούμε αν θέλουμε να γράφουμε εντολές γα εκτέλεση ενός query έτσι: $database->_resource->execute(.....);
Title: Re: Συμβατά κατόπιν μετατροπής
Post by: datahell on November 01, 2006, 08:35:23
Γλώσσα:
Το elxis στη διαχείρηση χρησιμοποιεί την κλάση adminLanguage ενώ στο δημόσιο τμήμα σταθερές. Οι σταθερές αυτές προέρχονται από το mambo αλλά κάποιες έχουν μετονομαστεί ενώ έχουν προστεθεί και νέες. Για τα XML αρχεία το elxis χρησιμοποιεί την κλάση xmlLanguage. Τα Mambo και joomla (από όσο ξέρω) δεν υποστηρίζουν πολυγλωσσία/μετάφραση στα xml αρχεία. Η μετάφραση των strings στα xml αρχεία γίνεται με την μέθεδο "εύρεσης/αντικατάσταση".

Παράδειγμα στις παραμέτρους ενός module:
<param name="cache" type="radio" default="0" label="AX_SM_ECL" description="AX_SM_ECD">
   <option value="0">AX_NO</option>
   <option value="1">AX_YES</option>
</param>

Τα AX_... μετατρέπονται στα αντιστοιχα strings της γλώσσας σας (πχ το AX_YES σε Ναι)
Title: Re: Συμβατά κατόπιν μετατροπής
Post by: eliasan on November 01, 2006, 08:45:30
Αν κάποιος θέλει να αρχίσει να μαθαίνει τα "μυστικά" και τις λεπτομέρειες των μετατροπών, προτείνω να κάνει το εξής:

Να συγκρίνει το κώδικα ενός πρόσθετου που είχε αρχικά αναπτυχθεί για το Mambo, με τον αντίστοιχο του Elxis.

Αυτός κατά τη γνώμη μου είναι ο καλύτερος τρόπος για να καταλάβει τα βασικά.

Οι βασικές διαφορές βρίσκονται:

- Στην υποστήριξη πολυγλωσσίας στο δημόσιο τμήμα και στο τμήμα της διαχείρισης
- Στην υλοποίηση της αλλαγής γλώσσας (ποιες μεταβλητές εξετάζουμε)
- Στην ενσωμάτωση των ελέγχων για τον Access Manager
- Στη τροποποίηση του τμήματος διαχείρισης ώστε να υποστηρίζει και να εμφανίζει τα χειριστήρια για την πολυγλωσσία και τις Ομάδες Χρηστών
- Την αξιοποίηση του ADODB και των συναρτήσεων του File Manager

Είμαι σίγουρος ότι ξεχνώ κάτι, γι' αυτό θεωρώ ότι η παραπάνω λίστα είναι ανοικτή σε προσθήκες
Title: Re: Συμβατά κατόπιν μετατροπής
Post by: datahell on November 01, 2006, 08:47:38
Διαχείριση πρόσβασης
Στο Elxis τα (με συγχρωρείτε για την έκφραση) ηλίθια ψεύδο-group "visitor, registered, special" (με group id 0,1,2) των mambo/joomla έχουν καταργηθεί. Κάθε χρήστης εκπροσωπείται από το πραγματικό του group (public frontend, registred, author, κλπ) με groupd id αυτό του πραγματικού group (29, 18 κλπ).

Συνεπώς η παρουσία ελέγχων όπως: $my->gid > 1 των mambo/joomla δεν έχει καμία έννοια στο elxis, είναι μάλιστα επικίνδυνη. Η πρόσβαση κάθε χρήστη μέσα σε ένα elxis site χαρακτηρίζεται από μία ακολουθία αριθμών που αποτελείται από όλα τα group id στα οποία έχει πρόσβαση. Αυτή η ακολουθια δημιουργείται από το group id της Ομάδας του και όλων των γονικών ομάδων του. Για παράδειγμα αν είμαι Author, τότε έχω πρόσβαση στα αντικείμεν απου μπορεί να δει ο author αλλά και σε αυτά που μπορούν να δουν οι registered users αλλά και σε αυτά που μπορούν να δουν οι επισκέπτες. Αν αντιστοιχήσω αυτά τα 3 με τα αντίστοιχα group id τότε προκύπτει ότι η πρόσβαση του author χαρακτηρίζεται από τα group id: 19 (author), 18 (registered) και 29 (Public FrontEnd). Βάζοντας τα στη σειρά έχουμε: 19,18,29. Αυτή η ακολουθία παράγεται αυτόματα στο elxis για κάθε χρήστη με βάση την ιεραρχία των ομάδων όπως την έχετε ορίσει στον access manager και μπορείτε να την λάβετε έτσι: $my->allowed.

Αν θελουμε να κάνουμε ένα query στη βάση ώστε να τραβήξουμε μόνο τα δεδομένα που επιτρέπεται να δει κάποιος χρήστης θα πρέπει αυτό να περιέχει κάτι σαν το ακόλουθο:

$query = "SELECT.... WHERE.... AND access IN (".$my->alllowed.") ...";
Title: Re: Συμβατά κατόπιν μετατροπής
Post by: datahell on November 01, 2006, 09:03:21
Με τη βοήθεια του ADODB μπορούμε να φτιάχνουμε εφαρμογές που να εγκαθίστανται σε οποιαδήποτε βάση δεδομένων και όχι μόνο MySQL. Η διαδικασία μάλιστα είναι πιο εύκολη ακόμα και από την συγγραφή μόνο για Mysql. Για να πετύχουμε αυτό δεν γράφουμε τα queries εντός του intall.xxx.php του component αλλά δημιουργούμε ένα xml αρχείο (schema) όπου οι εντολές σχηματισμού των πινάκων περνάνε εκεί με τρόπο κατανοητό για το ADODB.

παράδειγμα:
<?xml version="1.0"?>
<schema version="0.2">
   <table name="stargallery">
      <field name="id" type="I">
         <KEY/>
         <AUTOINCREMENT/>
      </field>
      <field name="catid" type="I">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="imgtitle" type="X"></field>
      <field name="imgauthor" type="C" size="50"></field>
      <field name="imgtext" type="X"></field>
      <field name="imgdate" type="T">
         <NOTNULL/>
         <DEFAULT value="1979-12-19 00:00:00"/>
      </field>
      <field name="imgcounter" type="I">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="imgvotes" type="I">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="imgvotesum" type="I">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="published" type="I4">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="imgfilename" type="C" size="200"></field>
      <field name="imgthumbname" type="C" size="200"></field>
      <field name="checked_out" type="I4">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="owner" type="C" size="50"></field>
      <field name="approved" type="I4">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
      <field name="useruploaded" type="I4">
         <NOTNULL/>
         <DEFAULT value="0"/>
      </field>
   </table>
</schema>

Ι σημαίνει Integer, X text, C varchar κλπ. Σημειώστε πως δεν χρειάζεται να γράφουμε #__ ή το πρόθεμα των πινάκων. Πηγαίντε στη σελίδα του adodb ή ψάξτε στο internet για αναλυτικές πληροφορίες.

Κατόπιν αυτό το xml γίνεται parse από το adodb.

Παράδειγμα:

require_once( $mosConfig_absolute_path.'/includes/adodb/adodb-xmlschema.inc.php' );

   $schema = new adoSchema( $database->_resource );
   $schema->ContinueOnError( true );
   $schema->SetPrefix( $mosConfig_dbprefix );
   $schema->ParseSchema( $schemafile );
   $schema->ExecuteSchema();

Δείτε πως είναι κατασκευασμένη η StarGallery ως παράδειγμα.