Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 03/02/2014 17:32:32

webupsud
Guest
Registered: 21/01/2014
Posts: 77

calendrier agenda personnalisé

Bonjour,

Je cherche à intégrer un nouveau skin pour le service agenda affiché sous forme de mini calendrier en colonne de droite. J'ai donc été récupérer le code source du service, à savoir ce fichier dans sa version 1.3


Est-ce le bon ? Ensuite, j'aurais besoin de récupérer pour chaque événement sa date de début et sa date de fin, mais sous cette forme data-start-time="1389704445", data-end-time="1389634410", data-date="1389704445", il s'agit d'un timestamp Unix.

Est-ce que l'on peut gérer ce format avec Ametys ? Comment ?

Merci

Offline

#2 03/02/2014 19:17:36

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Oui ça à l'air d'être le bon fichier.
Les dates que nous envoyons sont au format ISOjesaisplusquoi smile soit : YYYY-MM-DD'T'HH:MM:ss ex 2014-02-03T17:12:32

La conversion peut elle être fait en JS ? ça serait nettement plus facile

<script>
     var d = new Date("<xsl:value-of select="substring-before(content/metadata/start-date, 'T')").getTime() / 1000;
</script>

Par exemple

>>> new Date("2014-02-03").getTime() / 1000
1391385600

Raphael Franchet
Expert Ametys

Offline

#3 04/02/2014 20:22:13

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

merci pour la réponse, je regarde cela dès que possible

Offline

#4 06/02/2014 19:05:04

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

je n'obtiens aucun résultat en retour pour cette fonction  :

<xsl:value-of select="substring-before(content/metadata/start-date, 'T')" />

j'ai essayé d'afficher juste la valeur content/metadata/start-date, toujours aucun résultat.

Autre interrogation, est-ce possible dans mon fichier xsl de copier le script ci-dessus puis d'appeler la variable de cette manière ? (il ne semble pas reconnaitre ma variable par ailleurs)

<div class="agenda_date" data-date="$d">

merci

Offline

#5 07/02/2014 10:28:10

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Faites une copie de tout le content pour voir la tête de votre XML d'entrée

<xsl:copy-of select="."/>

Il faut des accolades pour valuer une variable XSL dans une balise autre

<div class="agenda_date" data-date="{$d}">

Raphael Franchet
Expert Ametys

Offline

#6 07/02/2014 18:58:57

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

Le bon script serait

<script>
                                                    var d = new Date("<xsl:value-of select="$day/@date" />").getTime() / 1000;
                                                  </script>

cependant, une fois que la variable d est définie, je ne peux pas la récupérer dans mon xsl de cette manière

<div class="agenda_date" data-date="{$d}">

j'avais éventuellement pensé à écrire un template xsl qui écrirait la valeur d, mais puis-je ensuite faire quelquechose comme ca :

<div class="agenda_date" data-date="template_name">

Offline

#7 07/02/2014 19:13:53

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

<div class="agenda_date" data-date="{$d}">

eh non smile comme indiqué ci-dessus, d est une variable javascript !!! pas du tout accessible en xsl donc.

Non appeler un template pour remplir un attribut s'écrit comme ceic:

<div class="agenda_date">
    <xsl:attribute name="data-date"><xsl:call-template name="template_name"/></xsl:attribute>
    ...
</div>

Raphael Franchet
Expert Ametys

Offline

#8 10/02/2014 19:45:55

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

J'ai essayé ceci sans succès :

<xsl:attribute name="data-date"><xsl:call-template name="timestamp"><xsl:with-param name="date" select="{$day/@date}"/></xsl:call-template></xsl:attribute>

<xsl:template name="timestamp">
        <script type="text/javascript">
            var d = new Date("<xsl:value-of select="$date" />").getTime() / 1000;
            return d;
        </script>
    </xsl:template> 

L'erreur que j'obtiens
Caused by: javax.xml.transform.TransformerException: Un chemin d'emplacement était attendu, mais le jeton suivant a été détecté : { at
    </xsl:template>

Last edited by webupsud (10/02/2014 19:47:19)

Offline

#9 10/02/2014 23:01:41

Cédric Damioli
Ametys Product Manager
From: Toulouse
Registered: 10/08/2010
Posts: 323

Re: calendrier agenda personnalisé

c'est juste que dans une instruction <xsl:with-param>, il ne faut pas utiliser de '{' autour de la valeur

Ca donne donc :

<xsl:attribute name="data-date"><xsl:call-template name="timestamp"><xsl:with-param name="date" select="$day/@date"/></xsl:call-template></xsl:attribute>

Offline

#10 10/02/2014 23:05:02

Cédric Damioli
Ametys Product Manager
From: Toulouse
Registered: 10/08/2010
Posts: 323

Re: calendrier agenda personnalisé

Et en y regardant de plus près, il vous manque aussi une instruction <xsl:param> dans votre template :

<xsl:template name="timestamp">
--->        <xsl:param name="date"/>      <----
        <script type="text/javascript">
            var d = new Date("<xsl:value-of select="$date" />").getTime() / 1000;
            return d;
        </script>
    </xsl:template>  

Offline

#11 11/02/2014 10:24:37

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Mais ensuite cela ne fonctionnera pas : vous ne pouvez pas injecter une balise <script> dans un attribute html.
Soit, vous faite le calcul entièrement en XSL,
Soit vous injectez l'attribut en javascript (en générant un id unique par exemple puis avec jquery $j('#<xsl:value-of select="$uniqueId"/>').attribute()

Pensez bien que le XSL s'execute en 1er coté serveur, puis le client télécharge le HTML généré et execute le javascript


Raphael Franchet
Expert Ametys

Offline

#12 11/02/2014 13:03:13

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

Merci, c'est bien ce que je craignais, c'est un brin compliqué. Je vais essayer de voir si je ne peux pas changer le format de la date sur le service pour éviter cette conversion compliquée.

Offline

#13 17/02/2014 15:40:54

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

Bonjour

Après avoir changé le format de la date, j'aurais besoin de quelques informations sur un événement (contenu de type actualités) pour afficher ses métadonnées en miniature dans l'agenda. Voici le code que je génère pour l'instant :

<li class="agenda_event-item">
                                                      <xsl:variable name="url" select="resolver:resolve('page', $link)"/>
                                                      <a class="agenda_event" href="{$url}" data-start-time="{$day/@date}" data-end-time="{$day/@date}">
                                                                                                               
                                                        <div class="agenda_event_picture">
                                                          <img class="agenda_event_img" src="{ametys:skinURL('img/square-2.jpg)}"/>
                                                        </div>
                                                        <div class="agenda_event_title"><xsl:value-of select="escaper:escapeJavaScript(content/metadata/title)"/>
                                                 
                                                        </div>
                                                        <div class="agenda_event_schedule"><i class="icon-time"></i><xsl:value-of select="escaper:escapeJavaScript(content/metadata/abstract)"/></div>
                                                      </a>
                                                    </li> 

Le titre et l'abstract fonctionne bien, je les affiche déjà correctement. Par contre j'aurais besoin dans ce code ci d'insérer le lien vers l'événement pour en savoir plus, et d'autre part l'image source de cet événement qui correspond à l'image insérée dans l'article. Comment obtenir ces deux informations ?

Merci

Offline

#14 17/02/2014 15:48:04

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

Je précise que je suis ici dans une boucle qui génère une balise li par événement pour chaque jour où un événement figure dans l'agenda. Ce sont donc l'image d'un événement et l'url d'un événément associé dont j'ai besoin.

Pour l'instant, j'ai mis des valeurs fictives :

<a href="{$url}"> renvoie l'url de la page en cours et non pas de la page de l'événement

<img src="{ametys:skinURL('img/square-2.jpg)}"/> est une image fixe et non pas une image saisie par l'utilisateur dans le CMS pour illustrer l'événement.

Offline

#15 17/02/2014 18:33:38

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

pouvez-vous copier le XML que vous avez en entrée du service ?


Raphael Franchet
Expert Ametys

Offline

#16 17/02/2014 19:08:44

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

oui, j'obtiens cela en faisant un <xsl:copy-of select="." /> :

<day day="28" month="10" year="2013" date="2013-10-28" raw="2013-10-28T00:00:00.000+01:00"></day>

mais je pense qu'il vaut mieux partir sur le code de l'événement. En faisant un <xsl:copy-of select="/events/contents/event" />, j'obtiens :

<event end="2014-02-11" start="2014-02-10">
<description>Du Evenement 1 du calendrier au 2014-02-10</description>
<view>
<content id="defaultWebContent://784f8a9e-d33b-4656-8c3a-672a244843db" lastmodifiedat="2014-02-17T14:16:41.181+01:00" title="Evenement 1 du calendrier" name="evenement-1-calendrier-actualite">
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>Evenement 1 du calendrier</title>
<link rel="stylesheet" type="text/css" href="/cms/live/skins/demo/resources/css/content/content.css" media="screen, print, handheld">
<link rel="stylesheet" type="text/css" href="/cms/live/skins/demo/resources/css/content/news.css" media="screen, print, handheld">
<meta name="DC.title" content="Evenement 1 du calendrier">
<meta name="DC.creator" content="admin">
<meta name="DC.contributor" content="admin">
<meta name="DC.date" content="2014-02-17">
<meta name="DC.type" content="Text">
<meta name="DC.format" content="text/html">
<meta name="DC.identifier" content="defaultWebContent://784f8a9e-d33b-4656-8c3a-672a244843db">
<meta name="DC.language" content="fr">
<meta name="DC.coverage" content="fr">
<link rel="meta" href="/cms/live/plugins/cms/dublincore/content.rdf?contentId=defaultWebContent://784f8a9e-d33b-4656-8c3a-672a244843db">
<meta name="title" content="Evenement 1 du calendrier">
<meta name="start-date" content="2014-02-10T00:00:00.000+01:00">
<meta name="end-date" content="2014-02-11T00:00:00.000+01:00">
<meta name="createdAtRaw" content="2014-02-03T14:02:58.828+01:00">
<meta name="lastModificationRaw" content="2014-02-17T14:16:41.181+01:00">
<meta name="lastContributor" content="admin">
<meta name="lastValidatedAtRaw" content="2014-02-17T14:16:44.587+01:00">
<meta name="pages/page;id" content="page://a3b120d6-4bc3-4e9c-9fc4-e044830fa27e">
<meta name="pages/page;name" content="evenement-1-calendrier">
<meta name="pages/page;path" content="evenement-1-calendrier">
<meta name="pages/page;title" content="evenement 1 calendrier">
<meta name="pages/page;long-title" content="evenement 1 calendrier">
<meta name="pages/page;lang" content="fr">
<meta name="pages/page;site" content="www">
<meta name="pages/page;zone" content="default">
<meta name="pages/page;metadataSetName" content="main">
<div class="ametys-cms-content news view-link vevent wrapper">
</content>
</view>
<content id="defaultWebContent://784f8a9e-d33b-4656-8c3a-672a244843db" commentable="true" lastcontributor="admin" lastvalidatedat="2014-02-17T14:16:44.587+01:00" lastmodifiedat="2014-02-17T14:16:41.181+01:00" creator="admin" createdat="2014-02-03T14:02:58.828+01:00" language="fr" title="Evenement 1 du calendrier" name="evenement-1-calendrier-actualite">
<metadata>
<title>Evenement 1 du calendrier</title>
<start-date>2014-02-10T00:00:00.000+01:00</start-date>
<end-date>2014-02-11T00:00:00.000+01:00</end-date>
<illustration>
<img lastmodified="2014-02-17T14:16:37.327+01:00" size="6473" filename="cuisine-moleculaire-m.jpg" path="illustration/image" mime-type="image/jpeg" type="metadata">
</illustration>
<abstract>De 9h a 18h</abstract>
<content lastmodified="2014-02-17T14:16:41.180+01:00" mime-type="text/xml"></content>
<comment xmlns="http://www.w3.org/1999/xhtml">false</comment>
<contact></contact>
<dc>
</metadata>
<workflow-step id="3" icon-large="/plugins/web/resources/img/workflow/WORKFLOW_STATE_VALIDATED-large.png" icon-medium="/plugins/web/resources/img/workflow/WORKFLOW_STATE_VALIDATED-medium.png" icon-small="/plugins/web/resources/img/workflow/WORKFLOW_STATE_VALIDATED-small.png">Validé</workflow-step>
<dublin-core-metadata>
<tags></tags>
</content>
<pages>
<page id="page://a3b120d6-4bc3-4e9c-9fc4-e044830fa27e" lang="fr" title="evenement 1 calendrier" path="evenement-1-calendrier" site="www" name="evenement-1-calendrier"></page>
</pages>
</event>

Offline

#17 17/02/2014 19:36:53

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

Je m'en suis sorti pour l'url avec ceci
<xsl:value-of select="pages/page[1]/@path"/>

par contre pour l'image c'est sans doute qqchose comme ca qu'il faudrait faire (cf votre remontée de contenu)

<xsl:variable name="type" select="html/head/meta[@name = 'illustration/image;type']/@content"/>   
                                                      <xsl:variable name="file" select="html/head/meta[@name = 'illustration/image;path']/@content"/>
<xsl:variable name="urlimg"><xsl:value-of select="$file"/><xsl:if test="$type = 'metadata'">?contentId=<xsl:value-of select="@id"/></xsl:if></xsl:variable>

<img class="agenda_event_img" src="{resolver:resolveImage($type, $urlimg, 40, 40)}"/>

Offline

#18 18/02/2014 10:45:47

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Pour les liens vers les pages dans la XSL noyau on trouve ceci :

    <xsl:template name="link">
        <xsl:if test="starts-with($link, 'page://')">
            <xsl:variable name="url" select="resolver:resolve('page', $link)"/>
            <xsl:if test="$url != ''">
                <div class="link">
                    <a href="{$url}">
                        <xsl:choose>
                            <xsl:when test="$link-title != ''">
                                <xsl:value-of select="$link-title"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:value-of select="ametys:pageTitle($link)"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </a>
                </div>
            </xsl:if>
        </xsl:if>    
    </xsl:template>

Pour résoudre une URL de page il faut utiliser resolver:resolve sinon vous ne traitez pas tout un tas de cas particuliers.

Pour l'image oui, ce que vous dites est bon. Cela s'applique au fragment suivant

<img lastmodified="2014-02-17T14:16:37.327+01:00" size="6473" filename="cuisine-moleculaire-m.jpg" path="illustration/image" mime-type="image/jpeg" type="metadata">

donc, je tenterai quelquechose chose comme:

<img class="agenda_event_img" src="{resolver:resolveImage(illustration/img/@type, illustration/img/@path , 40, 40)}"/>

Raphael Franchet
Expert Ametys

Offline

#19 18/02/2014 10:48:05

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Si elle y sont, préférez les metadonnées qui sont sous leur forme entière (<start-date>) plutôt que celles qui sont mises en simple chaîne de caractères : <meta name"start-date">


Raphael Franchet
Expert Ametys

Offline

#20 18/02/2014 12:11:53

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

j'ai essayé ceci :

<xsl:variable name="type" select="illustration/img/@type"/>   
<xsl:variable name="file" select="illustration/img/@path"/>
<xsl:variable name="urlimg"><xsl:value-of select="$file"/><xsl:if test="$type = 'metadata'">?contentId=<xsl:value-of select="@id"/></xsl:if></xsl:variable>
<img class="agenda_event_img" src="{resolver:resolveImage($type, $urlimg , 40, 40)}"/>

mais sans résultat.

j'ai essayé aussi ceci pour le lien

<xsl:variable name="urlevent"><xsl:value-of select="pages/page[1]/@path"/></xsl:variable>
<a class="agenda_event" href="{resolver:resolve('page', $urlevent)}" data-start-time="{$day/@date}" data-end-time="{$day/@date}">

mais j'obtiens désormais un lien vers ma page courante et non plus vers la page de l'événement.

Offline

#21 18/02/2014 12:35:23

Raphaël Franchet
Expert Team
From: Toulouse
Registered: 10/08/2010
Posts: 1,111

Re: calendrier agenda personnalisé

Comme vous pouver le lire dans l'exemple plus haut le resolver:resolve d'une page doit recevoir un identifiant de page. Pas son path. Du coup, cela génère un lien vide, et le navigateur pointe donc vers la page actuelle.

Pour l'image, ça m'a l'air pas mal. Pouvez-vous faire ce test pour vérifier les valeurs des variables ?

<test><xsl:value-of select"$type"/></test>
<test2><xsl:value-of select"$urlimg"/></test2>

Raphael Franchet
Expert Ametys

Offline

#22 18/02/2014 12:50:17

webupsud
Guest
Registered: 21/01/2014
Posts: 77

Re: calendrier agenda personnalisé

c'est bon pour le lien

C'est bon aussi pour l'image, j'ai trouvé ce qu'il fallait faire.

Merci !

Last edited by webupsud (18/02/2014 17:06:18)

Offline

Board footer

Powered by FluxBB