VI. Tutoriels communautaires

Ajouter des images sur les catégories du forum | PHPBoost 5.2+

Dernière mise à jour : 08/03/2022 à 15h23
Objectif: Ajouter une vignette personnalisée devant le nom des catégories/forum du forum.

Cette option a été intégrée nativement dans la version 6.0

Base de données


Objectif: Ajouter une colonne dans la table des catégories du forum.

Dans l'Administration/Outils/Base de données/Requêtes SQL
Taper
Code SQL :
ALTER TABLE `phpboost_forum_cats` ADD `thumbnail` VARCHAR( 255 ) AFTER `url` ;

puis Exécuter

Fonctions php


Objectif: création des relations avec la base de données

Dans le fichier /forum/services/ForumCategory.class.php
après
Code PHP :
private $url;
ajouter
Code PHP :
private $thumbnail;


après
Code PHP :
public function get_url()
{
    return $this->url;
}

ajouter
Code PHP :
public function set_thumbnail($thumbnail)
{
    $this->thumbnail = $thumbnail;
}
public function get_thumbnail()
{
    return $this->thumbnail;
}


après
Code PHP :
'url' => $this->get_url(),
ajouter
Code PHP :
'thumbnail' => $this->get_thumbnail()
!!Attention à bien mettre la "," entre les deux

après
Code PHP :
$this->set_url($properties['url']);
ajouter
Code PHP :
$this->set_thumbnail($properties['thumbnail']);


Au cas où le module venait à être désinstallé/réinstallé, cet ajout permettra de ne pas avoir à recommencer la déclaration SQL :
après
Code PHP :
'rewrited_name' => array('type' => 'string', 'length' => 250, 'default' => "''"),
ajouter
Code PHP :
'thumbnail' => array('type' => 'string', 'length' => 255, 'default' => "''"),


Formulaire


Objectif: ajouter la déclaration de la vignette dans le formulaire d'ajout/édition des catégories

Fichiers de langue


forum/lang/french/common.php :
$lang['forum.label.thumbnail'] = 'Vignette';

forum/lang/english/common.php :
$lang['forum.label.thumbnail'] = 'Thumbnail';


Fichier du formulaire


Dans le fichier /forum/controllers/categories/ForumCategoryFormController.class.php

On déclare le champ Vignette
après
Code PHP :
$fieldset->add_field(new FormFieldTextEditor('rewrited_name', self::$common_lang['form.rewrited_name'], $this->get_category()->get_rewrited_name(), array(
    'description' => self::$common_lang['form.rewrited_name.description'],
    'hidden' => !$this->get_category()->rewrited_name_is_personalized()
), array(new FormFieldConstraintRegex('`^[a-z0-9\-]+$`iu'))));

ajouter
Code PHP :
$fieldset->add_field(new FormFieldUploadPictureFile('thumbnail', LangLoader::get_message('forum.label.thumbnail', 'common', 'forum'), $this->get_category()->get_thumbnail()));


On sauvegarde ce qui a été renseigné dans le champ Vignette
après
Code PHP :
if ($this->get_category()->get_type() == ForumCategory::TYPE_URL)
    $this->get_category()->set_url($this->form->get_value('url'));
else
    $this->get_category()->set_url('');

ajouter
Code PHP :
if ($this->form->get_value('thumbnail'))
    $this->get_category()->set_thumbnail($this->form->get_value('thumbnail'));


Variables de template


Objectif: récupérer les données des vignettes et les afficher

/forum/controllers/ForumHomeController.class.php


On ajoute la vignette dans la liste des données à afficher
après
Code PHP :
$result = PersistenceContext::get_querier()->select('SELECT c.id AS cid, c.id_parent, c.name, c.rewrited_name,
insérer
Code PHP :
c.thumbnail, 


On défini les variables d'affichage
après
Code PHP :
if ($row['id_parent'] == Category::ROOT_CATEGORY)
{
    $this->view->assign_block_vars('forums_list.cats', array(
ajouter
Code PHP :
'C_HAS_THUMBNAIL' => !empty($row['thumbnail']),
'U_THUMBNAIL' => Url::to_rel($row['thumbnail']),


idem après
Code PHP :
if ($display_cat) 
{
    $this->view->assign_block_vars('forums_list.cats', array(


et après
Code PHP :
$this->view->assign_block_vars('forums_list.subcats', array_merge(
Date::get_array_tpl_vars($last_msg_date, 'LAST_MSG_DATE'), array(


/forum/templates/forum_index.tpl


On déclare les variables d'affichage
Dans le tableau
après
Code HTML :
<th class="forum-announce-topic"><i class="fa fa-eye" aria-hidden="true"></i></th>
ajouter
Code HTML :
<th class="forum-announce-topic"></th>


après
Code HTML :
<td class="forum-announce-topic">
    <i class="fa fa-globe" aria-hidden="true"></i>
</td>
ajouter
Code HTML :
<td class="forum-announce-topic">
    # IF forums_list.subcats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{forums_list.subcats.U_THUMBNAIL}" alt="{forums_list.subcats.NAME}" /># ENDIF #
</td>


après
Code HTML :
<td class="forum-announce-topic">
    <i class="fa # IF forums_list.subcats.C_BLINK #blink # ENDIF #{forums_list.subcats.IMG_ANNOUNCE}" aria-hidden="true"></i>
</td>
ajouter
Code HTML :
<td class="forum-announce-topic">
    # IF forums_list.subcats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{forums_list.subcats.U_THUMBNAIL}" alt="{forums_list.subcats.NAME}" /># ENDIF #
</td>


/forum/templates/forum_index.tpl


On déclare les variables d'affichage
Remplacer
Code HTML :
&nbsp;<a href="{forums_list.cats.U_FORUM_VARS}" class="forum-link-cat" title="{forums_list.cats.NAME}">{forums_list.cats.NAME}</a>
par
Code HTML :
&nbsp;<a href="{forums_list.cats.U_FORUM_VARS}" class="forum-link-cat" title="{forums_list.cats.NAME}">
    # IF forums_list.cats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{forums_list.cats.U_THUMBNAIL}" alt="{forums_list.cats.NAME}" /># ENDIF #
    {forums_list.cats.NAME}
</a>


/forum/forum.php


On ajoute la vignette dans la liste des données à afficher pour les sous-catégories
après
Code PHP :
$result = PersistenceContext::get_querier()->select('SELECT c.id AS cid, c.id_parent, c.name, c.rewrited_name,
insérer
Code PHP :
c.thumbnail, 


On défini les variables d'affichage
après
Code PHP :
$tpl->assign_block_vars('subcats', array_merge(
Date::get_array_tpl_vars($last_msg_date, 'LAST_MSG_DATE'), array(
ajouter
Code PHP :
'C_HAS_THUMBNAIL' => !empty($row['thumbnail']),
'U_THUMBNAIL' => Url::to_rel($row['thumbnail']),


après
Code PHP :
$tpl->assign_block_vars('syndication_cats', array(
ajouter
Code PHP :
'C_HAS_THUMBNAIL' => !empty($cat->get_thumbnail()),
'U_THUMBNAIL' => Url::to_rel($cat->get_thumbnail()),


/forum/templates/forum_forum.tpl


On déclare les variables d'affichage
après
Code HTML :
<th class="forum-announce-topic"><i class="fa fa-eye" aria-hidden="true"></i></th>
ajouter
Code HTML :
<th class="forum-announce-topic"></th>


après
Code HTML :
<td class="forum-announce-topic">
    <i class="fa fa-globe fa-2x" aria-hidden="true"></i>
</td>
ajouter
Code HTML :
<td class="forum-announce-topic">
    # IF subcats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{subcats.U_THUMBNAIL}" alt="{subcats.NAME}" /># ENDIF #
</td>


après
Code HTML :
<td class="forum-announce-topic">
    <i class="fa # IF subcats.C_BLINK #blink # ENDIF #{subcats.IMG_ANNOUNCE}" aria-hidden="true"></i>
</td>
ajouter
Code HTML :
<td class="forum-announce-topic">
    # IF subcats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{subcats.U_THUMBNAIL}" alt="{subcats.NAME}" /># ENDIF #
</td>


après
Code TPL :
# START syndication_cats #
ajouter
Code HTML :
# IF syndication_cats.C_HAS_THUMBNAIL #<img class="forum-cat-thumbnail" src="{syndication_cats.U_THUMBNAIL}" alt="{syndication_cats.LABEL}" /># ENDIF #

le refaire plus bas si on veut les voir apparaitre sous les tableaux

/forum/templates/forum.css


On limite la taille des images
Ajouter
Code CSS :
.forum-cat-thumbnail {
    max-width: 25px;
    max-height: 25px;
}

Cette page a été vue 4248 fois