Ceci est une ancienne révision du document !
EasyCreator
http://extensions.joomla.org/extensions/miscellaneous/development/5908
EasyCreator est un formidable outil de développement d'extensions pour Joomla 1.5. Il permet d'accélérer le processus de création de composants, modules, plugins mais également du code de vos templates. Vous pouvez créer un environnement pour votre extension et un package zip installable en quelques clics.
Au départ, vous pouvez vous aider du “magicien” qui vous proposera de sélectionner un composant sur 7 modèles au choix de composants au standard MVC ou encore un module public ou admin, un plugin d'authentification ou de contenu ou utilisateur ainsi qu'une copie des templates d'origine (beez, rhuk milkyway). il s'en suit une personnalisation des informations et votre extension est prête à fonctionner. La structure de base est pleinement opérationnel, vous pouvez déjà tester et ajouter votre code dans le mode bac à sable (sandbox) également inclus dans Easycreator.
La traduction en français est inclus. Pour installer EasyCreator, rien de plus simple : c'est un composant pour Joomla qui s'installe par le menu extensions/intaller.
http://www.joomlafrance.org/telecharger/fileinfo/EasyCreator.html
Voir aussi cet excellent tutoriel: http://christophehagnere.eu/tag/joomla/
CRUD / Note Fred
Au départ, pour les opérations de CRUD*, j'utilisais cake, mais après plein de problèmes d'encodage UTF-8 -isoXXYY, j'ai regardé de plus près comment faire ça avec Joomla! et ce composant EasyCreator, c'est très simple - mais il faut un peu de patience et être au calme, compter 1-2h:
- créer une table MySQL en suivant le “JoomlaMVCStyle” - soit EN TOUT CAS un champ id auto-incrémental - on peut bidouiller si on a pas, mais ça rend les choses plus compliquées
- installer EasyCreator
- suivre le “wizard” pour un MVC 4 admin (il y a un tutoriel correspondant sur le site de joomla)
- modifier les fichiers créés, d'abord
- table
puis
- views
ce serait intéressant d'automatiser tout cela… script à faire! Mais déjà là, montre en main, si la table n'est pas trop compliquée, en moins d'une heure vous avez votre CRUD “Joomla like”…
* CRUD désigne les quatre opérations de base pour la persistance des données, en particulier le stockage d'informations en base de données. Soit : Create, Read (ou Retrieve), Update et Delete (ou Destroy). C'est-à-dire : créer, lire, mettre à jour et supprimer. source: http://fr.wikipedia.org/wiki/CRUD
HowTo
une petite méthode pour faire le CRUD, à améliorer mais c'est un début
- créer un composant MVC 4 admin, ici com_livres
- récupérer dans mysql la liste des champs de la table, qui doit s'appeller jos_livres (changer pour le bon nom), le plus simple est de faire un export csv avec nom des champs en 1e ligne
- s'assurer comme a bien un champ identifiant “id”
exemple:
"id";"auteur";"titre";"support";"localisation";"groupe_carton";"type";"date";"remarques";"owner";"datein";"user_id"
Changement admin
préparation
nom des variables
dans (x)emacs:
CTRL-SHIFT-ALT-% ";" ALT-J
soit (query-replace “\”;\“” “\n” nil)
puis
CTRL-SHIFT-ALT-% ^\(.*\)$ var $\1 = null;
search
CTRL-SHIFT-ALT-% ^\(.*\)$ \1 LIKE "%'.$filter_search.'%" OR
garder le résultat et corriger la dernière ligne, eg.
auteur LIKE "%'.$filter_search.'%" OR titre LIKE "%'.$filter_search.'%" OR support LIKE "%'.$filter_search.'%" OR localisation LIKE "%'.$filter_search.'%" OR groupe_carton LIKE "%'.$filter_search.'%" OR type LIKE "%'.$filter_search.'%" OR date LIKE "%'.$filter_search.'%" OR remarques LIKE "%'.$filter_search.'%" OR owner LIKE "%'.$filter_search.'%" OR datein LIKE "%'.$filter_search.'%" OR user_id LIKE "%'.$filter_search.'%
tables
placer le résultat des variables supra dans /tables/
ex.
var $auteur = null; var $titre = null; var $support = null; var $localisation = null; var $groupe_carton = null; var $type = null; var $date = null; var $remarques = null; var $owner = null; var $datein = null; var $user_id = null;
models
livress
détail un peu plus compliqué, alors détaillé
livres
rien à changer
controllers
rien à changer
views
livress (liste de tous les items)
/views/…/tmpl/default.php
style
<style>
a {
text-decoration: none;
}
a:hover{
color: red;
}
td {
vertical-align: top;
padding-bottom: 3px;
padding-right: 5px;
}
.row0{
background-color: #e5e5e5;
}
.row1{
background-color: #ffffff;
}
.fenetrerecherche {
width: 150px; height: 13px;
padding-bottom: 3px;
text-align: left;
}
</style>
moteur de recherche et pagination
ajouter après la ligne qui commence par <table
NOTE: attention au target du form, qui doit être de la forme
<form action="index.php?option=com_musiques&controller=musiques" method="post" name="form">
—
<div id="editcell">
<table>
<!-- search engine begin -->
<tr>
<td align="left" width="100%">
<?php echo JText::_('Filter'); ?>:
<input type="text" name="filter_search" id="search" value="<?php echo $this->lists['search'];?>" class="text_area" onchange="document.adminForm.submit();" />
<button onclick="this.form.submit();"><?php echo JText::_('Go'); ?></button>
<button onclick="document.adminForm. filter_search.value='';this.form.submit();"><?php echo JText::_('Reset'); ?></button>
</td>
</tr>
<!-- search engine end -->
<!-- pagination begin -->
<tr>
<td colspan="9">
<?php
#getPagination();
jimport('joomla.html.pagination');
// Get data from the model
$items =& $this->get('Data');
$pagination =& $this->get('Pagination');
// push data into the template
$this->assignRef('items', $items);
$this->assignRef('pagination', $pagination);
echo $this->pagination->getListFooter();
?></td>
</tr>
<!-- pagination end -->
</table>
libellé des colonnes
CTRL-SHIFT-ALT-% ^\(.*\)$ <th> <?php echo JText::_( '\1' ); ?> </th>
copier-coller le résultat et corriger la dernière ligne, résultat
contenu des colonnes
changer:
<td>
<?php echo $row->id; ?>
</td>
<td>
<?php echo $checked; ?>
</td>
<td>
<a href="<?php echo $link; ?>"><?php echo $row->greeting; ?></a>
</td>
pour
<td>
<a href="<?php echo $link; ?>"><?php echo $row->id; ?></a>
</td>
<td>
<?php echo $checked; ?>
</td>
ajouter après
CTRL-SHIFT-ALT-% ^\(.*\)$ <td> <?php echo $row->\1; ?> </td>
si vous voulez cacher des colonnes à l'affichage liste, faites-le! (mais gardez bien id)
livres (vue d'un item)
/views/…/tmpl/form.php
CTRL-SHIFT-ALT-% ^\(.*\)$ <tr> <td width="100" align="right" class="key"> <label for="\1"> <?php echo JText::_( '\1' ); ?>: </label> </td> <td> <input class="text_area" type="text" name="\1" id="\1" size="32" maxlength="250" value="<?php echo $this->livres->\1;?>" /> </td> </tr>
si vous devez faire des textarea, changer à la main, ex.
<td>
<input class="text_area" type="text" name="D_RAPPEL" id="D_RAPPEL" size="32" maxlength="250" value="<?php echo $this->adresses->D_RAPPEL;?>" />
</td>
Changement frontend
copier le module administrator/component/… dans la racine /component
cd module mv admin.module.php module.php
rm -fR *.xml *.xml* CHANGELOG* *install*
views/musiquess/view.html.php
delete
JToolBarHelper::title( JText::_( 'musiques Manager' ), 'generic.png' );
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
/**
* musiquess view display method
* @return void
**/
function display($tpl = null)
{
// Get data from the model
$items = & $this->get( 'Data');
$this->assignRef('items', $items);
parent::display($tpl);
}
views/musiquess/tmpl/default.php
delete
<th width="5"> <?php echo JText::_( 'ID' ); ?> </th> <th width="20"> <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count( $this->items ); ?>);" /> </th> .... <td> <?php echo $row->id; ?> </td> <td> <?php echo $checked; ?> </td>
changer
<input type="text" name="filter_search" id="search" value=" <?php echo $this->lists['search'];?>" class="text_area" onchange="document.adminForm.submit();" />
pour
<input type="text" name="filter_search" id="search" value="" size="10" onchange="document.adminForm.submit();" style="width: 150px; height: 20px; text-align: left" />
views/musiques/view.html.php
effacer
JToolBarHelper::title( 'musiques: <small><small>[ ' . $text.' ]</small></small>' );
JToolBarHelper::save();
if ($isNew) {
JToolBarHelper::cancel();
} else {
// for existing items the button is renamed `close`
JToolBarHelper::cancel( 'cancel', JText::_('Close') );
}
views/musiques/tmpl/form.php
effacer
<form action="index.php" method="post" name="adminForm" id="adminForm"> ... <input type="hidden" name="option" value="com_musiques" /> <input type="hidden" name="id" value="<?php echo $this->musiques->id; ?>" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="controller" value="musiques" /> </form>
changer partout
note: si quelqu'un m'écrit l'ereg pour emacs, je veux bien!
<input class="text_area" type="text" name="genre" id="genre" size="32" maxlength="250" value="<?php echo $this->musiques->genre;?>" /> -> <?php echo $this->musiques->genre;?>
ajouter à la fin
<br><a href=“index.php?option=com_musiques”>Retour</a>
Dates
Pour ajouter un calendrier javascript (js calendar) pour un champ date, rien de plus simple:
- au début du fichier
//to display a js calendar
JHTML::_('behavior.calendar');
puis dans le formulaire d'édition / d'ajout (normalement views/nomtablesingulier/tmpl/form.php):
<input class="inputbox" type="text" name="date" id="date"
size="25" maxlength="19" value="<?php echo $this->livres->date;?>" />
<input name="reset" type="reset" class="button"
onclick="return showCalendar('date', '%Y-%m-%d %H:%M');" value="..." />

