You are not logged in.
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
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
Oui c'est ça, connaître l'url d'une page en fonction de l'identifiant
Par contre je suis toujours en v3 je n'ai pas réussi à faire fonctionner le repository de la v3 dans la v4
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
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 :
Offline
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
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