Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 20/05/2015 11:51:57

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

récupérer l'image d'un contenu

Bonjour,

J'aimerais récupérer l'image du contenu principal de ma page pour l'envoyer en tant que paramètre dans les méta descriptions du <head> de ma page pour les réseaux sociaux (twitter, Facebook). Avant d'en arriver là, j'essayais quelques tests de ce type mais sans résultat :

<span>
    <xsl:variable name="image" select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration']/@content"/>
        <xsl:variable name="maxWidth" select="'200'"/>
        <xsl:variable name="maxHeight" select="'133'"/>
    <img src="{resolver:resolveBoundedImage($image/@type, $image/@path, $maxWidth, $maxHeight)}"/>
  </span>

Pourtant il y a bien une image associée au contenu,

Et après idéalement, j'aimerais le placer ainsi dans les balises méta :

<meta name="og:description">
          <xsl:attribute name="content">
                <xsl:choose>
                    <xsl:when test="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration']">
                        <xsl:variable name="image" select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration']/@content"/>
        <xsl:variable name="maxWidth" select="'200'"/>
        <xsl:variable name="maxHeight" select="'133'"/>
    <img src="{resolver:resolveBoundedImage($image/@type, $image/@path, $maxWidth, $maxHeight)}"/>
                    </xsl:when>
                   
                    <xsl:otherwise><xsl:value-of select="/skins/actus/resources/img/og-image.png" /></xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </meta>

D'où peut venir le problème ?

Merci d'avance,

Cordialement,

Last edited by webupsud (20/05/2015 11:52:04)

Offline

#2 22/05/2015 14:00:48

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

Re: récupérer l'image d'un contenu

Bonjour,
"Illustration" n'est pas une métadonnée de type image, c'est une métadonnée composite qui englobe l'image et l'alternative textuelle.

Voici un exemple trouvé sur le site de démo des données que vous pouvez avoir en entrée :

<meta content="metadata" name="illustration/image;type"/>
<meta content="image/png" name="illustration/image;mime-type"/>
<meta content="illustration/image" name="illustration/image;path"/>
<meta content="document.png" name="illustration/image;filename"/>
<meta content="39474" name="illustration/image;size"/>
<meta content="2013-04-30T14:25:24.234+02:00" name="illustration/image;lastModified"/>

donc vos chemins xpath ne sont pas tout à fait corrects.


Raphael Franchet
Expert Ametys

Offline

#3 27/05/2015 14:36:26

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

Re: récupérer l'image d'un contenu

Merci pour votre réponse. J'ai essayé ainsi :

<span>
    <xsl:variable name="chemin" select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;path']/@content"/>
    <p><xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;path']/@content" /></p>
    <xsl:variable name="format" select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;type']/@content"/>
    <p><xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;type']/@content" /></p>
   
    <xsl:variable name="url"><xsl:value-of select="$chemin"/><xsl:if test="$format = 'metadata'">?contentId=<xsl:value-of select="@id"/></xsl:if></xsl:variable>
        <xsl:variable name="maxWidth" select="'200'"/>
        <xsl:variable name="maxHeight" select="'133'"/>
    <img src="{resolver:resolveImage($url, $chemin, $maxWidth, $maxHeight)}"/>
  </span>

Mais voici ce que j'obtiens en retour

:

illustration/image

metadata

et une image cassée.

Je pense que le problème vient de mon chemin d'accès. Je suis sur un gabarit de page et non pas sur un contenu en particulier quand je fais appel à cette fonction, peut être qu'il faut spécifier le contenu qui m'intéresse ? Mais de quelle manière ?

Offline

#4 27/05/2015 15:00:51

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

Re: récupérer l'image d'un contenu

Je viens d'essayer ca :

<meta name="og:image">
         
          <xsl:attribute name="content">
                <xsl:choose>
                    <xsl:when test="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;path']">
                        <xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem/html/head/meta[@name='illustration/image;path']/@content" />
                    </xsl:when>
                   
                  <xsl:otherwise><xsl:value-of select="/skins/actus/resources/img/og-image.png" /></xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </meta>

Et j'obtiens une image totalement aléatoire. Parfois c'est la bonne, celle du contenu qui m'intéresse. Parfois c'est une image de la page qui n'a rien à voir ou parfois l'image par défaut. Ca semble bien être un problème d'identification du contenu sur la page qui m'empêche d'obtenir l'image qui m'intéresse.  Est-il possible de sélectionner un contenu en particulier (en l'occurrence le premier de ma page) pour obtenir son image ?

Offline

#5 28/05/2015 16:55:41

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

Re: récupérer l'image d'un contenu

Quand vous dites "totalement aléatoire", pour une même page, si vous faites F5 plusieurs fois, vous avez des images différentes ?
Cet algo ne peut renvoyer que des illustrations de contenus, donc je ne sais pas ce que vous appelez 'image de la page'... mais ça doit être celle d'un autre contenu de la page ?
Parfois vous avez l'image par défaut : ce sont des pages où vous n'avez aucune illustration de contenu ? attention, au niveau rendu de page, il est parfois difficile de différencier l'illustration du contenu et une image placée au début du texte riche...

Dans votre xpath vous avez mis "zone[@name = 'default']" donc vous n'aurez que des contenus de la zone centrale.
Ajoutez [1] à zoneitem pour vous limiter au premier item de la zone default.
Par exemple:

"/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']"

Raphael Franchet
Expert Ametys

Offline

#6 01/06/2015 15:34:26

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

Re: récupérer l'image d'un contenu

Je vous remercie, cela fonctionne mais par contre j'obtiens la première image de mon contenu alors que je pensais récupérer l'image insérée comme métadonnée (champ sous le titre lorsqu'on crée un article), ce que me retourne cette même fonction lorsque je crée mes pages de rubrique à partir d'une remontée de contenu utilisant la même fonction.

Curieux que dans un cas j'obtienne la première image du contenu, dans un second cas l'image utilisée comme métadonnée de l'article (qui n'apparait pas sur le contenu pour le cas de notre charte graphique).

Peut-on récupérer l'image d'illustration d'un article comme dans le cas des remontées de contenu ?

Merci de votre aide

Last edited by webupsud (01/06/2015 15:35:25)

Offline

#7 01/06/2015 15:40:55

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

Re: récupérer l'image d'un contenu

En prenant le xpath que je vous indique vous prenez l'image dans la metadonnée illustration/image du premier élément de la zone default.

Qu'appelez-vous la première image du contenu ?


Raphael Franchet
Expert Ametys

Offline

#8 02/06/2015 12:05:15

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

Re: récupérer l'image d'un contenu

Je ne comprends pas le comportement de cette fonction.

<meta name="og:image">
         
          <xsl:attribute name="content">
                <xsl:choose>
                    <xsl:when test="/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']">
                        <xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']/@content" />
                    </xsl:when>
                   
                  <xsl:otherwise><xsl:value-of select="/skins/actus/resources/img/og-image.png" /></xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </meta>

Normalement, il devrait me prendre le champ illustration du premier contenu de la zone défaut de ma page et l'utiliser comme paramètre lors d'un clic sur la fonction de partage sur les réseaux sociaux. Or, si je prends cet exemple :



Ca ne fonctionne pas et il me retourne l'image par défaut. Sur d'autres contenus, il ne retourne aucune image, ou alors une image en colonne de droite qui ne fait pas partie du contenu indiqué, cf :



En revanche, parfois cela fonctionne :



Je ne comprends pas ce résultat.

Offline

#9 02/06/2015 12:18:26

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

Re: récupérer l'image d'un contenu

Si je prends votre première URL et que j'analyse le fichier html généré. La grosse image est une image du contenu riche et ce n'est pas une image positionnée dans la métadonnée "illustration".
Il faudrait passer en édition sur ce contenu pour voir le contenu de "illustration" et en admettant qu'il soit correct, le contenu a-t-il bien été revalidé suite à l'ajoute de l'illustration ?

Pour aller plus en avant, il faudrait debugger.


Raphael Franchet
Expert Ametys

Offline

#10 02/06/2015 14:00:34

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

Re: récupérer l'image d'un contenu

Oui oui, la grosse image de la première URL est une image insérée dans le contenu de l'article, mais elle est aussi utilisée en guise de métadonnée illustration. Le contenu est bien validé car dans les pages de rubrique, cf :



j'utilise une remontée de contenu qui va chercher les images d'illustration et cela fonctionne bien. Par contre, il s'agit d'une fonction de ce type :

<xsl:template match="content">
          <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="url"><xsl:value-of select="$file"/><xsl:if test="$type = 'metadata'">?contentId=<xsl:value-of select="@id"/></xsl:if></xsl:variable>
        <xsl:variable name="alt-text" select="html/head/meta[@name = 'illustration/alt-text']/@content"/>
        <xsl:variable name="page-id" select="html/head/meta[@name = 'pages/page;id']/@content"/>

...
<img class="push_img" src="{resolver:resolveImage($type, $url, 200, 295)}" alt="{$alt-text}"/>
...

</xsl:template>

Fonction que je ne peux pas réutiliser dans le cas présent puisque je suis sur un gabarit de page général et pas sur une remontée de contenu, je n'ai donc pas de contenu sélectionné par défaut.

Last edited by webupsud (02/06/2015 14:02:21)

Offline

#11 30/06/2017 17:35:57

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

Re: récupérer l'image d'un contenu

Bonjour,

Je me permet de relancer ce sujet car je n'ai toujours pas réussi à reprendre correctement une image dans mes pages. J'utilise le fichier commun.xsl dans la charte graphique pour construire une page standard. Dans les balises meta, je définis correctement le titre et le champ description, mais pas l'image. J'aimerais reprendre soit la première image d'un contenu, soit l'image qui sert d'illustration à ce contenu.

Voici le code que j'utilise :

<meta name="og:image">
         
          <xsl:attribute name="content">
                <xsl:choose>
                    <xsl:when test="/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']">
                        <xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']" />
                    </xsl:when>
                   
                  <xsl:otherwise><xsl:value-of select="/skins/actus/resources/img/og-image.png" /></xsl:otherwise>
                </xsl:choose>
            </xsl:attribute>
        </meta>

suite à nos discussions, mais qui ne renvoie rien. Un élément serait il faux ou manquant ? Je me demande si le problème ne vient pas du fait que ce n'est pas une image comme indiqué dans vos échanges et que je tente de récupérer uniquement le chemin d'accès à cette illustration, ce que n'attends peut être pas la balise og:image. Faut il que je prenne du coup la première image dans mon contenu et non pas l'image d'illustration ? Si oui, quelle serait la valeur à lui donner en entrée ?

Merci !

Last edited by webupsud (30/06/2017 17:39:59)

Offline

#12 05/06/2018 17:30:57

jbabadie
Guest
From: Pau
Registered: 14/10/2013
Posts: 67
Website

Re: récupérer l'image d'un contenu

Bonjour,

Je reviens sur cette problématique.
Quelqu'un sait-il comment obtenir l'url de l'illustration/image du premier contenu de la page lorsqu'on se situe dans le head ?

Jean-Baptiste

Offline

#13 05/06/2018 17:38:02

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

Re: récupérer l'image d'un contenu

Bonjour Jean-Baptiste,

Tu es situé dans la XSL de rendu du contenu lorsque tu désires faire cela ?
Ou bien au niveau du template ?

Car en fait, tu peux faire le calcul au niveau de la xsl du contenu (dans son head par exemple dans un tag meta) et récupérer le résultat dans la xsl du template.
Si tu regardes ce à quoi tu a accès depuis le template (<xsl:copy-of select="/"/>), tu verras que beaucoup des metadonnées des contenu sont d'ores et déjà accessible par défaut dans le head de chaque contenu.

A partir de là tu devrais avoir de quoi faire un

resolver:resolve(type, concat(path, '?objectId=', contentId))

Raphael Franchet
Expert Ametys

Offline

#14 05/06/2018 18:21:52

jbabadie
Guest
From: Pau
Registered: 14/10/2013
Posts: 67
Website

Re: récupérer l'image d'un contenu

Bonjour Raphaël,

en fait je me trouve au niveau du template de page dans le head du html.

Peut-être que vous savez déjà comment résoudre l'url de l'image du premier contenu pour la faire apparaitre comme meta "og:image" à ce niveau là ?

Le mieux que j'ai pu obtenir c'est d'arriver à sortir l'id de la resource mais pas son url au sein du site.

Ci-dessous un extrait de pas mal de mes improbables tentatives (en commentaires) ;-) :

{code}
<xsl:param name="image" select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[information/type = 'CONTENT'][1]/html/head/meta[@name='illustration/image;path']"/>

<meta property="og:image">
  <xsl:attribute name="content">
        <xsl:choose>
            <xsl:when test="$image">       

<xsl:value-of select="resolver:resolveBoundedImage($image/@type, $image/@content, 640, 0)" />
               
<!--xsl:value-of select="concat(ametys:absoluteSiteUriPrefix(),resolver:resolveBoundedImage($image/@type, $image/@content, 640, 0))" /-->
<!--xsl:value-of select="/cms/page/pageContents/zone[@name = 'default']/zoneItem[1]/html/head/meta[@name='illustration/image;path']/@content" /-->
            </xsl:when>           
          </xsl:choose>
    </xsl:attribute>
</meta>
{code}

Offline

#15 05/06/2018 18:38:29

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

Re: récupérer l'image d'un contenu

comme j'ai mis dans mon exemple plus, quand on n'est pas dans la XSL du contenu, il faut ajouter "?objectId=XXX" au path de l'image (où XXX est l'identifiant du contenu)


Raphael Franchet
Expert Ametys

Offline

#16 01/10/2020 14:27:20

jbabadie
Guest
From: Pau
Registered: 14/10/2013
Posts: 67
Website

Re: récupérer l'image d'un contenu

Bonjour Raphaël,
Je retombe sur ce post où je ne t'avais pas remercié mais où je me rappelle avoir finalement réussi.
Donc... merci

Offline

#17 01/10/2020 16:44:00

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

Re: récupérer l'image d'un contenu

smile parfait alors


Raphael Franchet
Expert Ametys

Offline

Board footer

Powered by FluxBB