Migrer un module vers une nouvelle version

Mettre à jour son module 4.0 en 4.1

Dernière mise à jour : 27/01/2016 à 15h39
Si aucun des éléments se trouvant dans cette documentation ne vous aide, référez-vous au forum et demandez de l'aide.



Cette documentation permet de rendre votre module compatible avec la version 4.1 de PHPBoost sans trop de modifications dans le code. Elle n'a pas pour but de le convertir en utilisant le modèle MVC et d'utiliser les nouvelles fonctionnalités. Effectuez les différentes étapes suivantes (peu importe l'ordre) pour mettre à jour votre module.



Le fichier de configuration







Le seul changement à effectuer dans le fichier /module/config.ini pour rendre votre module compatible avec la nouvelle version est le paramètre "compatibility". Remplacez la valeur par 4.1.



Pensez également à mettre à jour le numéro de version de votre module pour plus de cohérence.



Code TEXT :
compatibility="4.1"




Changements dans l'API







Système de catégories







Si votre module fait appel au système de catégories, il faut changer l'appel à la classe CategoriesManager en DeprecatedCategoriesManager dans le fichier /module/phpboost/ModuleCats.class.php :



Code PHP :
class DownloadCats extends DeprecatedCategoriesManager




Liens dans l'administration







Un nouveau système a été mis en place pour les liens dans l'administration. Ces liens apparaissent maintenant également sur le site à droite du fil d'ariane.



Pour le mettre en place, ajoutez la fonction suivante dans la classe du fichier /module/phpboost/ModuleExtensionPointProvider.class.php (en remplaçant Module par le nom de votre module) :



Code PHP :
 
public function tree_links()
{
return new ModuleTreeLinks();
}
 




Créez ensuite le fichier /module/phpboost/ModuleTreeLinks.class.php (exemple pour le module download) :



Code PHP :
 
<?php
/*##################################################
 *                         DownloadTreeLinks.class.php
 *                            -------------------
 *   begin                : November 23, 2013
 *   copyright            : (C) 2013 Julien BRISWALTER
 *   email                : julienseth78@phpboost.com
 *
 *
 ###################################################
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 ###################################################*/
/**
 * @author Julien BRISWALTER <julienseth78@phpboost.com>
 */
class DownloadTreeLinks implements ModuleTreeLinksExtensionPoint
{
public function get_actions_tree_links()
{
global $DOWNLOAD_LANG;
load_module_lang('download'); //Chargement de la langue du module.
require_once(PATH_TO_ROOT . '/download/download_auth.php');
$tree = new ModuleTreeLinks();
//Gestion et ajout de catégories dans l'administration
$manage_categories_link = new AdminModuleLink($DOWNLOAD_LANG['admin.categories.manage'], new Url('/download/admin_download_cat.php'));
$manage_categories_link->add_sub_link(new AdminModuleLink($DOWNLOAD_LANG['admin.categories.manage'], new Url('/download/admin_download_cat.php')));
$manage_categories_link->add_sub_link(new AdminModuleLink($DOWNLOAD_LANG['add_category'], new Url('/download/admin_download_cat.php?new=1')));
$tree->add_link($manage_categories_link);
//Gestion et ajout de fichiers dans l'administration
$manage_download_link = new AdminModuleLink($DOWNLOAD_LANG['files.manage'], new Url('/download/admin_download.php'));
$manage_download_link->add_sub_link(new AdminModuleLink($DOWNLOAD_LANG['files.manage'], new Url('/download/admin_download.php')));
$manage_download_link->add_sub_link(new AdminModuleLink($DOWNLOAD_LANG['add_file'], new Url('/download/management.php?new=1')));
$tree->add_link($manage_download_link);
//Gestion de la configuration du module dans l'administration
$tree->add_link(new AdminModuleLink(LangLoader::get_message('configuration', 'admin'), new Url('/download/admin_download_config.php')));
//Lien pour ajouter un fichier sur le site
if (!AppContext::get_current_user()->check_level(User::ADMIN_LEVEL))
{
$tree->add_link(new ModuleLink($DOWNLOAD_LANG['add_file'], new Url('/download/management.php?new=1'), AppContext::get_current_user()->check_auth(DownloadConfig::load()->get_authorizations(), DOWNLOAD_WRITE_CAT_AUTH_BIT)));
}
return $tree;
}
}
?>
 




La classe
AdminModuleLink()
permet d'afficher des liens dans l'administration et sur le site pour les administrateurs.



La classe
ModuleLink()
des liens uniquement sur la partie site (pas dans l'administration). Les limitations d'accès à ce lien sont définies dans le 3e paramètre.




Vous pouvez ensuite supprimer les liens
admin_links
dans /module/lang/french/desc.ini (idem pour les autres langues).



Pagination







L'API de pagination a été améliorée. Il faut faire des changements au niveau du code php et des templates pour l'utiliser parce-que l'ancienne API n'est plus supportée.



Si vous utilisiez la classe Pagination dans la version 4.0, veuillez maintenant passer à la nouvelle classe ModulePagination.



Fichiers php







Remplacez l'ancienne déclaration de la pagination :



Code PHP :
 
$Pagination = new DeprecatedPagination();
$tpl->put_all(array(
'PAGINATION' => $Pagination->display(PATH_TO_ROOT . '/module/page.php?p=%d', $number_elements, 'p', $_NBR_ELEMENTS_PER_PAGE, 3),
));
 




Par :



Code PHP :
 
$page = AppContext::get_request()->get_getint('p', 1);
$pagination = new ModulePagination($page, $number_elements, $_NBR_ELEMENTS_PER_PAGE);
$pagination->set_url(new Url('/module/page.php?p=%d'));
if ($pagination->current_page_is_empty() && $page > 1)
{
$error_controller = PHPBoostErrors::unexisting_page();
DispatchManager::redirect($error_controller);
}
$tpl->put_all(array(
'C_PAGINATION' => $pagination->has_several_pages(),
'PAGINATION' => $pagination->display(),
));
 




La variable
$number_elements
représente le nombre total d'éléments (généralement récupéré par une requête SQL avant) et la variable
$_NBR_ELEMENTS_PER_PAGE
représente le nombre d'éléments à afficher sur la page (généralement défini dans la configuration du module).



Remplacez également la limitation du nombre de page dans la requête SQL :



Code PHP :
 
$Sql->limit($Pagination->get_first_msg($_NBR_ELEMENTS_PER_PAGE, 'p'), $_NBR_ELEMENTS_PER_PAGE)
 




Par :



Code PHP :
 
$Sql->limit($pagination->get_display_from(), $_NBR_ELEMENTS_PER_PAGE)
 




Templates







Remplacez l'appel à la pagination dans les templates
{PAGINATION}
par :



Code TPL :
 
# IF C_PAGINATION # # INCLUDE  PAGINATION # # ENDIF #
 




Notation







La fonction
set_average_notes()
a été ajoutée dans la classe Notation.



Initialisation de la notation :



Code PHP :
 
$notation = new Notation();
$notation->set_module_name('module');
$notation->set_id_in_module($id);
$notation->set_notation_scale($max_note);
$result = $Sql->query_while("SELECT module.*, notes.average_notes
FROM " . PREFIX . "module module
LEFT JOIN " . DB_TABLE_AVERAGE_NOTES . " notes ON module.id = notes.id_in_module AND notes.module_name = 'module'", __LINE__, __FILE__);
while ($row = $Sql->fetch_assoc($result))
{
$notation->set_id_in_module($row['id']);
$notation->set_average_notes($row['average_notes']);
}
 




Appel de la notation active (notation lors du clic) :



Code PHP :
 
$tpl->put_all(array(
'NOTE' => NotationService::display_active_image($notation),
));
 




Appel de la notation statique (affichage uniquement) :



Code PHP :
 
$tpl->put_all(array(
'NOTE' => NotationService::display_static_image($notation),
));
 




Templates







Il y a eu pas mal de changements dans le nom des classes CSS. La plupart du temps il suffit de remplacer le _ par un -. Référez-vous à la documentation des thèmes pour plus d'informations.



  • text_strong
    devient
    text-strong
  • text_center
    devient
    center
  • text_small
    devient
    smaller








Tableaux







Les classes CSS module-table, row1, row2 et row3 ont été supprimées et le style des tableaux a été mis à jour pour respecter les standards.



Un tableau doit être de la forme :



Code TPL :
 
<table>
<caption>Titre du tableau</caption>
<thead>
<tr>
<th>Titre</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Pied de page</th>
</tr>
</tfoot>
<tbody>
<tr>
<td>Contenu</td>
</tr>
<tbody>
</table>
 




La déclaration du pied de page se fait bien avant la déclaration du contenu, ce n'est pas une erreur. Les sections caption, thead et tfoot ne sont pas obligatoires. Le style des tableaux se personnalise dans les fichiers CSS du thème (voir la documentation sur les thèmes).



Icônes







Les images des thèmes ont été remplacées par des icônes de la librairie Font-Awesome.



Vous pouvez avoir un aperçu des différentes icônes utilisées dans les modules dans le module bac à sable.



Principaux changements :



Remplacez :



Code TPL :
 
<img src="{PATH_TO_ROOT}/templates/{THEME}/images/{LANG}/edit.png" class="valign_middle" />
<img src="{PATH_TO_ROOT}/templates/{THEME}/images/{LANG}/delete.png" class="valign_middle" />
<img src="{PATH_TO_ROOT}/templates/{THEME}/images/refresh.png" alt="" />
 




Par :



Code TPL :
 
<i class="fa fa-edit"></i>
<i class="fa fa-delete"></i>
<i class="fa fa-refresh fa-2x"></i>
 




Boutons







Les boutons des formulaires doivent être mis à jour pour respecter la sémantique HTML5.



Remplacez :



Code TPL :
 
<input type="submit" name="valid" value="{L_SUBMIT}" class="submit">
  
<input value="{L_PREVIEW}" onclick="XMLHttpRequest_preview();" class="submit" type="button">
  
<input type="reset" value="{L_RESET}" class="reset">
 




Par :



Code TPL :
 
<button type="submit" name="valid" value="true">{L_SUBMIT}</button>
<button type="button" value="{L_PREVIEW}" onclick="XMLHttpRequest_preview();">{L_PREVIEW}</button>
<button type="reset" value="true">{L_RESET}</button>
 




Formulaires







Certaines parties des formulaires ont été mises à jour. Le plus gros changement consiste à remplacer les _ dans les noms des classes CSS par des -.



Remplacez :



Code TPL :
 
<dl>
<dt>
<label for="name">{L_NAME}</label>
<span class="test_small">{L_NAME_EXPLAIN}</span>
</dt>
<dd>
<input type="text" size="65" maxlength="100" id="name" name="name" value="{NAME}" class="text">
</dd>
</dl>
 




Par :



Code TPL :
 
<div class="form-element">
<label for="name">
{L_NAME}
<span class="field-description">{L_NAME_EXPLAIN}</span>
</label>
<div class="form-field">
<input type="text" size="65" maxlength="100" id="name" name="name" value="{NAME}">
</div>
</div>
 




Templates des pages







L'affichage des pages a été mis à jour pour respecter les standards HTML5.



Remplacez :



Code TPL :
 
<div class="module_position">
<div class="module_top_l"></div>
<div class="module_top_r"></div>
<div class="module_top">Titre</div>
<div class="module_contents">
Contenu
</div>
<div class="module_bottom_l"></div>
<div class="module_bottom_r"></div>
<div class="module_bottom"></div>
</div>
 




Par :



Code TPL :
 
<section>
<header>
<h1>Titre</h1>
</header>
<div class="content">
Contenu
</div>
<footer></footer>
</section>
 




Mini-modules







Remplacez les _ dans les noms des classes CSS par des -. Ce qui donne :



Code TPL :
 
<div class="module-mini-container"# IF C_HORIZONTAL # style="width:auto;"# ENDIF #>
<div class="module-mini-top">
<h5 class="sub-title">Titre</h5>
</div>
<div class="module-mini-contents">
Contenu
</div>
<div class="module-mini-bottom"></div>
</div>
 
Cette page a été vue 6000 fois