Fork me on GitHub






Programmer l'affichage d'un bloc pour une date choisie
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
Régulièrement, j'ai besoin d'afficher un bloc avec des informations valable une journée seulement.
Par exemple, j'affiche les évènements marquants arrivés à la date du jour (même jour, même mois), mais quelques années en arrière.

Il était assez contraignant de devoir préparer mon bloc pendant la nuit, ou l'afficher à 10h du matin seulement.

J'ai donc cherché une méthode (simple) me permettant de saisir quelques blocs à l'avance, et de ne les faire s'afficher qu'à une date précise.

J'ai donc attaqué la question du côté du thème, avec un petit coup de smarty pour gérer ça.

L'explication ci-dessous, je l'utilise depuis des mois sur xoops 2.0.18, et là je viens de le refaire sur une version 2.3.2 (la version de xoops ne joue de toute façon pas, puisque l'on agit uniquement sur les fichiers du thème).

J'utilise donc le thème par défaut de xoops 2.3.2

Je pars du principe que je veux afficher mon bloc dans la colonne de droite.
J'ai créé deux blocs (un pour aujourd'hui (10/12/2008), l'autre pour le lendemain (11/12/2008)).
La particularité de mon nommage de blocs, est que j'ajoute le jour et le mois où le bloc doit être affiché, juste avant le nom réel du bloc à afficher.
Pour l'instant, mes deux blocs apparaissent tels quels sur mon site.
Les deux blocs portent les noms que j'ai choisi, et les deux sont visibles au même moment.

Open in new window

A présent, j'attaque les modifications concernant le thème, afin d'ajouter quelques conditions, et n'afficher que le(s) bloc(s) dont le début du nom correspond à la date du jour (JJMM).
Je trouve le fichier qui gère l'affichage des blocs de droite pour le thème par défaut de xoops 2.3.2
/themes/default/theme_blockright.html dans ce cas.

Dont le contenu actuel est :
<{if $block.title}>
    <
div class="blockTitle"><{$block.title}></div>
<{/if}>
<
div class="blockContent"><{$block.content}></div>


Je commence par créer une variable de date au tout début du fichier (1ère ligne)
<{assign var=newstoday value=$smarty.now|date_format:"%d%m"}>


Cette variable contient simplement la date du jour sous la forme JJMM.

Je vais à présent ajouter des tests/conditions sur le nom du bloc pour décider s'il doit être affiché ou pas.

Je remplace :
<{if $block.title}>


Par :
<{if $block.title == $newstoday|cat:'Même jour'}>


Ou directement :
<{if $block.title == $newstoday|cat:'Même jour'}>


Qui a pour but de tester si le nom du bloc contient JJMMMême jour (par exemple : 1012Même jour).
Avec cette première modification, j'obtiens bien à l'écran, un seul bloc correspondant à la date du jour.
Mais le titre n'est pas corrigé.

Open in new window

Je vais donc remplacer :
<div class="blockTitle"><{$block.title}></div>


Par :
<div class="blockTitle"><{$block.title|replace:$newstoday:""}></div>


Je retrouve bien à présent, mon bloc correspondant à la date du jour, avec un nom correct.

Open in new window

Mon nouveau code pour le fichier /themes/default/theme_blockright.html, est donc :
<{assign var=newstoday value=$smarty.now|date_format:"%d%m"}>
<{if 
$block.title == $newstoday|cat:'Même jour'}>
<
div class="blockTitle"><{$block.title|replace:$newstoday:""}></div>
<
div class="blockContent"><{$block.content}></div>
<{/if}>


Je peux ainsi programmer à l'avance tous les blocs que je veux voir apparaître/disparaître automatiquement.
Il suffit de modifier les fichiers du thème concernés (bloc de gauche, droite, centre...).

ATTENTION : Pour le moment, avec ce code, je gère uniquement les blocs programmés, dans la colonne de droite.
Que faire si j'ai aussi des blocs qui doivent être affichée de manière permanente dans cette colonne de droite ?

Nous allons modifier encore un peu le fichier /themes/default/theme_blockright.html pour régler ça.
<{assign var=newstoday value=$smarty.now|date_format:"%d%m"}>
<{if 
$block.title == "Permanent"}>
<
div class="blockTitle"><{$block.title}></div>
<
div class="blockContent"><{$block.content}></div>
<{elseif 
$block.title == $newstoday|cat:'Même jour'}>
<
div class="blockTitle"><{$block.title|replace:$newstoday:""}></div>
<
div class="blockContent"><{$block.content}></div>
<{/if}>


Pour chaque bloc de ma colonne de droite, je vais d'abord tester si le bloc correspond à un bloc qui doit être affiché en permanence (ici nommé 'Permanent'), auquel cas, je l'affiche tel quel.
Sinon, je continue mes tests, et vérifie sur le bloc contient la date du jour, auquel cas, je l'affiche également.

Open in new window

Et un dernier cas de figure : celui où j'ai plusieurs blocs permanents à afficher (Permanent1, Permanent2 et Permanent3).
J'utilise alors ce code :
<{assign var=newstoday value=$smarty.now|date_format:"%d%m"}>
<{if 
$block.title == "Permanent1" || $block.title == "Permanent2" || $block.title == "Permanent3"}>
<
div class="blockTitle"><{$block.title}></div>
<
div class="blockContent"><{$block.content}></div>
<{elseif 
$block.title == $newstoday|cat:'Même jour'}>
<
div class="blockTitle"><{$block.title|replace:$newstoday:""}></div>
<
div class="blockContent"><{$block.content}></div>
<{/if}>


Je retrouve donc mes 3 blocs permanents, ainsi que mon bloc changeant quotidiennement.

Open in new window

Et pour finir, de la même façon, si vous souhaitez également gérer plusieurs blocs programmés (fêtes du jour, citations), voici le code à utiliser.
<{assign var=newstoday value=$smarty.now|date_format:"%d%m"}>
<{if 
$block.title == "Permanent1" || $block.title == "Permanent2" || $block.title == "Permanent3"}>
<
div class="blockTitle"><{$block.title}></div>
<
div class="blockContent"><{$block.content}></div>
<{elseif 
$block.title == $newstoday|cat:'Même jour' || $block.title == $newstoday|cat:'Fêtes du jour' || $block.title == $newstoday|cat:'Citations'}>
<
div class="blockTitle"><{$block.title|replace:$newstoday:""}></div>
<
div class="blockContent"><{$block.content}></div>
<{/if}>


ATTENTION : Si vous ajoutez des nouveaux blocs (ou si vous en renommez), à bien changer le contenu de ces codes dans vos fichiers de thème, pour continuer à avoir un affichage correct.

Si l'affichage conditionnel des blocs ne semble pas fonctionner, faites le test avec des noms de blocs sans caractères accentués, juste pour vous assurer que votre code est bon.
Et ensuite, il faudra éventuellement adapter le code en utilisant éventuellement les codes ascii pour vos lettres accentuées).

Posté le : 10/12/2008 13:39
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

28 Personne(s) en ligne (18 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 28 | Plus ...