Dernière mise à jour : 12/03/2023 à 10h55
Table des matières
PHP
HTML
CSS
JS
Cette procédure est applicable à partir de la version de PHPBoost
Pour la simplification du tutoriel, les exemples de scripts et noms des fichiers sont définis pour un module nommé Blog, il faudra donc adapter le nom et les requêtes à ceux du module ajouté.
Deux procédures d'ajout
Ajouter le module avant l'instalation de HomeLanding
Il sera ajouté et disponible dans la liste des modules compatibles dès l'installation de HomeLanding.
Ajouter le module après l'installation de HomeLanding
Il sera détecté automatiquement et une nouvelle page
Ajouter des élémentsapparait dans la configuration de HomeLanding, permettant d'ajouter le module dans la liste des modules compatibles.
Fichiers à ajouter dans HomeLanding
À quelques exceptions près, les scripts du module à ajouter sont à déclarer dans des fichiers séparés, qui sont automatiquement chargés dans le bon fichier de HomeLanding et au bon endroit. Ainsi une éventuelle mise à jour de HomeLanding n'impactera pas les modifications apportées.
Pour les scripts ajoutés dans les sous-dossiers de
/HomeLanding/additional/, la récupération des scripts se fait par une reconnaissance de présence de fichiers. Le nom de ces fichiers est arbitraire, seul compte leur contenu selon leur emplacement. Ainsi on pourra ajouter au choix
- un fichier unique dans chaque sous-dossier et y déclarer tous les modules à ajouter.
- un fichier par module à ajouter dans chaque sous-dossier.
Déclaration de la compatibilité du module avec HomeLanding
Cela permet
- d'ajouter automatiquement le module dans la liste des onglets du menu d'accueil
- d'ajouter automatiquement le module dans la liste des onglets du menu de configuration
- au module d'être détecté automatiquement comme nouveau module compatible s'il est installé après HomeLanding
Config.ini du module
Dans le fichier
/blog/config.ini
Ajouter
homelandingdans la liste des
featuresdu module.
Si l'option
featuresn'existe pas dans le
config.inidu module, il suffit de l'ajouter.
Code TEXT :
features = "homelanding"
À ce stade, placez vous sur la page
- Panneau de configuration
- Modules
- Page d'accueil
- Configuration
Dans le menu du haut, cliquez sur
Ajouter des éléments. Une fois sur cette page, passez aux étapes suivantes SANS VALIDER.
L'ajout des fichiers va rendre la page configuration inaccessible, d'où l'utilité de se rendre sur la page d'ajout, avant. Si vous êtes amenés à en sortir, vous pouvez la rejoindre avec l'adresse
/HomeLanding/admin/addou
/HomeLanding/?url=/admin/add/selon l'état de votre
url_rewriting
!! IMPORTANT !!
La suite de cette procédure prévoit l'affichage du contenu du module sans distinction de catégorie.
Pour ajouter un module qui permettra d'afficher séparément le contenu de ses catégories, il faut utiliser les scripts de l'exemple donné sur cette annexe
Déclaration du module dans l'initialisation de la liste des modules compatibles
/HomeLanding/additional/add/
Cette déclaration est nécessaire uniquement si le module HomeLanding est déjà installé.
Créer un fichier
/HomeLanding/additional/add/AdditionalAdd.php
Code PHP :
<?php $module = new HomeLandingModule(); $module->set_module_id(HomeLandingBlog::MODULE_BLOG); $module->set_phpboost_module_id(HomeLandingBlog::MODULE_BLOG); $module->hide(); $modules[] = $module->get_properties(); ?>
/HomeLanding/additional/init/
Cette déclaration est nécessaire si le module HomeLanding n'est pas déjà installé, ou s'il est amené à être réinstallé.
Créer un fichier
/HomeLanding/additional/add/AdditionalInit.php
Code PHP :
<?php $module = new HomeLandingModule(); $module->set_module_id(HomeLandingBlog::MODULE_BLOG); $module->set_phpboost_module_id(HomeLandingBlog::MODULE_BLOG); $module->hide(); $modules[] = $module->get_properties(); ?>
Formulaire pour le module
/HomeLanding/additional/form/
Les champs de formulaire pour le module dans la configuration de HomeLanding
Créer le fichier
/HomeLanding/additional/form/AdditionalForm.php
Code PHP :
<?php if ($this->modules[HomeLandingBlog::MODULE_BLOG]->is_active()) { $fieldset_blog = new FormFieldsetMultitabsHTML('admin_blog', $this->lang['homelanding.module.display'] . ModulesManager::get_module($this->modules[HomeLandingBlog::MODULE_BLOG]->get_module_id())->get_configuration()->get_name(), array('css_class' => 'tabs tabs-animation') ); $form->add_fieldset($fieldset_blog); $fieldset_blog->add_field(new FormFieldCheckbox('blog_enabled', $this->lang['homelanding.show.full.module'], $this->modules[HomeLandingBlog::MODULE_BLOG]->is_displayed(), array( 'class'=> 'custom-checkbox', 'events' => array('click' => ' if (HTMLForms.getField("blog_enabled").getValue()) { HTMLForms.getField("blog_limit").enable(); } else { HTMLForms.getField("blog_limit").disable(); }' ) ) )); $fieldset_blog->add_field(new FormFieldNumberEditor('blog_limit', $this->lang['homelanding.items.number'], $this->modules[HomeLandingBlog::MODULE_BLOG]->get_elements_number_displayed(), array( 'min' => 1, 'max' => 100, 'hidden' => !$this->modules[HomeLandingBlog::MODULE_BLOG]->is_displayed() ), array(new FormFieldConstraintIntegerRange(1, 100)) )); } ?>
/HomeLanding/additional/save/
La sauvegarde des choix effectués dans le formulaire
Créer le fichier
/HomeLanding/additional/save/AdditionalSave.php
Code PHP :
<?php if ($this->modules[HomeLandingBlog::MODULE_BLOG]->is_active()) { if ($this->form->get_value('blog_enabled')) { $this->modules[HomeLandingBlog::MODULE_BLOG]->display(); $this->modules[HomeLandingBlog::MODULE_BLOG]->set_elements_number_displayed($this->form->get_value('blog_limit')); } else $this->modules[HomeLandingBlog::MODULE_BLOG]->hide(); } ?>
/HomeLanding/additional/submit/
L'état d'affichage des champs après validation du formulaire.
Créer le fichier
/HomeLanding/additional/submit/AdditionalSubmit.php
Code PHP :
<?php if ($this->modules[HomeLandingBlog::MODULE_BLOG]->is_active()) { $this->form->get_field_by_id('blog_limit')->set_hidden(!$this->modules[HomeLandingBlog::MODULE_BLOG]->is_displayed()); } ?>
Récupération de données et templates
Deux cas de module sont possibles :
- le module est un module "core" = module construit sur le tronc commun du "cœur" de PHPBoost mis en place depuis la version 6.0 (Actualités, Articles, Pages, Sondages).
- le module est un module "base" = module construit sur la "base" originelle de construction d'un module.
Dans les deux cas il faut ajouter la variable d'affichage de template dans le template principal de HomeLanding :
/HomeLanding/templates/home.tpl
Chercher
// Additional modules
A la suite, ajouter
Code TPL :
# INCLUDE BLOG #
Les modules "core"
/HomeLanding/additional/home/
Déclaration de la variable d'affichage du module
Créer un fichier
/HomeLanding/additional/home/AdditionalHome.php
Code PHP :
<?php if ($this->modules[HomeLandingBlog::MODULE_BLOG]->is_displayed() && CategoriesAuthorizationsService::check_authorizations(Category::ROOT_CATEGORY, HomeLandingBlog::MODULE_BLOG)->read()) $this->view->put('BLOG', HomeLandingDisplayItems::build_view(HomeLandingBlog::MODULE_BLOG)); ?>
Les modules "base"
/HomeLanding/services/modules/
Récupération des données et déclaration du template du module
Créer le fichier
/HomeLanding/services/modules/HomeLandingBlog.class.php
Code PHP :
<?php class HomeLandingBlog { const MODULE_BLOG = "blog"; public static function get_blog_view() { $now = new Date(); $module_config = BlogConfig::load(); $home_config = HomeLandingConfig::load(); $modules = HomeLandingModulesList::load(); $module_name = self::MODULE_BLOG; $theme_id = AppContext::get_current_user()->get_theme(); if (file_exists(PATH_TO_ROOT . '/templates/' . $theme_id . '/modules/HomeLanding/pagecontent/' . $module_name . '.tpl')) $view = new FileTemplate('/templates/' . $theme_id . '/modules/HomeLanding/pagecontent/' . $module_name . '.tpl'); elseif (file_exists(PATH_TO_ROOT . '/HomeLanding/templates/pagecontent/' . $module_name . '.tpl')) $view = new FileTemplate('/HomeLanding/templates/pagecontent/' . $module_name . '.tpl'); else $view = new FileTemplate('HomeLanding/pagecontent/items.tpl'); $home_lang = LangLoader::get_module_langs('HomeLanding'); $module_lang = LangLoader::get_module_langs($module_name); $view->add_lang(array_merge(LangLoader::get_all_langs(), $home_lang, $module_lang)); $authorized_categories = CategoriesService::get_authorized_categories(Category::ROOT_CATEGORY, $module_config->is_summary_displayed_to_guests(), $module_name); $result = PersistenceContext::get_querier()->select('SELECT blog.*, member.*, cat.rewrited_name AS rewrited_name_cat FROM ' . PREFIX . 'blog blog LEFT JOIN ' . PREFIX . 'blog_cats cat ON cat.id = blog.id_category LEFT JOIN ' . DB_TABLE_MEMBER . ' member ON member.user_id = blog.author_user_id WHERE (published = 1 OR (published = 2 AND publishing_start_date < :timestamp_now AND (publishing_end_date > :timestamp_now OR publishing_end_date = 0))) AND id_category IN :authorized_categories ORDER BY blog.update_date DESC LIMIT :blog_limit', array( 'authorized_categories' => $authorized_categories, 'user_id' => AppContext::get_current_user()->get_id(), 'timestamp_now' => $now->get_timestamp(), 'blog_limit' => $modules[$module_name]->get_elements_number_displayed() )); $view->put_all(array( 'C_NO_ITEM' => $result->get_rows_count() == 0, 'C_VIEWS_NUMBER' => true, 'C_GRID_VIEW' => $module_config->get_display_type() == BlogConfig::GRID_VIEW, 'C_TABLE_VIEW' => $module_config->get_display_type() == BlogConfig::TABLE_VIEW, 'MODULE_NAME' => $module_name, 'MODULE_POSITION' => $home_config->get_module_position_by_id($module_name), 'ITEMS_PER_ROW' => $module_config->get_items_per_row(), 'L_MODULE_TITLE' => ModulesManager::get_module($module_name)->get_configuration()->get_name(), )); while ($row = $result->fetch()) { $item = new BlogItem(); $item->set_properties($row); $view->assign_block_vars('items', array_merge($item->get_array_tpl_vars(), array( 'C_SEVERAL_VIEWS' => $item->get_views_number() > 1, ))); } $result->dispose(); return $view; } } ?>
/HomeLanding/additional/home/
Déclaration de la variable d'affichage du module dans le template principal de HomeLanding
Créer un fichier
/HomeLanding/additional/home/AdditionalHome.php
Code PHP :
<?php if ($this->modules[HomeLandingBlog::MODULE_BLOG]->is_displayed() && CategoriesAuthorizationsService::check_authorizations(Category::ROOT_CATEGORY, HomeLandingBlog::MODULE_BLOG)->read()) $this->view->put('BLOG', HomeLandingBlog::get_blog_view(HomeLandingBlog::MODULE_BLOG)); ?>
/HomeLanding/templates/pagecontent/
Si les variables de templates du modules sont identiques aux variables de templates communes à tous les modules, le fichier.tpl /HomeLanding/templates/pagecontent/item.tpl peut être utilisé et il n'y a donc pas besoin de template spécifique pour ce module
Sinon, ou si on veut utiliser un template différent, il faut créer un fichier tpl au nom de la constante du module,
/HomeLanding/templates/pagecontent/blog.tpldans lequel il faut à minima déclarer la variable de position pour pouvoir placer le module où l'on veut sur la page d'accueil:
Finaliser l'ajout du module
Maintenant que tous les fichiers sont créés, il faut ajouter le module via la configuration de HomeLanding sur la page
Ajouter des éléments
Vous pouvez maintenant
Valider