Skip to main content

Module Development

Δημιουργία module και εξήγηση λογικής MVC

Κατέβασε τον κώδικα: code.zip

https://manual.joomla.org/docs/building-extensions/modules/module-development-tutorial/

Από το Step 1 έως το 7 και το 10.

Τι είναι τα Modules

Τα modules στο Joomla είναι κομμάτια κώδικα που εμφανίζουμε σε συγκεκριμένες θέσεις που θέλουμε. Αυτά είναι τα αρχεία ενός module - κάντο unzip και φτιάξε ένα module που θα λέγεται faq δηλαδή mod_faq και όπου λέει test θα αντικαταστήσεις με faq προσέχοντας τα κεφαλαία όπου έχει είτε σε ονόματα αρχείων είτε μέσα στον κώδικα (ανοίγεις όλα τα αρχεία και όπου βλέπεις test αλλάζεις στο όνομα του module σου). Όταν το ολοκληρώσεις πας στο Joomla που έχεις εγκατεστημένο, από αριστερά Σύστημα -> Επεκτάσεις -> Εγκατάσταση και πετάς το νέο αλλαγμένο αρχείο για να γίνει εγκατάσταση.

Αν θες να φτιάξεις κάτι άλλο που έχεις σκεφτεί πες μου ώστε να το φτιάξουμε απευθείας. Το FAQ είναι ένα dropdown accordion με ερώτηση/απάντηση (συχνές ερωτήσεις).

  • Με την εγκατάσταση τα αρχεία του module τα βλέπεις στο modules/mod_faq αν λέγεται έτσι, τα αρχεία της γλώσσας του στον φάκελο languages/el-GR/ και τα media/mod_faq/.

Προσθήκη επιπλέον πεδίων στο διαχειριστικό

https://docs.joomla.org/standard_form_field_types

Στο παρακάτω κομμάτι στο xml αρχείο μπορείς να χρησιμοποιήσεις τα παραπάνω πεδία που υπάρχουν μέσα στον σύνδεσμο. Πρόσθεσε κάποια επιπλέον πεδία και θα τα δεις απευθείας στη διαχείριση του module σου από τα ενθέματα.

<fields>
<fieldset>

edw..

</fieldset>
</fields>

tmpl/default.php

Εδώ είναι η εμφάνιση του module στο frontend στη θέση που τοποθετήσαμε το module. Για να πάρουμε τις μεταβλητές που προσθέσαμε πριν στο xml αρχείο και να τις χρησιμοποιήσουμε μπορούμε γράφοντας $params->get('namemetavlitis'); και μέσα στα αυτάκια βάζουμε το name που δώσαμε στο field στο xml. Βάλε κάτι στη διαχείριση σαν τιμή και εκτύπωσέ την μπροστά να δεις ότι δουλεύει σωστά.

Χρησιμοποιώντας το field type="subform" μπορούμε να φτιάξουμε κάτι σαν αυτό για πρώτο module: https://codepen.io/theenghrajan/pen/rNWOGML

Προς το παρόν ό,τι style και script θα τα γράψουμε στο τέλος του default.php αρχείου.

 /* your frontend view code here */
$myvalue = $params->get('namemetavlitis',''); //το δεύτερο πεδίο στο get ορίζει default τιμή αν δεν βρεθεί field με αυτό το name που δώσαμε
print_r($myvalue);//print_r για εκτύπωση όταν κάνουμε δοκιμές γιατί μας εκτυπώνει ολόκληρη τη μεταβλητή ακόμα και αν είναι πίνακας όπως παρακάτω

$faq = $params->get('namesubform');//για πεδία subform τα παίρνουμε με το name
/* για subform */
foreach($faq as $aq){
print_r($aq);//παρατηρούμε ότι είναι ως object οπότε πρόσβαση στις τιμές του έχουμε με το -> δηλαδή $aq->

}


<style>
/* Your css here */

</style>

<script>
/* Your javascript here */

</script>

Φόρτωση αρχείων CSS / JS

  //Call external Files
$app = Factory::getApplication(); // ή $this->app
$doc = $app->getDocument();

$wa = $doc->getWebAssetManager();

// ΤΡΟΠΟΣ 1 χωρίς δήλωση asset name ώστε να μη ξαναφορτωθεί
$doc->addScript($url);
// Add Javascript
$doc->addScriptDeclaration('
window.event("domready", function() {
alert("An inline JavaScript Declaration");
});
');

$doc->addStyleDeclaration('
body{display:none;}
');

// ΤΡΟΠΟΣ 2
$wa->registerAndUseScript('boostrap', 'boostrap.min.js');
$wa->registerAndUseStyle('boostrap', 'boostrap.min.css');

$wa = $this->app->getDocument()->getWebAssetManager();

$wa->addInlineStyle('body{display:none}');
$wa->addInlineScript('body{display:none}');

Μεταφορά CSS σε εξωτερικό αρχείο

Αυτό που έχεις μέσα στο <style> στο default.php αρχείο σου να το βάλεις σε ένα φάκελο assets/css/general.css και να το καλέσεις πάνω πάνω στο default.php αρχείο σου.

$app = Factory::getApplication();
$doc = $app->getDocument();

//1ος τρόπος
$doc->addStyleSheet($css_url);

//2ος τρόπος
$wa = $doc->getWebAssetManager();
$wa->registerAndUseStyle('general_css', $css_url);

Όπου $css_url θα έχει τη τιμή 'modules/mod_social/assets/css/general.css' - στο general.css θα έχεις ό,τι γράφει το <style>.

Με τον 2ο τρόπο το κάνεις και register και αν χρειαστεί να ξαναφορτώσουμε το αρχείο δεύτερη ή τρίτη φορά και έχει ήδη φορτωθεί, θα αποφύγει το Joomla να το φορτώσει. Π.χ. αν έχουμε το module σε πολλά σημεία πολλές φορές στην ίδια σελίδα. Και οι δύο τρόποι είναι σωστοί.