Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 08/03/2018 11:20:40

Mathieu
Guest
Registered: 26/09/2017
Posts: 30

Transformation page:// ou program:// vers URL

Bonjour,

j'essaye de faire un petit script dans la console du repository. 
J'aurai besoin de transformer des url "interne" à ametys (je ne connais pas le nom, c'est peut être pas clair, cela ressemble à ça : page://XXX..  ou à ça :  program://XXX...?rootId=page://XXX...&programId=subProgramContent://XXX ) en "vrai URL" (a priori la partie droite de l'url : /langue/catalogue/XXX)

Est ce qu'il existe une fonction qui permet de faire ça ? (Je suppose que oui, mais je n'ai pas trouvé de liste des fonctions disponible)

Bonne journée,
Mathieu

Last edited by Mathieu (08/03/2018 11:20:48)

Offline

#2 08/03/2018 12:53:10

Laurence Aumeunier
Expert Team
Registered: 10/08/2010
Posts: 142

Re: Transformation page:// ou program:// vers URL

Bonjour,

Que souhaitez-vous faire ? connaitre l'url d'une page en fonction de son identifiant ?

Si c'est le cas, et que vous êtes en v4, vous pouvez faire quelque chose comme :

var page = ametysResolver.resolveById("program://_root?rootId=page://XXXX&programId=programContent://XXX");
print(page.getSitemapName() + "/" + page.getPathInSitemap() + ".html");

Laurence Aumeunier
Ametys Expert

Offline

#3 08/03/2018 14:35:38

Mathieu
Guest
Registered: 26/09/2017
Posts: 30

Re: Transformation page:// ou program:// vers URL

Oui c'est ça, connaître l'url d'une page en fonction de l'identifiant smile

Par contre je suis toujours en v3 je n'ai pas réussi à faire fonctionner le repository de la v3 dans la v4  sad

Edit : (tant qu'a faire de déranger) est ce qu'il y a aussi une fonction pour faire la transformation dans l'autre sens ? (i.e de trouver l'identifiant d'une page à partir de son URL ? (dans les cas où l'URL est valide bien entendu))

Last edited by Mathieu (08/03/2018 15:02:51)

Offline

#4 13/03/2018 17:55:35

Mathieu
Guest
Registered: 26/09/2017
Posts: 30

Re: Transformation page:// ou program:// vers URL

J'ai trouvé de la doc pour la v4 du coup je me réponds pour quand il sera possible de passer le repository de la v3 à la v4 :
pour faire la transformation dans l'autre sens il y a une fonction "resolveByPath (absolutePath)" vu ici : http://releases.ametys.org/api/release/ … ctResolver

Offline

#5 13/03/2018 18:30:00

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

Re: Transformation page:// ou program:// vers URL

Bonjour,

Cette doc existe depuis longtemps et continue à être maintenue, c'est l'API Java et Javascript du noyau Ametys.

Mais ce n'est pas la même chose que la doc de migration dont on parlait dans les posts précédent.

Offline

#6 14/03/2018 09:52:22

Mathieu
Guest
Registered: 26/09/2017
Posts: 30

Re: Transformation page:// ou program:// vers URL

Bonjour,

oui oui j'ai bien compris que ce n'est pas la même doc , si j'ai fais un nouveau post, c'est parce que c'est un autre "problème".
Le constat de départ c'est que l'on a plein d'alias de redirection pour les formations (on crée une adresse "simplifiée" qui renvoie vers une adresse complexe d'une formation pour pratiquement chaque diplôme..) mais qu'elle n'est accessible que par les personnes ayant un accès au CMS.
L'idée qui en découle, c'est de pouvoir rendre plus facilement accessible cette liste d'alias, du coup j'ai commencé à faire un script pour la générée, il fonctionne pour les alias de type "URL" mais pas pour ceux de type "PAGE" d'où ma demande de départ.

Ensuite la demande pour la fonction de faire le traitement dans l'autre sens, c'est surtout parce que je trouve plus simple de copier coller des urls, mais en type "PAGE" l'association reste correcte même après une modification d'un libellé de diplôme ce qui n'est pas le cas en type "URL". Cela devrait donc me permettre de basculer facilement les alias d'un type à l'autre via un setProperty de ametys-internal:type et ametys-internal:target (en bref : basculer les adresses en type URL, faire mes modifications puis rebasculer en type "PAGE" pour garder la compatibilité)

Mon début de code si cela peut servir à d'autres :
(je précise que j'exécute ce code dans la console de  /cms/_repository de la v3, il faudra certainement adapté certains bout pour la v4)

importClass(org.ametys.workspaces.repository.ConsoleHelper);

var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery("//element(*, ametys:site)[@ametys:title='Formation']//element(*,ametys:alias)", javax.jcr.query.Query.XPATH);
var nodes = query.execute().getNodes();
 
var count = 0;
var count2 = 0;
while (nodes.hasNext())
{
  var node = nodes.next();
 
  if(node.getProperty("ametys-internal:type").getString()=='URL')
  {
    print(node.getProperty("ametys-internal:url").getString());
    print(" redirige vers ");
    println(node.getProperty("ametys-internal:target").getString());
    println("");
   
    count++;
  }
  else //type PAGE -> retourne un program:// au lieu d'une adresse -_-
  {
    /*
    print(node.getProperty("ametys-internal:url").getString());
    print(" redirige vers ");
    //ici : besoin de la fonction qui permet d'obtenir le string du lien au lieu du "program" 
    println(node.getProperty("ametys-internal:target").getString());
    println("");
    */
    count2++;
  }
}

println(count + " alias de redirection ok");
println(count2 + " alias de redirection Nok");

Bonne journée,
Mathieu

Offline

Board footer

Powered by FluxBB