CMS Automne

Forum de la communauté du CMS Automne
Nous sommes actuellement le Jeu Nov 14, 2024 6:22 pm

Le fuseau horaire est UTC [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller vers la page 1, 2  Suivant
Auteur Message
MessagePublié: Mar Mai 25, 2010 9:34 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Bonsoir,

Je continue mon exploration d'Automne CMS et j'ai donc à nouveau besoin d'aide.

J'ai créé un module pour gérer les spectacles d'une association. Dans ce module, j'ai un objet Spectacle qui comporte plusieurs champs dont un qui permet de stocker la date à laquelle va avoir lieu le spectacle.

L'idée est de pouvoir créer deux rangées: une qui affiche les spectacles à venir—donc ceux dont la date est supérieure à celle du jour, et une avec les spectacles passés. Et c'est là où je bloque. J'imagine que je dois utiliser la balise <atm-if> mais je ne sais pas commencer récupérer la date du jour afin de gérer la condition. Voici mon début de code:
Code :
<row>
  <block module="spectacles" id="spectacles" language="fr">
    <ul>
      <atm-search what="{Spectacle}" name="spectacles">
        <atm-search-order search="spectacles" type="{Spectacle:Date:fieldID}" direction="asc" />
        <atm-result search="spectacles">
          <atm-if what="{Spectacle:Date:fieldID}>{DateDuJour}">
            <li>{Spectacle:Date:label} - {Spectacle:Lieu:label} <em>{Spectacle:Etablissement:label}</em></li>
          </atm-if>
        </atm-result>
      </atm-search>
    </ul>
  </block>
</row>

J'ai mis {DateDujour} simplement pour illustrer mon code (je me doute bien que ce n'est pas la bonne syntaxe !).
Je ne sais pas non plus si on peut utiliser directement l'opérateur de comparaison > dans le code.

Quelqu'un pourrait-il m'éclairer ?


Dernière édition par Jean-Christophe B. le Mer Mai 26, 2010 10:18 am, édité 1 fois.

Haut
 Profil  
 
MessagePublié: Mer Mai 26, 2010 8:56 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Bonjour Jean-Christophe,

Voila la bonne syntaxe :

Code :
<row>
  <block module="spectacles" id="spectacles" language="fr">
    <ul>
      <?php
      $today = date('Y-m-d');
      ?>
      <atm-search what="{Spectacle}" name="spectacles">
        <atm-search-order search="spectacles" type="{Spectacle:Date:fieldID}" direction="asc" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:string:today}" operator="&gt;" />
        <atm-result search="spectacles">
            <li>{Spectacle:Date:label} - {Spectacle:Lieu:label} <em>{Spectacle:Etablissement:label}</em></li>
        </atm-result>
      </atm-search>
    </ul>
  </block>
</row>


En gros, tu déclares ta date dans une variable PHP, puis tu passes ça en filtre sur ta recherche avec un opérateur pour spécifier que tu cherches uniquement les spectacles supérieurs à cette date.
Pour éviter une erreur de parsing XML, il te faut encoder le '>' dans ton paramètre operator.

Seb


Haut
 Profil  
 
MessagePublié: Mer Mai 26, 2010 10:12 am 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Bonjour Sébastien,

Merci bien, je comprends mon erreur et surtout, j'ai enfin saisi l'utilité de la balise <atm-search-param>. J'avoue qu'au départ, j'avais du mal à définir dans quel cas l'utiliser (d'où mon erreur de partir sur <atm-if>). Cette fois-ci, c'est très clair.

Pour en revenir au code, il manquait simplement le paramètre mandatory et ça fonctionne à merveille. Je reposte le code complet au cas où quelqu'un aurait le même besoin:
Code :
<row>
  <block module="spectacles" id="spectacles" language="fr">
    <ul>
      <?php
      $today = date('Y-m-d');
      ?>
      <atm-search what="{Spectacle}" name="spectacles">
        <atm-search-order search="spectacles" type="{Spectacle:Date:fieldID}" direction="asc" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:string:today}" operator="&gt;" mandatory="true" />
        <atm-result search="spectacles">
            <li>{Spectacle:Date:label} - {Spectacle:Lieu:label} <em>{Spectacle:Etablissement:label}</em></li>
        </atm-result>
      </atm-search>
    </ul>
  </block>
</row>

Je peux donc continuer à avancer sur mon projet... :D


Haut
 Profil  
 
MessagePublié: Mer Mai 26, 2010 10:49 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Jeu Juin 16, 2005 8:05 am
Message(s) : 628
Localisation : Toulouse, France
... suite à ta demande, on est en train de réfléchir sur la possibilité de pouvoir utiliser la syntaxe des variables Automne pour accéder à la date du jour et pouvoir faire des traitements dessus. Si tu as d'autres idées sur le sujet, n'hésites pas.

Pour la date du jour ça pourrait ressembler à {date:today:d/m/Y} pa exemple mais on peut imaginer aussi pouvoir utiliser ce genre de choses {date:+2weeks:format} ...

Pour l'utilité de la balise <atm-search-param>, comme son nom l'indique il sert à spécifier les paramètres d'une recherche dans un module.

Il est vrai que la documentation est peut-être un peu trop succincte sur le sujet
Citer:
Paramètre de recherche :
Code :
<atm-search-param search="searchName" type="paramType" value="paramValue" mandatory="mandatoryValue" />


Permet de limiter les résultats de la recherche à des paramètres donnés.

_________________
Frank
http://www.automne-cms.org


Haut
 Profil  
 
MessagePublié: Mer Mai 26, 2010 5:13 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Frank a écrit:
... suite à ta demande, on est en train de réfléchir sur la possibilité de pouvoir utiliser la syntaxe des variables Automne pour accéder à la date du jour et pouvoir faire des traitements dessus. Si tu as d'autres idées sur le sujet, n'hésites pas.

Pour la date du jour ça pourrait ressembler à {date:today:d/m/Y} pa exemple mais on peut imaginer aussi pouvoir utiliser ce genre de choses {date:+2weeks:format} ...


Effectivement, ça pourrait être bien pratique. Surtout pour les personnes comme moi qui sont très versés HTML/CSS mais un peu moins PHP. Quoique la fonction date(), ça reste assez simple à utiliser...

Je n'ai pas d'idées particulières sur ce sujet pour le moment, mais j'y repenserais à l'occasion... Je suis loin d'en avoir fini avec le développement du projet et il me reste encore pas mal de choses à maîtriser.


Haut
 Profil  
 
MessagePublié: Mer Mai 26, 2010 5:21 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Jeu Juin 16, 2005 8:05 am
Message(s) : 628
Localisation : Toulouse, France
Jean-Christophe B a écrit:
Effectivement, ça pourrait être bien pratique. Surtout pour les personnes comme moi qui sont très versés HTML/CSS mais un peu moins PHP. Quoique la fonction date(), ça reste assez simple à utiliser...


En effet Automne vise clairement les intégrateurs front-end, pour le moment il va falloir encore passer par la fonction date() mais on a noté ça dans la TODO :)

_________________
Frank
http://www.automne-cms.org


Haut
 Profil  
 
MessagePublié: Lun Juin 07, 2010 10:30 am 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Je reprends ce fil car j'ai besoin d'aide sur le code créé précédemment.

Mon besoin maintenant est de créer une liste déroulante pour trier les spectacles passés par année. Voici le code que j'ai créé pour le moment:
Code :
<row>
  <block module="spectacles" id="spectacles" language="fr">
   
    <form action="{page:self:url}" method="get">
      <label for="annee">Année</label><br />
      <select id="annee" name="annee">
        <option value=""> </option>
        <option value="2010">2010</option>
        <option value="2009">2009</option>
      </select>
      <input type="submit" name="search" id="submitSearch" value="ok" />
    </form>
   
    <ul class="liste-spectacles">
      <?php
        $today = date('Y-m-d');
        ?>
      <atm-search what="{Spectacle}" name="spectacles">
        <atm-search-param search="spectacles" type="{Spectacle:Date:formatedValue|Y}" value="{request:int:annee}" mandatory="false" />
        <atm-search-order search="spectacles" type="{Spectacle:Date:fieldID}" direction="asc" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:string:today}" operator="&lt;" mandatory="true" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="block" mandatory="false" />
        <atm-result search="spectacles">
          <li>{Spectacle:Date:formatedValue|d M Y} - {Spectacle:Lieu:label} <em>{Spectacle:Etablissement:label}</em></li>
        </atm-result>
      </atm-search>
    </ul>
  </block>
</row>

Bien entendu, ça ne fonctionne pas.
Pour récupérer l'année de l'objet, j'ai utilisé la syntaxe {Spectacle:Date:formatedValue|Y} que j'ai passé comme valeur type dans un atm-search mais apparemment, ce n'est pas accepté.

Quelle serait donc la bonne syntaxe à utiliser ?
J'ai lu dans un autre fil qu'on pouvait utiliser la fonction getYear() mais j'avoue que je ne sais pas trop comment l'utiliser.

Deux autre questions liées à ce même code:
  • Dans l'affichage de la date des spectacles, j'utilise {Spectacle:Date:formatedValue|d M Y}. Ca fonctionne, mais c'est affiché en anglais. Ai-je oublié quelque chose pour passer l'affichage des dates en français ?
  • Pour le moment, les années de la liste déroulante sont codées en "dur". Comment les générer dynamiquement ?

Merci par avance.
Une fois que j'aurais réglé ces différents points, ça pourra faire un tutoriel bien utile à ajouter dans la documentation. :)


Haut
 Profil  
 
MessagePublié: Lun Juin 07, 2010 10:41 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Pour ta recherche par année, essaye plutôt ça :
Code :
<atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{request:int:annee}-01-01" mandatory="false" operator="&gt;=" />
<?php
        $nextyear = {request:int:annee} + 1;
?>
<atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:int:nextyear}-01-01" mandatory="false" operator="&lt;" />

ça permet de faire une recherche ou tous les éléments sont supérieurs ou égal au 1er janvier de l'année passée et inférieur au 1er janvier de l'année suivante. ça devrait mieux fonctionner.
Attention par contre à cette ligne dans ton code qui sera aussi prise en compte :
Code :
<atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:string:today}" operator="&lt;" mandatory="true" />


Pour l'affichage des dates en français, tu n'as rien oublié mais il te faut la version 4.0.2 d'Automne (qui sort aujourd'hui).
Coder dynamiquement tes années dans ton select est un peu plus délicat. Il te faut d'abord faire une recherche pour trouver l'année de départ de tes spectacles (un atm-search qui ne cherche qu'un seul résultat classé par année décroissante peux te faire ça). Puis, il te faut faire une boucle en PHP (un while fera l'affaire) pour créer toutes les options de ton select depuis cette date et jusqu'à aujourd'hui.

Dis moi si tu galères je t'aiderai pour ton code.


Haut
 Profil  
 
MessagePublié: Lun Juin 07, 2010 11:27 am 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Pour la recherche par année, c'est ok. Ca fonctionne... :D
Je n 'aurais pas envisagé la solution sous cet angle donc j'ai bien fait de poser la question.

En ce qui concerne l'affichage des années, je vais me pencher dessus et j'appellerais à l'aide si ça ne va pas.

Et merci pour les précisions concernant la version 4.0.2.
Je mettrais donc à jour dès qu'elle sera publiée.


Haut
 Profil  
 
MessagePublié: Lun Juin 07, 2010 11:36 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Jeu Juin 16, 2005 8:05 am
Message(s) : 628
Localisation : Toulouse, France
Jean-Christophe B. a écrit:
Et merci pour les précisions concernant la version 4.0.2.
Je mettrais donc à jour dès qu'elle sera publiée.


Attention ça sort du four, c'est encore chaud :)
http://www.automne.ws/web/fr/5-blog.php?item=530

_________________
Frank
http://www.automne-cms.org


Haut
 Profil  
 
MessagePublié: Lun Juin 07, 2010 12:58 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Frank a écrit:
Jean-Christophe B. a écrit:
Et merci pour les précisions concernant la version 4.0.2.
Je mettrais donc à jour dès qu'elle sera publiée.


Attention ça sort du four, c'est encore chaud :)
http://www.automne.ws/web/fr/5-blog.php?item=530


Super! Bravo à l'équipe pour cette mise à jour très riche en nouveautés...
Je vais à jour de suite, histoire de profiter des nouvelles possibilités!


Haut
 Profil  
 
MessagePublié: Mar Juin 08, 2010 1:21 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
J'ai finalement simplifié la situation pour la liste déroulante. Je connais l'année du 1er spectacle donc celle-ci reste fixe. Voici donc le code pour le moment (il me reste juste à récupérer l'année en cours avec PHP, à la place de 2010):
Code :
<row>
  <block module="spectacles" id="spectacles" language="fr">
    <form action="{page:self:url}" method="get" id="tri-annee">
      <label for="annee">Sélectionner une année</label>
      <select id="annee" name="annee">
        <?php         
          for($a=2006; $a<=2010; $a++) {       
            print '<option value="'.$a.'">'.$a.'</option>';
          } ?>     
      </select>
      <input type="submit" name="search" id="submitSearch" value="ok" />
    </form>
   
    <ul class="liste-spectacles">
      <?php
        $today = date('Y-m-d');
        ?>
      <atm-search what="{Spectacle}" name="spectacles">
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{request:int:annee}-01-01" mandatory="false" operator="&gt;=" />
        <?php $nextyear = {request:int:annee} + 1;?>
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:int:nextyear}-01-01" mandatory="false" operator="&lt;" />
        <atm-search-order search="spectacles" type="{Spectacle:Date:fieldID}" direction="asc" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="{var:string:today}" operator="&lt;" mandatory="true" />
        <atm-search-param search="spectacles" type="{Spectacle:Date:fieldID}" value="block" mandatory="false" />
        <atm-result search="spectacles">
          <li>{Spectacle:Date:label} - {Spectacle:Lieu:label} <em>{Spectacle:Etablissement:label}</em></li>
        </atm-result>
      </atm-search>
    </ul>
  </block>
</row>

Ca fonctionne, mais les options s'affichent en tout début de bloc, et non pas dans le <select>. Voici le code source:
Code :
<option value="2006">2006</option><option value="2007">2007</option><option value="2008">2008</option><option value="2009">2009</option><option value="2010">2010</option>
<form action="XXX/web/13-spectacles-passes.php" method="get" id="tri-annee">
   <label for="annee">Sélectionner une année</label>
   <select id="annee" name="annee">
   
   </select>
   <input type="submit" name="search" id="submitSearch" value="ok" />
</form>
 

Etonnant, non ? Serait-je passé à côté de quelque chose ?


Haut
 Profil  
 
MessagePublié: Mar Juin 08, 2010 2:39 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Tu ne dois pas faire :
Citer:
print '<option value="'.$a.'">'.$a.'</option>';

Mais plutôt :
Code :
$content .= '<option value="'.$a.'">'.$a.'</option>';


Le contenu des rangées polymod est mis dans cette variable $content, il n'est pas envoyé directement au navigateur.

Pour l'année en cours en PHP c'est simple, tu fais
Code :
for($a = 2006; $a <= date('Y'); $a++) {


Haut
 Profil  
 
MessagePublié: Mar Juin 08, 2010 3:07 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
Ah, je comprends mieux. J'ai dû passer à côté de cette info dans la doc...
Bref, cette fois-ci mes options s'affichent bien là où elles doivent être. :)


Haut
 Profil  
 
MessagePublié: Mer Juin 09, 2010 2:02 pm 
Hors-ligne

Inscrit(e) le : Sam Mars 27, 2010 12:47 pm
Message(s) : 37
Localisation : Nantes
J'ai une petite question supplémentaire, un peu plus générale.
Dans le cas où un objet n'aurait pas de champ Date, peut-on se baser sur le date de publication de l'objet pour faire le tri ? Par exemple:
Code :
<atm-search-param search="spectacles" type="publication date after" value="{request:int:annee}-01-01" mandatory="false" />
      <?php $nextyear = {request:int:annee} + 1;?>
      <atm-search-param search="spectacles" type="publication date before" value="{var:int:nextyear}-01-01" mandatory="false" />

Je viens de tester, mais ça ne fonctionne pas. A mon avis, je n'ai pas encore bien compris le fonctionnement de "publication date".
Quelle serait la bonne méthode ? Faut-il également ajouter un opérateur de comparaison ?

Je pose la question car j'aimerais faire des tri annuels sur d'autres objets, qui eux n'ont pas de champ Date.
Au pire, je pourrais toujours créer un champ Date qui se remplit automatiquement, et m'en servir pour le tri...


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller vers la page 1, 2  Suivant

Le fuseau horaire est UTC [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 73 invité(s)


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Recherche de:
Aller vers :  
Powered by phpBB® Forum Software © phpBB Group
Traduit par Maël Soucaze et Elglobo © phpBB.fr