CMS Automne

Forum de la communauté du CMS Automne
Nous sommes actuellement le Mer Nov 27, 2024 4:11 pm

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




Publier un nouveau sujet Répondre au sujet  [ 16 messages ]  Aller vers la page 1, 2  Suivant
Auteur Message
MessagePublié: Ven Juin 05, 2009 2:27 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Bonjour,

Je voudrais utiliser la fonction "loadObject" pour l'indexation de l'objet d'un module.
Je souhaite récupérer la première catégorie de l'objet en cours {Article:id}. Pour moi ça ressemblerait un peu à ça (sauf que ça doit pas s'utiliser comme ça :D et que dans l'exemple je prends pas la première catégorie) :
Code :
<atm-function function="loadObject" object="{Article}" value="{Article:id}">
{page:7097:url}?item={Article:id}&cat={Article:Categories:fieldID}
</atm-function>

Mais ça ne fonctionne pas... Comment utiliser cette fonction ?

Merci !


Dernière édition par dbanon le Lun Juin 08, 2009 5:05 pm, édité 2 fois.

Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 10:30 am 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Alors là je ne comprends pas du tout de quoi il est question :shock:
Citer:
Je voudrais utiliser la fonction "loadObject" pour l'indexation de l'objet d'un module.

Cette phrase demande un peu plus de détails, j'ai besoin du contexte parce que je ne vois pas du tout ce que tu veux faire.

Seb


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 1:18 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Bonjour,

Oui c'est vrai qu'on comprend rien, donc je reformule :D :

Je veux en fait modifier la manière dont les articles d'actualité sont indexés (modification de l'application Actualités et de l'objet Article). Actuellement j'ai ça dans la partie Indexation de l'objet Article :

Code :
<?php
      if(!is_object($cms_language)){
         $cms_language = new CMS_language();
      }
      $sLang = $cms_language->getCode();
?>

<atm-if what="{var:string:sLang} == 'fr'">
   {page:7097:url}?item={Article:id}
</atm-if>
<atm-if what="{var:string:sLang} != 'fr'">
   {page:7145:url}?item={Article:id}
</atm-if>


Donc pour chaque article, le lien va être de la forme :
page7097.php?item=123 (ou page7145.php?item=123)

Je veux modifier ce code d'indexation pour ne pas aller systématiquement sur la page 7097 (ou 7145) mais que cette page dépende de la première catégorie de l'article.
Le problème est que je n'arrive pas à récupérer la première catégorie de l'article. Je pensais pouvoir le faire à l'aide de la fonction loadObject mais je n'arrive pas à la faire fonctionner (ou alors elle ne peut pas me servir pour ce que je veux faire).

J'espère que maintenant c'est un peu plus compréhensible....

Merci !


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 1:26 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
C'est plus clair, mais je ne suis pas sur d'avoir bien tout compris.

Déjà, tu parle de l'indexation de l'article actualité, j'imagine, qu'il s'agit de son indexation dans le moteur de recherche ?

Ensuite, c'est là que ça n'est pas très clair, tu veux rediriger le détail des résultats de recherche en fonction de la 1ère catégorie de l'article. Qu'entends tu par "1ère catégorie" ? Y a t'il plusieurs champs catégories ou bien est ce un champ catégories multiple pour lequel tu voudrai obtenir la première catégorie ?

Enfin, pourquoi ne pas faire quelque chose de ce style (par exemple) ?
Code :
<atm-if what="{Article:categorie:id} == '1'">
   {page:7097:url}?item={Article:id}
</atm-if>
<atm-if what="{Article:categorie:id} == '2'">
   {page:7145:url}?item={Article:id}
</atm-if>


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 1:39 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Alors effectivement quand je parle d'indexation, c'est bien indexation dans le moteur de recherche.
Le champ catégories est multivalué, donc pour un article il peut y avoir plusieurs catégories. Du coup quand je dis "première catégorie", ça veut dire la première catégorie retournée par Automne.
Du coup si j'utilise :

Code :
<atm-if what="{Article:categorie:id} == '1'">
   {page:7097:url}?item={Article:id}
</atm-if>


qu'est ce que "{Article:categorie:id}" est sensé me retourner (puisque plusieurs catégories sont associées à un article) ?
Pour tester j'ai tapé (pour voir la valeur de {Article:categorie:id} dans l'URL) :

Code :
{page:7097:url}?item={Article:id}&cat={Article:categorie:id}


Mais le lien était alors de la forme : http://hote.com/ (sans rien à la suite). J'imagine que ça vient du fait que j'ai plusieurs catégories pour cet article ?


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 1:51 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
ok, dans ce cas, je ne comprends pas en quoi la première catégorie est plus importante que les autres ?
Mais quoi qu'il en soit, dans ce cas effectivement mon exemple ne peut pas marcher, il faudrait dans ce cas faire quelque chose de ce genre :

Code :
{Article:categorie:0|id}


Note que le "categorie" est à changer en fonction du nom de ton champ (reporte toi à l'aide du champ pour avoir son nom exact).

Par ailleurs, la fonction que je te donne là n'est pas documentée et je ne sais plus quand elle a été mise en place, mais ça devrai pouvoir fonctionner.


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 2:04 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Il n'y a effectivement pas de priorités entre les catégories, j'en prends donc une au "hasard".
J'ai testé la fonction, mais ça ne semble pas fonctionner.
J'ai ce code là dans le champ d'indexation :

Code :
{page:7097:url}?cat={Article:Categories:0|id}


Et le lien qui apparait dans le moteur de recherche est :

/7097-page-test.php?cat={Article:Categories:0|id}

On dirait qu'il n'interprète pas le code.

PS : Je suis sur Automne 3.3.2
PS2 : Mon champ s'appelle "Catégories" et devient donc "Categories" dans l'aide du champ


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 2:06 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
et as tu testé avec ce code ?
Code :
{page:7097:url}?cat={Article:Categories:id}


Si oui, ça donne quoi ensuite ?


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 2:12 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Là aussi il me met :

/7097-toutes-les-actualites.php?cat={Article:Categories:id}

J'ai testé avec d'autres champs ({Article:id} et {Article:Titre:value}) et ces tags sont bien remplacés par leur valeur...


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 2:21 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Alors y a pas le choix, il va falloir que tu passe par un tag atm-loop.

De tête je ne me souvient plus exactement de la syntaxe, mais en gros il va falloir que tu fasse un truc comme ça :

Code :
<atm-loop on="{Article:Categories:values}">
  <atm-if what="{firstloop}">
    {page:7097:url}?cat={Article:Categories:values:id}
  </atm-if>
</atm-loop>


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 2:30 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Merci ça fonctionne comme ça !


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 4:06 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Du coup j'ai une nouvelle question...

Voilà la structure du module actualités :
Code :
Objets :
- Article
  - Titre
  - Catégories
  - ...
- Page détail par catégorie
  - Titre (chaine)
  - Catégorie (catégorie)
  - Langue (langue)
  - Page détail (page)
- Page détail par défaut
  - Titre (chaine)
  - Langue (langue)
  - Page détail (page)


Le principe est le suivant :
Dans la recherche, si un résultat est un article de la catégorie "Divers", le lien du résultat devra pointer vers l'attribut "Page détail" de l'objet "Page détail par catégorie" qui a pour catégorie "Divers" et pour langue la langue de l'article. Si l'objet "Page détail par catégorie" n'existe pas pour la catégorie et la langue, on va alors chercher l'attribut "Page détail" de l'objet "Page détail par défaut" qui a la même langue que l'article.

J'ai mis au point ce principe pour les flux RSS grâce aux tags de recherche (<block> et <atm-search>) et ça fonctionne mais dans la recherche cela semble fonctionner sauf qu'apparemment ces tags ajoutent des tags HTML. Du coup le résultat de la recherche donne des choses étranges avec des tags HTML au milieu !
Je me suis rendu compte que dans l'aide à la syntaxe pour la partie indexation du moteur de recherche, la section "Recherche" n'est pas présente alors qu'elle l'est pour les flux RSS... est-ce que l'utilisation de ces tags n'est pas supportée pour l'indexation ? Y a-t-il un moyen de contourner le problème ?

Encore une fois, si je suis pas clair, je peux préciser !


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 4:22 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Non, pas de tags Recherche dans l'indexation. Cette zone ne sert qu'a générer l'URL pour atteindre l'élément affiché en résultat du moteur de recherche et rien d'autre.
Faire une recherche ici n'a donc pas d'intérêt, et, pire que tout, cela ralentirai énormément l'affichage des résultats du moteur de recherche. Cette zone doit donc rester la plus simple possible (c'est pourquoi je n'aime déjà pas l'emploi d'un tag atm-loop là dedans ...).

Ceci étant dit, les tags de recherche fonctionneront, cette limitation n'est que visuelle et n'a que pour but d'éviter que les gens mettent tout et n'importe quoi dans ce champ sachant que cela a un impact très négatif sur les performances du moteur de recherche ensuite.

Donc si tu as des tags HTML c'est qu'il doit y avoir un pb quelque part. Peux tu me copier ce que tu as mis dans le champ en question que je puisse voir ce qu'il se passe ?


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 4:33 pm 
Hors-ligne

Inscrit(e) le : Jeu Fév 19, 2009 11:50 am
Message(s) : 80
Voilà le code que j'ai dans le champs d'indexation :

Code :
<?php
      if(!is_object($cms_language)){
         $cms_language = new CMS_language();
      }
      $sLang = $cms_language->getCode();
      
      $item = {Article:id};
?>

<atm-loop on="{Article:Categories:values}">
   <atm-if what="{firstloop}">
      <block module="pNews">
         <atm-search what="{Page_detail_par_categorie}" name="detailSelect">   
            <atm-search-param search="detailSelect" type="{Page_detail_par_categorie:Categorie:fieldID}" value="{Article:Categories:values:id}" mandatory="true" />
            <atm-search-param search="detailSelect" type="{Page_detail_par_categorie:Langue:fieldID}" value="{var:string:sLang}" mandatory="true" />
            <atm-search-limit search="detailSelect" value="1" />
            <atm-result search="detailSelect">
               <?php
                  $page_detail = {Page_detail_par_categorie:Page_detail:label};
                  $url = getPageURL($page_detail, true) ."?item=". $item;
               ?>
            </atm-result>
            <atm-noresult search="detailSelect">
               <atm-search what="{Page_detail_par_defaut}" name="defautSelect">         
                  <atm-search-param search="defautSelect" type="{Page_detail_par_defaut:Langue:fieldID}" value="{var:string:sLang}" mandatory="true" />
                  <atm-search-limit search="defautSelect" value="1" />         
                  <atm-result search="defautSelect">
                     <?php
                        $page_detail = {Page_detail_par_defaut:Page_detail:label};
                        $url = getPageURL($page_detail, true) ."?item=". $item;
                     ?>
                  </atm-result>
               </atm-search>
            </atm-noresult>
         </atm-search>
      </block>
   </atm-if>
</atm-loop>


et le code généré lors de la recherche pour un article :

Code :
<a pnews="" href="http://localhost<block module=">
" title="Concours, culture, parutions - Divers">Concours, culture, parutions - Divers</a>


Haut
 Profil  
 
 Sujet du message:
MessagePublié: Lun Juin 08, 2009 4:45 pm 
Hors-ligne
Administrateur
Avatar de l’utilisateur

Inscrit(e) le : Mer Juin 15, 2005 8:28 am
Message(s) : 759
Localisation : Sophia Antipolis
Voila le code que tu devrai mettre :
Code :
<?php
   if(!is_object($cms_language)){
      $cms_language = new CMS_language();
   }
   $sLang = $cms_language->getCode();
   $item = {Article:id};
?>
<atm-loop on="{Article:Categories:values}">
   <atm-if what="{firstloop}">
      <atm-search what="{Page_detail_par_categorie}" name="detailSelect">
         <atm-search-param search="detailSelect" type="{Page_detail_par_categorie:Categorie:fieldID}" value="{Article:Categories:values:id}" mandatory="true" />
         <atm-search-param search="detailSelect" type="{Page_detail_par_categorie:Langue:fieldID}" value="{var:string:sLang}" mandatory="true" />
         <atm-search-limit search="detailSelect" value="1" />
         <atm-result search="detailSelect">
            <?php
               $page_detail = {Page_detail_par_categorie:Page_detail:label};
               $url = getPageURL($page_detail, true) ."?item=". $item;
            ?>
         </atm-result>
         <atm-noresult search="detailSelect">
            <atm-search what="{Page_detail_par_defaut}" name="defautSelect">
               <atm-search-param search="defautSelect" type="{Page_detail_par_defaut:Langue:fieldID}" value="{var:string:sLang}" mandatory="true" />
               <atm-search-limit search="defautSelect" value="1" />
               <atm-result search="defautSelect">
                  <?php
                     $page_detail = {Page_detail_par_defaut:Page_detail:label};
                     $url = getPageURL($page_detail, true) ."?item=". $item;
                  ?>
               </atm-result>
            </atm-search>
         </atm-noresult>
      </atm-search>
   </atm-if>
</atm-loop>
<?php
   echo $url;
?>


Maintenant j'ai jamais testé ça et je ne suis pas sur que le echo $url; à la fin soit bien ce qu'il faille mettre (un $content = $url; serait peut-être mieux ...?).

La section de code qui va s'occuper de traiter ça se trouve dans le fichier /automne/classes/modules/ase/interfaces/polymod.php, ligne ~422 (cherche un eval). Tu peux essayer de voir ce que te sors l'instruction $objectDefinition->getValue('compiledIndexURL') et tu peux ensuite adapter ton code pour qu'il fonctionne mais ne touche au fichier en question que pour faire tes tests sans quoi tes modifications seraient perdues à la prochaine mise à jour.

Seb


Haut
 Profil  
 
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 16 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 49 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 :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit par Maël Soucaze et Elglobo © phpBB.fr