Joomla Tutorials

Οδηγίες & κόλπα

Πώς να φτιάξεις μια επέκταση για το Joomla! με τη βοήθεια της Τεχνητής Νοημοσύνης

Πώς να φτιάξεις μια επέκταση για το Joomla! με τη βοήθεια της Τεχνητής Νοημοσύνης

Πριν εννέα μήνες έφτιαξα την πρώτη μου επέκταση για το Joomla!. Πλέον έχω φτιάξει επτά -απλές- επεκτάσεις με τη βοήθεια του ChatGPT και σε αυτό το άρθρο θα σου πω τί έμαθα μέσα από αυτή τη διαδικασία με τη μορφή συμβουλών, ώστε να μπορέσεις να φτιάξεις κι εσύ εύκολα τη δική σου επέκταση. 

Αν ασχολείσαι με την ανάπτυξη ιστοτόπων με το Joomla!, είτε για  λίγο καιρό είτε για χρόνια, μπορεί η κατασκευή μιας επέκτασης να σου φαίνεται βουνό. Με αυτόν το σύντομο και πρακτικό οδηγό θα ανακαλύψεις ότι με τη βοήθεια των γλωσσικών μοντέλων (LLMs) τεχνητής νοημοσύνης είναι πλέον ευκολότερο από ποτέ να κατασκευάσεις μια απλή επέκταση με βάση τις ανάγκες σου.

Επίτρεψέ μου να ξεκινήσω λέγοντας πως δεν αυτοπροσδιορίζομαι ως προγραμματιστής. Ασχολούμαι μεν επαγγελματικά με την Πληροφορική και ειδικότερα  με το web development εδώ και 20 χρόνια, αλλά οι προγραμματιστικές μου γνώσεις είναι αρκετά περιορισμένες. Γιατί το αναφέρω αυτό; Βασικά για να σε καθησυχάσω, καθώς θα ήταν λίγο υποκριτικό να λέω πόσο εύκολα μπορείς να φτιάξεις μια επέκταση για το Joomla! (αλλά και για οποιοδήποτε άλλο CMS) έχοντας τις γνώσεις ενός προγραμματιστή. 

Έχοντας ξεκαθαρίσει αυτό, βέβαια, να πω επίσης πως ασχολούμενος με το Joomla! από τότε που ονομαζόταν Mambo, είχα όλα αυτά τα χρόνια την ευκαιρία να εξοικειωθώ με τον τρόπο λειτουργίας του, τη λογική πίσω από την κατασκευή των επεκτάσεων και τους τρόπους που συνδέονται με τον πυρήνα του Joomla!, αλλά και να παρακολουθήσω με θαυμασμό την απίστευτη εξέλιξη που είχε αυτό το δημοφιλές CMS στον άξονα του χρόνου. Σίγουρα, πάντως, βοηθά πολύ το να έχεις κάποιες βασικές γνώσεις PHP, CSS, Javascript και HTML προκειμένου όχι μόνο να μπορείς να φέρεις πραγματικά στα μέτρα σου έναν ιστότοπο βασισμένο σε Joomla!, αλλά και για να μπορείς να αξιολογήσεις στοιχειωδώς μια απάντηση που θα σου προσφέρει ένα LLM όταν του κάνεις μια τεχνικής φύσεως ερώτηση. Ακόμα κι αν δεν έχεις τέτοιες γνώσεις, όμως, ευελπιστώ οι ακόλουθες συμβουλές να σου δώσουν κάποιες βασικές κατευθύνσεις για την κατασκευή της πρώτης σου επέκτασης για το Joomla!. Χωρίς άλλη καθυστέρηση, λοιπόν, πάμε να δούμε μερικές συμβουλές για την κατασκευή μιας επέκτασης με τη βοήθεια του ChatGPT.

1. Δώσε σαφείς και ξεκάθαρες οδηγίες

Αυτή είναι μια από τις βασικότερες αρχές που διέπουν γενικότερα τον κλάδο της πληροφορικής. Όπως οι απαιτήσεις ενός πελάτη χρειάζεται να τίθενται με σαφή και ξεκάθαρο τρόπο ώστε να μπορείς να υλοποιήσεις μια αποτελεσματική λύση καλύπτοντας τις ανάγκες του, έτσι και τα μεγάλα γλωσσικά μοντέλα χρειάζονται όσο το δυνατόν πιο σαφείς, ξεκάθαρες και αναλυτικές οδηγίες για να παράγουν το καλύτερο δυνατό αποτέλεσμα για αυτό που τους ζητάς. Κι αυτό είναι μια από τις μεγαλύτερες προκλήσεις: το να αποδώσεις ξεκάθαρα αυτό που έχεις στο μυαλό σου ότι χρειάζεσαι. Στην τελική, οι απαντήσεις του ChatGPT συνήθως είναι τόσο καλές όσο οι ερωτήσεις που του τέθηκαν. Δεν είναι τυχαίο που η «μηχανική προτροπών» (prompt engineering) εξελίσσεται ως κλάδος της πληροφορικής παράλληλα με την ίδια την τεχνητή νοημοσύνη, με τους επαγγελματίες «μηχανικούς προτροπών» (prompt engineers) να διατυπώνουν ακριβείς οδηγίες/προτροπές καθοδηγώντας τις πλατφόρμες AI για την εκμαίευση των επιθυμητών απαντήσεων. Συνεπώς, όσο πιο αναλυτικές είναι οι οδηγίες που θα δώσεις, τόσο αυξάνονται οι πιθανότητες να πάρεις τις σωστές απαντήσεις.

 

2. Χρησιμοποίησε τα σωστά εργαλεία

Σου έχει τύχει να δεις κάποιο DIY βίντεο στο Youtube, όπου σου υπόσχεται κάποιος να σου δείξει πώς να φτιάξεις π.χ. μια καρέκλα μόνος σου μέσα σε 5 λεπτά, αλλά αργά ή γρήγορα συνειδητοποιείς ότι το καταφέρνει μόνο και μόνο επειδή τυχαίνει να διαθέτει στο γκαράζ του τον κατάλληλο εξοπλισμό αξίας εκατοντάδων ή και χιλιάδων δολαρίων; Δεν θα θεωρήσω δεδομένο ότι «αντέχεις» οικονομικά μια συνδρομή για την τελευταία έκδοση του ChatGPT. Ωστόσο, έχοντας χρησιμοποιήσει τόσο τη δωρεάν όσο και τη συνδρομητική έκδοση, οφείλω να πω ότι η διαφορά είναι μεγάλη. Και είναι μεγάλη κατ’ αρχάς ως προς την έκταση, την ταχύτητα και την ακρίβεια των απαντήσεων. Για παράδειγμα, κάποια στιγμή χρειάστηκα τη βοήθεια του ChatGPT για να μάθω πώς να φτιάξω μια ιδιαίτερη δομή CSS πλέγματος (CSS grid), φιλική προς κινητά, με το Bootstrap. Με τη δωρεάν έκδοση μου πήρε πάνω από μισή ώρα και εν τέλει δεν μου έλυσε το πρόβλημα, ενώ με τη συνδρομητική έκδοση, κάνοντας ακριβώς την ίδια ερώτηση, είχα το αποτέλεσμα που ήθελα μέσα σε 5 δευτερόλεπτα. 

Κατά δεύτερον, γιατί η δωρεάν έκδοση -τουλάχιστον μέχρι πρόσφατα- δεν είχε τις πιο πρόσφατες πληροφορίες για το Joomla!. Σε κάποια περίσταση το ρώτησα αν η επέκταση που έφτιαχνα κάλυπτε τις βέλτιστες πρακτικές του Joomla 5, για να λάβω την απάντηση ότι θα είχε περισσότερες πληροφορίες όταν θα κυκλοφορούσε η έκδοση 5 (το Joomla! τότε ήταν ήδη στην έκδοση 5.0.3). 

Κατά τρίτον, γιατί με τη συνδρομητική υπηρεσία του ChatGPT έχεις στη διάθεσή σου και ορισμένα προσαρμοσμένα (custom) GPTs που εξειδικεύουν τις απαντήσεις τους με βάση την ιδιαίτερη πλατφόρμα που χρησιμοποιείς. Έτσι, στην περίπτωσή μας, υπάρχουν GPTs όπως το JoomGPT, που είναι εξειδικευμένα στο να απαντούν σε ερωτήσεις που σχετίζονται με το Joomla!. Ακόμα κι αυτά, βέβαια, μπορούν κάποιες φορές να «πιαστούν αδιάβαστα». Συνέχισε να διαβάζεις…

 

3. Χρησιμοποίησε τα εργαλεία σωστά (εφαρμόζοντας τις βέλτιστες πρακτικές)

Οι προηγούμενες καθώς και οι επόμενες συμβουλές θα μπορούσαν να χρησιμοποιηθούν λίγο-πολύ για οποιοδήποτε CMS ή και για οποιαδήποτε πλατφόρμα γενικότερα. Ωστόσο, η συγκεκριμένη θα εστιάσει στο Joomla! και στα ιδιαίτερα τεχνικά γνωρίσματά του – κι απ’ αυτή την άποψη, πιθανότατα είναι η σημαντικότερη συμβουλή που θα διαβάσεις σ’ αυτό το άρθρο.

Είναι γεγονός ότι το ChatGPT τις περισσότερες φορές θα δώσει μια λύση η οποία δεν λαμβάνει υπόψιν της μια σειρά από καλές πρακτικές που υφίστανται για το Joomla!. Επίσης, δεδομένου ότι έχει πρόσβαση σε πολλές περισσότερες πληροφορίες στο διαδίκτυο που αφορούν προηγούμενες εκδόσεις του Joomla!, σπάνια θα σου δώσει κατ’ ευθείαν έναν κώδικα που να λαμβάνει υπόψιν τις τελευταίες αλλαγές που φέρνει το Joomla! 5.Χ – εκτός αν το ζητήσεις ξεκάθαρα!

Αυτό βέβαια δεν σημαίνει ότι η επέκταση δεν θα λειτουργεί, απλώς αν θέλεις να μοιραστείς στη συνέχεια αυτή την επέκταση με την κοινότητα (και σε επόμενη συμβουλή σου προτείνω ανεπιφύλακτα να το κάνεις) καλό είναι να την φτιάξεις όσο το δυνατόν πιο ευέλικτη, πιο φιλική και πιο προσαρμοσμένη στη λογική του CMS εντός του οποίου θα λειτουργεί. Πάμε να δούμε πιο συγκεκριμένα τί εννοώ μέσα από ένα απλό παράδειγμα.

 

Ας πούμε ότι ζητάς από το ChatGPT να σου φτιάξει ένα απλό Module που να εμφανίζει το μήνυμα «Hello World» στον ιστότοπο. Το ChatGPT πιθανότατα θα σπεύσει πρόθυμα να σου φτιάξει:

  • ένα αρχείο mod_helloworld.php το οποίο θα περιέχει τον κώδικα
    echo '<h1>Hello World!</h1>';
  • Ένα αρχείο mod_helloworld.xml το οποίο θα περιέχει τις απαραίτητες πληροφορίες για την εγκατάσταση του Module στον ιστότοπο.

 

Θα δουλεύει; Ναι. Ωστόσο θα αγνοεί μια σειρά από αρχές και πρακτικές του Joomla!, τις οποίες θα δούμε αμέσως:

  • Το Joomla! χρησιμοποιεί τόσο για το ίδιο όσο και για τις επεκτάσεις του τη μοντέλο αρχιτεκτονικής λογισμικού MVC (Model-View-Controller). Εν ολίγοις, σύμφωνα με αυτό το μοντέλο, η επέκταση διαιρείται σε τρία διασυνδεδεμένα μέρη ώστε να διαχωριστεί η παρουσίαση της πληροφορίας στον χρήστη από την μορφή που έχει αποθηκευτεί στο σύστημα. Το κύριο μέρος του μοντέλου είναι το αντικείμενο Model το οποίο διαχειρίζεται την ανάκτηση ή/και αποθήκευση των δεδομένων στο σύστημα. Το αντικείμενο View χρησιμοποιείται μόνο για να παρουσιάζεται η πληροφορία στον χρήστη, ενώ ο Controller δέχεται την είσοδο και στέλνει εντολές στο αντικείμενο Model και στο View (περισσότερα για το MVC). Πώς μεταφράζεται αυτό στο παράδειγμά μας; Το πώς θα εμφανίζεται το μήνυμα «Hello World» στην προκειμένη είναι δουλειά του αντικειμένου View, το οποίο θα αποτελείται από ένα αρχείο default.php σε ενα φάκελο tmpl. Στη συνέχεια, το αρχείο mod_helloworld.php θα παίξει το ρόλο του Model το οποίο θα «καλεί» το αρχείο του view,  με μια εντολή όπως 
    require ModuleHelper::getLayoutPath('mod_helloworld');

Το συγκεκριμένο Module είναι τόσο απλό που τα στοιχεία Model και Controller ουσιαστικά ταυτίζονται στο αρχείο mod_helloworld.php. Συνεπώς, το παράδειγμα του HelloWorld Module με τη χρήση του MVC, θα διαμορφώσει μια σειρά αρχείων με αυτή τη δομή:

mod_helloworld/
    mod_helloworld.php
    mod_helloworld.xml
    tmpl/default.php
  • Το μήνυμα Hello World καθαυτό είναι ένα απλό και σαφές μήνυμα. Τί γίνεται όμως στην περίπτωση που το μήνυμα γίνεται πιο σύνθετο; Πώς θα μπορούσε κάποιος να εμφανίσει αυτό το μήνυμα σε κάποια άλλη γλώσσα; Μια ακόμη καλή πρακτική είναι τα μηνύματα τόσο στο Front-end όσο και σε τυχόν ρυθμίσεις της επέκτασης στο Back-end να αποτελούν μεταβλητές, τις οποίες θα μπορεί κάποιος να αξιοποιήσει για να διαφοροποιήσει ελαφρώς το μήνυμα ή και να το μεταφράσει στη γλώσσα του. Έτσι, το περιεχόμενο του αρχείου default.php θα διαμορφωνόταν πλέον ως εξής:
    echo '<h1>' . JText::_('MOD_HELLOWORLD_MESSAGE') . '</h1>';
    όπου το Hello World είναι πλέον το περιεχόμενο της μεταβλητής 'MOD_HELLOWORLD_MESSAGE' η οποία ορίζεται σε ένα νέο αρχείο, στη διαδρομή language/en-GB/en-GB.mod_helloworld.ini με το περιεχόμενο
    MOD_HELLOWORLD_MESSAGE="Hello World"
    Με αυτόν τον τρόπο, δίνεις τη δυνατότητα σε κάποιον είτε να δημιουργήσει κάποιο Override μέσα από το περιβάλλον του Joomla!, αλλάζοντας την τιμή της μεταβλητής MOD_HELLOWORLD_MESSAGE, είτε να μεταφράσει στο μέλλον το περιεχόμενο του Module δημιουργώντας ένα αρχείο με τις ανάλογες μεταβλητές, μεταφρασμένες στη γλώσσα του.

  • Το παραπάνω bullet περιέχει επίτηδες στοιχεία τα οποία έχουν διαφοροποιηθεί στο Joomla! 5.X.. Έτσι, στην έκδοση 5 η συνάρτηση JText::_() είναι απλά Text::_(), η συνάρτηση JModuleHelper::_() είναι απλά ModuleHelper::_() και γενικότερα το πρόθεμα «J» έχει αφαιρεθεί από τέτοιες συναρτήσεις. Επιπλέον, το γλωσσικό αρχείο en-GB.mod_helloworld.ini δεν χρειάζεται πλέον να έχει το πρόθεμα της γλώσσας «en-GB», αφού ούτως ή άλλως βρίσκεται στον σχετικό φάκελο /en-GB/. Φαντάζει τρομερή λεπτομέρεια, αλλά το ChatGPT πολύ συχνά θα σου γράψει κώδικα με στοιχεία που χρησιμοποιούνταν σε παλαιότερες εκδόσεις Joomla και πλέον έχουν εγκαταλειφθεί. Ωστόσο, αν του υποδείξεις πως θέλεις η επέκταση να είναι Joomla 5 native συνήθως θα σου διορθώσει τα παραπάνω, αλλά σίγουρα θέλει μεγάλη προσοχή στο να μη χρησιμοποιήσεις τελικά legacy κώδικα για μια νέα επέκταση (εκτός, φυσικά, κι αν φτιάχνεις μια επέκταση για μια παλαιότερη έκδοση του Joomla!).

  • Το <h1> tag που έβαλε το ChatGPT σαφέστατα θα κάνει το μήνυμα να ξεχωρίζει στη σελίδα, αλλά πέρα απ’ αυτό σίγουρα δεν δίνει και πολλά περιθώρια σε κάποιον που θα χρησιμοποιήσει αυτό το Module να διαμορφώσει το κείμενο με βάση τις ανάγκες και το γούστο του. Μια ακόμη καλή πρακτική εδώ θα ήταν να αποδώσουμε μια κλάση στο κείμενο, την οποία στη συνέχεια θα μπορούσαμε να αξιοποιήσουμε για να προσαρμόσουμε το στυλ του κειμένου με τη χρήση CSS. Έτσι, η εντολή echo στο αρχείο default.php που εμφανίζει το κείμενο θα μπορούσε να διαμορφωθεί ως εξής: 
echo '<div class="hello-world-message">' . Text::_('MOD_HELLOWORLD_MESSAGE') . '</div>';

Έπειτα, μπορούμε να διαμορφώσουμε αυτή την κλάση στον κώδικα CSS του template μας, για παράδειγμα να της αλλάξουμε χρώμα, μέγεθος γραμματοσειράς και να εφαρμόσουμε κεντρική στοίχιση:

.hello-world-message {
    color: #3498db;
    font-size: 2rem;
    text-align: center;
}

 

Συνοψίζοντας ως προς τις καλές πρακτικές, τα καλά νέα είναι ότι και το ίδιο το ChatGPT εξελίσσεται, όπως είναι λογικό. Έτσι, ενώ στην αρχή χρειαζόταν να του τονίζω κάθε φορά να χρησιμοποιήσει τη δομή του MVC, την τελευταία φορά που επιχείρησα να φτιάξω -στη δωρεάν έκδοση- την παραπάνω επέκταση για τις ανάγκες του άρθρου γράφοντας απλά την εντολή «φτιάξε μου ένα module για Joomla! που να εμφανίζει τη φράση Hello World», προς μεγάλη μου έκπληξη χρησιμοποίησε εξ’ αρχής το MVC μοντέλο. Ωστόσο, όλα τα υπόλοιπα που προαναφέρθηκαν (γλωσσικά strings, κλάση στο κείμενο κ.λπ.) χρειάστηκε να τα υποδείξω με τον έναν ή τον άλλον τρόπο («κάνε την επέκταση να λειτουργεί εγγενώς σε Joomla! 5» κ.λπ). Σε κάθε περίπτωση, στο τέλος είχα ακριβώς το αποτέλεσμα που ήθελα. Έτσι, το τελικό «παραδοτέο» του ChatGPT είχε την ακόλουθη δομή αρχείων:

mod_helloworld/

├── mod_helloworld.php

├── mod_helloworld.xml

├── tmpl/

│          └── default.php

└── language/

             └── en-GB/

                          └── mod_helloworld.ini 

Το αρχείο mod_helloworld.php διαμορφώθηκε ως εξής:

<?php
// No direct access
defined('_JEXEC') or die;

use Joomla\CMS\Helper\ModuleHelper;
use Joomla\CMS\Language\Text;

// Load the layout file
require ModuleHelper::getLayoutPath('mod_helloworld');

 

Το αρχείο mod_helloworld.xml διαμορφώθηκε ως εξής:

<?xml version="1.0" encoding="utf-8"?>
<extension version="5.0" type="module" client="site" method="upgrade">
    <name>mod_helloworld</name>
    <author>Your Name</author>
    <creationDate>2024-10</creationDate>
    <version>1.0.0</version>
    <description>A simple "Hello World" module for Joomla 5</description>
    <files>
        <filename module="mod_helloworld">mod_helloworld.php</filename>
        <filename>tmpl/default.php</filename>
    </files>
    <languages>
        <language tag="en-GB">language/en-GB/mod_helloworld.ini</language>
    </languages>
</extension>

 

Το αρχείο tmpl/default.php:

<?php
// No direct access
defined('_JEXEC') or die;

use Joomla\CMS\Language\Text;

// Output the translated message with a custom class
echo '<div class="hello-world-message">' . Text::_('MOD_HELLOWORLD_MESSAGE') . '</div>';

 

και τέλος το αρχείο language/en-GB/mod_helloworld.ini

MOD_HELLOWORLD_MESSAGE="Hello World"

 

4. Ζήτα βοήθεια

Όπως είδαμε, ακόμα και μια φαινομενικά απλή επέκταση όπως το HelloWorld Module μπορεί να σε ζορίσει λίγο αν ασχολείσαι για πρώτη φορά με την ανάπτυξη επεκτάσεων. Γι’ αυτό το λόγο θεωρώ πως έχει τεράστια σημασία να απευθύνεσαι στην κοινότητα του Joomla! αλλά και στην ευρύτερη κοινότητα της πληροφορικής, όποτε τυχόν αντιμετωπίσεις προβλήματα στην πορεία, προκειμένου να σε συμβουλεύσει και να σε κατευθύνει. Κατά την υλοποίηση της πρώτης μου επέκτασης, είχα φτάσει σε σημείο απελπισίας με κάποιο σφάλμα που μου έβγαζε, μέχρι που μου υποδείχθηκε από κάποιον συνάδελφο προγραμματιστή (που δεν ήξερε καν από Joomla!) μια λέξη που έπρεπε να αφαιρεθεί από τον κώδικα. Ένα άλλο μέλος της κοινότητας του Joomla! μου υπέδειξε αργότερα και κάποιες εκ των παραπάνω καλών πρακτικών, που εκείνη την εποχή δεν «γνώριζε» καν το ChatGPT. Είναι, λοιπόν, πολύ σημαντικό να έχεις στο πλευρό σου αυτή την πολυπληθή και πρόθυμη κοινότητα, την οποία μπορείς να γνωρίσεις είτε μέσα από το επίσημο φόρουμ του Joomla!, είτε μέσα από αντίστοιχα γκρουπ στα μέσα κοινωνικής δικτύωσης. Τέλος, μπορείς επίσης να κοιτάζεις και τον κώδικα των επεκτάσεων άλλων κατασκευαστών ή ακόμη και του ίδιου του Joomla! προκειμένου να αποκτήσεις μια καλύτερη ιδέα του πώς δομείται μια επέκταση ή και το πώς υλοποιείται μια συγκεκριμένη λειτουργία. Για παράδειγμα, χρειάστηκε να δω μια σειρά από επεκτάσεις τρίτων  κατασκευαστών ώστε να καταλάβω πώς υλοποιείται η λειτουργία αυτόματης αναβάθμισης μιας επέκτασης χρησιμοποιώντας ως διακομιστή το ίδιο το Github.

 

5. Μοιράσου το αποτέλεσμα!

Για να μπεις στη διαδικασία να φτιάξεις μια επέκταση για Joomla! συνήθως σημαίνει πως είτε θέλεις να ασχοληθείς περισσότερο με αυτό, δηλαδή για «εκπαιδευτικούς» λόγους, είτε θέλεις μια πιο εξειδικευμένη λειτουργικότητα που καμία από τις διαθέσιμες επεκτάσεις για Joomla! δεν σου την προσφέρει με τον τρόπο που επιθυμείς. Όποια κι αν είναι η περίπτωση, δημοσιεύοντας την επέκταση που δημιούργησες, κατά προτίμηση με κάποια ανοικτή άδεια όπως αυτή που διέπει το ίδιο το Joomla!, μπορεί να έχει πολλαπλά πλεονεκτήματα. Αρχικά, μπορεί να βοηθήσεις και κάποιον άλλον που ίσως έψαχνε μια παρόμοια επέκταση. Κατά δεύτερον, δημοσιεύοντας την επέκταση δίνεις την ευκαιρία στα μέλη της κοινότητας να τη δοκιμάσουν και να σου προτείνουν τυχόν διορθώσεις ή βελτιώσεις που θα μπορούσαν να γίνουν σε αυτή, εξελίσσοντας τη δημιουργία σου. Κατά τρίτον, πιθανότατα δεν χρειάζεται να σου πω πόσο ωραία είναι η αίσθηση του να μοιράζεσαι μια δημιουργία σου και να τη βλέπεις να αξιοποιείται από διαφορετικούς ανθρώπους, σε διαφορετικούς ιστοτόπους. Εξάλλου, για να μοιραστείς μια επέκταση δεν χρειάζεσαι καν κάποια ιδιαίτερη υποδομή. Δημιουργώντας, για παράδειγμα, ένα Repository της επέκτασης στο Github, μπορείς όχι μόνο να μοιράζεσαι αλλά και να συντηρείς την επέκταση με αναβαθμίσεις, διορθώσεις κ.λπ. Επιπλέον, αν νιώθεις έτοιμος να υποστηρίξεις σοβαρά και υπεύθυνα αυτή την επέκταση, μπορείς επίσης να την υποβάλεις και στο Joomla! Extensions Directory, το σημείο που «κοιτάζει» όλη η κοινότητα για επεκτάσεις του Joomla!.

 

profile icon
Ιωάννης Φύτρος

Το Joomla! είναι ένα community driven project, και δεν μπορεί να αναπτυχθεί χωρίς τη δική μας συνεισφορά.

Πού μπορώ να ενημερωθώ για τις δράσεις της ελληνικής κοινότητας του joomla;

  1. Ιστοσελίδα της κοινότητας
  2. Forum της κοινότητας στο joomla.org
  3. Facebook Group - Γίνε Μέλος!
  4. Joomla! User Group - JUG Athens  - Γίνε Μέλος!

Θέλεις να συμμετάσχεις πιο ενεργά στην ελληνική κοινότητα Joomla; Επικοινώνησε μαζί μας.

Συντομεύσεις
Πρόσφατα Tutorials
Αναρτήσεις στο Blog

Το όνομα Joomla!™ και το λογότυπο χρησιμοποιούνται στις Ηνωμένες Πολιτείες και σε άλλες χώρες μετά από περιορισμένη άδεια της Open Source Matters.
Το joomla.gr δεν σχετίζεται με, ούτε υποστηρίζεται από, την Open Source Matters ή το Joomla!™ Project.
The Joomla!™ name and logo are used in the United States and other countries under limited license from Open Source Matters. This site, joomla.gr is not associated with, nor endorsed by, Open Source Matters or the Joomla!™ Project.

Joomla.gr footer Logo

Δημιουργήθηκε με χρήση του Joomla! CMS

Κατασκευή - Συντήρηση - Φιλοξενία
Onscreen Web Services  &  Easylogic &  redtie Digital

Στείλτε μας email ή ακολουθήστε μας