Forum Ametys

Forum de la communauté Ametys

You are not logged in.

#1 06/07/2016 11:43:02

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

Modifier la langue d'une page et d'un contenu

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

#2 06/07/2016 13:58:13

Laurence Perier
Expert Team
From: Toulouse
Registered: 20/10/2010
Posts: 18

Re: Modifier la langue d'une page et d'un contenu

Bonjour,

Il s'agit d'un bug, nous t'invitons à voter ici : https://issues.ametys.org/browse/CMS-5179

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

Board footer

Powered by FluxBB