You are not logged in.
Bonjour à tous,
Est-ce que quelqu'un dispose d'une astuce pour changer la propriété langue d'un contenu ou d'une page ?
Après avoir fait du copier/coller de pages depuis l'arbo en français vers l'arbo en anglais, je m'aperçois que la langue inscrite dans les propriétés des pages et des contenus reste la langue de création de la page d'origine soit le français.
Cela me pose un problème d’accessibilité mais surtout cela rend toutes les redirections de pages inopérantes puisque le cms génère des URL en /fr/ au lieu du /en/.
Cordialement
Last edited by jbabadie (06/07/2016 11:43:45)
Offline
Bonjour,
Il s'agit d'un bug, nous t'invitons à voter ici :
Voici un script JCR qui permet de transformer les métas en en fr après la duplication des pages et des contenus.
Attention à tester sur les données en test au-préalable.
importClass(org.ametys.plugins.repository.RepositoryConstants);
var unlock = function(node)
{
var lockToken = node.getProperty(RepositoryConstants.METADATA_LOCKTOKEN).getString();
var lockManager = node.getSession().getWorkspace().getLockManager();
lockManager.addLockToken(lockToken);
lockManager.unlock(node.getPath());
// Remove residual properties
node["setProperty(java.lang.String,javax.jcr.Value)"](RepositoryConstants.METADATA_LOCKTOKEN, null);
node["setProperty(java.lang.String,javax.jcr.Value)"](RepositoryConstants.METADATA_LOCKOWNER, null);
node.getSession().save();
}
var nodeCount = 0;
var setPageContentsLanguage = function(pageNode, language)
{
//println('Page: ' + pageNode.getName());
if (pageNode.hasNode('ametys-internal:zones'))
{
var zones = pageNode.getNode('ametys-internal:zones').getNodes();
while (zones.hasNext())
{
var zone = zones.next();
if (zone.hasNode('ametys-internal:zoneItems'))
{
//println('Zone: ' + zone.getName());
var zoneItems = zone.getNode('ametys-internal:zoneItems').getNodes();
while (zoneItems.hasNext())
{
var zoneItem = zoneItems.next();
if (zoneItem.hasProperty('ametys-internal:type') && zoneItem.getProperty('ametys-internal:type').getString() == 'CONTENT')
{
var contentNode = zoneItem.getProperty('ametys-internal:content').getNode();
setContentLanguage(contentNode, language);
}
}
}
}
}
var subPages = pageNode.getNodes();
while (subPages.hasNext())
{
var subPage = subPages.next();
if (subPage.isNodeType('ametys:page'))
{
setPageContentsLanguage(subPage, language);
}
}
}
var setContentLanguage = function(contentNode, language)
{
if (contentNode.isLocked())
{
unlock(contentNode);
}
if (contentNode.hasProperty('ametys-internal:language') && contentNode.getProperty('ametys-internal:language').getString() != language)
{
//println('Content: ' + contentNode.getName());
contentNode.setProperty('ametys-internal:language', language);
nodeCount++;
}
}
var qm = session.getWorkspace().getQueryManager();
var query = qm.createQuery('//element(www, ametys:site)//element(en, ametys:sitemap)', javax.jcr.query.Query.XPATH);
var sitemaps = query.execute().getNodes();
while (sitemaps.hasNext())
{
var sitemapNode = sitemaps.next();
var language = sitemapNode.getName();
//println('Sitemap: ' + sitemapNode.getName());
var pageNodes = sitemapNode.getNodes();
while (pageNodes.hasNext())
{
var pageNode = pageNodes.next();
if (pageNode.isNodeType('ametys:page'))
{
setPageContentsLanguage(pageNode, language);
}
}
}
session.save();
println("Migrated " + nodeCount + " contents.");
Pour voir le nombre de contenus concernés sur le site principal :
element(www, ametys:site)//element(en, ametys:sitemap)/element(*, ametys:page)//element(*, ametys:zoneItem)[@ametys-internal:type = 'CONTENT']/jcr:deref(@ametys-internal:content, '*')[@ametys-internal:language != 'en']
Last edited by Laurence Perier (06/07/2016 13:59:14)
Offline