Jahia en Français > Détecter un élément...

0 (0 Good)
0 (0 Bad)

Détecter un élément nouveau dans une liste à la publication d'un node

by  Snite »  2015/06/23 13:14

Bonjour,

Je souhaiterai savoir s'il existe une méthode du style 'isDirty' afin de ne modifier que les nouveaux éléments d'une liste lors de la publication d'un node.

En effet, j'ai un composant 'blogPost' contenant une propriété 'tags'. Cette propriété est une référence vers une liste de composants de type 'blogTag' :

[erc:blogPost] > jnt:content, mix:title, jmix:blogComponents, jmix:blogCounter
...
 - tags (reference, choicelist[nodes='/sites/mySite/contents/tags//*;erc:blogTag',resourceBundle]) multiple
...

[erc:blogTag] > jnt:content, mix:title, jmix:blogComponents
 - weight (long) = '0' autocreated hidden onconflict=sum

La propriété '- weight' de mon composant 'blogTag' me permet de définir le poids d'un tag : Dès qu'un article est publié, un service est appelé incrémentant ce poids :

rules.drl :

rule "Incrementer le poid des tags d'un article"
    when
        A node is published
            - the node has the type erc:blogPost
   then
        Increment tags weight
end

rules.dsl :

[consequence][]Increment tags weight=blogService.incrementTagsWeight(node);

blog.xml :

<bean class="org.jahia.services.content.rules.ModuleGlobalObject">
        <property name="globalRulesObject">
            <map>
                <entry key="blogService">
                    <bean class="com.mySite.blog.rules.BlogService" factory-method="getInstance" />
                </entry>
            </map>
        </property>
    </bean>   

BlogService.java :

    public void incrementTagsWeight(final AbstractNodeFact node) throws RepositoryException {
        JCRNodeWrapper nodeSource = node.getNode();
        if (nodeSource.isNodeType("erc:blogPost")) {
            Value[] values = nodeSource.getProperty("tags").getValues();
            for (Value v: values) {
                JCRValueWrapper value = (JCRValueWrapper) v;
                JCRNodeWrapper tag = value.getNode();
                if (tag.isNodeType("erc:blogTag")) {
                    Long weight = tag.getProperty("weight").getLong() + 1;
                    tag.setProperty("weight", weight);
                }
            }
        }
        nodeSource.saveSession();
    }

BlogService.java est correctement appelé.

Le soucis est que j'incrémente l'ensemble des tags liés à un post dès que je publie le post (suite à une modification, ajout d'un tag, etc). Est-il possible de n'incrémenter le poid qu'une seule fois ou pour tout nouveau tag ajouté à l'article avec une méthode permettant de déterminer si l'élément est nouveau dans la liste lors de la publication du post ?

Cordialement,

Snite

Snite
Number of messages  3
Not registered
Contact
Share
Feedback

Get in touch

Whether you are a current user or if you are just evaluating Jahia, we are here to help.

Contact us

Share this page