Diving in the code of a CMS A short presentation in the internal code of Joomla 1
Αυτή η παρουσίαση θα προσπαθήσει να παρουσιάσει την εσωτερική αρχιτεκτονική ενός CMS (Joomla 2.5) καθώς και τις κυριότερες Web τεχνολογίες που περιλαµβάνει. Ø Σύστηµα Διαχείρισης Περιεχοµένου. Ø Εφαρµογή ανοικτού κώδικα. Ø Καλύπτει µια τεράστια γκάµα αναγκών (από προσωπική ιστοσελίδα µέχρι µεγάλα επαγγελµατικά sites). Ø Εκατοντάδες χιλιάδες εγκαταστάσεις σε όλο τον κόσµο. Ø Μεγάλες δυνατότητες εύκολης επέκτασης µε την χρήση έτοιµων extensions και δυνατότητα ανάπτυξης δικών µας εφαρµογών µε την χρήση έτοιµων βιβλιοθηκών APIs (Application Programming Interfaces). 2
} Τα Συστήµατα Διαχείρισης Περιεχοµένου (ΣΔΠ, Content Management Systems, CMS) είναι διαδικτυακές εφαρµογές που επιτρέπουν την online τροποποίηση του περιεχοµένου ενός διαδικτυακού τόπου. } Οι διαχειριστές µέσω του διαδικτύου ενηµερώνουν το περιεχόµενο στο ΣΔΠ, το οποίο είναι εγκατεστηµένο σ' ένα διακοµιστή. Οι αλλαγές αυτές γίνονται αυτόµατα διαθέσιµες πάλι µέσω του διαδικτύου, σε όλους τους επισκέπτες και χρήστες του διαδικτυακού τόπου. 3
Joomla 2 ο CMS σε µερίδιο αγοράς παγκοσµίως 4
Front-end Οι ιστοσελίδες που βλέπει ο τελικός χρήστης Back-end Διαχειριστικό κοµµάτι Ø Παραµετροποίηση Ø Αλλαγές πραγµατικού χρόνου ØΔιαχείριση περιεχοµένου 5
Joomla Front-end 6
7
Joomla Back-end 8
9
} Index.php: The entry point in every Joomla site. From here starts the execution of the front-end code } Configuration.php: It contains the Joomla class with all the configuration settings of our site } Administrator/index.php: The entry point of the back-end } Robots.txt: We use this file in order to give commands about our site to web robots 10
Το MVC προέρχεται από τις λέξεις Model-View-Controller (τα τρία µέρη από τα οποία αποτελείται αυτό το πρότυπο ανάπτυξης λογισµικού) Ο controller είναι το κοµµάτι του κώδικα που αντιδρά στις ενέργειες του χρήστη. Ελέγχει κάθε page request και ενεργοποιεί το αντίστοιχο model. To model είναι το κοµµάτι του κώδικα που είναι υπεύθυνο να αντλεί τα κατάλληλα δεδοµένα από την βάση δεδοµένων προκειµένου στην συνέχεια να εµφανιστούν στην ιστοσελίδα. Τέλος το view είναι το κοµµάτι του κώδικα που λαµβάνει τα δεδοµένα από το model και τα εµφανίζει στην ιστοσελίδα. 11
Hierarchy of Directories /libraries/joomla Files Factory.php Classes-Objects JFactory Methods getconfig Properties $config 12
If you want to follow the code of a software, command by command, either to fix it, (that is the reason for the name de-bug) or to understand it, you have to install a debugging application. This application not only enables us to run every single command of a very complicated software (like Joomla), but it also gives us the opportunity to watch every variable we want, to display software dependencies and to follow the program logic. A powerful debugging application is the Eclipse and specifically the Eclipse for PHP Developers Version: Helios (remember that Joomla is built in PHP) and can be freely downloaded from the following link: http://www.eclipse.org/downloads /packages/release/helios/sr2 13
14
15
} <?php } // Set flag that this is a parent file. } define('_jexec', 1); } define('ds', DIRECTORY_SEPARATOR); } if (file_exists(dirname( FILE ). '/defines.php')) { } include_once dirname( FILE ). '/defines.php';} } if (!defined('_jdefines')) } { } define('jpath_base', dirname( FILE )); } require_once JPATH_BASE.'/includes/defines.php'; } } } require_once JPATH_BASE.'/includes/framework.php'; 16
} // Instantiate the application. } $app = JFactory::getApplication('site'); } // Initialise the application. } $app->initialise(); } // Route the application. } $app->route(); } // Dispatch the application. } $app->dispatch(); } // Render the application. } $app->render(); } // Return the response. } echo $app; 17
} stage 1: Basic definitions and class loadings } stage 2: Instantiation } stage 3: Initialization } stage 4: Routing } stage 5: Dispatching } stage 6: Rendering } stage 7: Output 18
} Html (HyperText Markup Language) } Php (Object Oriented Language) } Mysql (open-source relational database management) } Css (Cascading Style Sheets) } Javascript jquery (Interpreted programming language) } Xml (Extensible Markup Language) Xampp (A completely free, easy to install Apache distribution containing MariaDB, PHP, and Perl) 19
20
<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="../modules/clients/css/clients.css"> <title>geocoding service</title> <style> html, body { height: 100%; margin: 0px; padding: 0px; } </style> <script> src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&hl=el&language=el®ion=el"></script> </head> <body> <?php include effectiveapps_db."/connect_inc.php"; include_once effectiveapps_db."/db_functions.php"; include_once effectiveapps_objects."/client.php"; ob_start(); session_start(); if (isset($_get["client"])) { $client = $_GET["client"]; $_SESSION['client'] = $client; ob_end_clean(); } 21
Εύχοµαι να φτάσαµε σε αυτή την διαφάνεια! (γιατί σηµαίνει κυρίως δύο πράγµατα: ØΌτι πρόλαβα να την παρουσιάσω ØΌτι το κοινό έχει αυξηµένες αντοχές) Ευχαριστώ πολύ!!! Κώστας Δρούγκας kostasdrougkas@gmail.com 22