IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[eZ Publish] pb de sous-éléments qui ne s'actualisent pas


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut [eZ Publish] pb de sous-éléments qui ne s'actualisent pas
    Bonjours,

    j'ai un pb de sous-éléments qui ne s'actualisent pas
    ou plus éxatement les sous-éléments d'un 1er sous éléments

    j'ai créé un sous élément Gestion diaporama avec la class diaporama dans mon objet page, si je met à jour les sous éléments photos de mon objet Gestion diaporama, ce n'est pas pris en compte lorsque j'actualise ma page,
    par contre si je met à jour un sous élément bloc texte de ma page alors les modifications du bloc texte son prisent en compte ainsi que les modifs des sous-éléments photos, ça marche aussi si je vide mes caches.


    ma structure ressemble à ça pour que ce soit clair

    ma page
    -->Gestion diaporama
    ------>Photo 1
    ------>Photo 2
    ------>Photo 3
    --> Bloc de texte 1
    --> Bloc de texte 2
    --> Bloc de texte 3

    j'ai déjà procédé comme ça sur d'autre site je n'ai jamais eu ce problème avant.

    vraiment étrange

  2. #2
    Membre habitué
    Homme Profil pro
    VP Community
    Inscrit en
    Septembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : VP Community
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 63
    Points : 126
    Points
    126
    Par défaut
    Salut Ricozor,

    Problème de cache de vue je pense.
    Dans la structure que tu montres, les objets "Photo x" ne sont pas des sous-éléments de "Gestion diaporama" (à moins que le petit diagramme textuel que tu nous a proposé soit à modifier). Cela explique que le cache de vue de "Gestion diaporama" ne soit pas updaté.

    Les objets "Photo x" sont-ils effectivement des enfants de "Gestion diaporama" ?
    --
    Nicolas

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    les objets "photos x" sont bien les enfant de "Gestion diaporama".

    je n'ai pas créé de template pour diaporama ni pour mes photos

    je fais tout dans le template parent "page_type"

    voici mon code pour la partie diaporama
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    {def	$sShowPictures = 'nopicture'
    	$oPicturesGroup=fetch_alias( 'children', hash( 'parent_node_id', $node.main_node_id,
    									'limit', 1,
    									'class_filter_type', 'include',
    									'class_filter_array', array('gestion_photos_page_type') ) )}
     
    {if $oPicturesGroup|count}
    	{def	$oPictures=fetch_alias( 'children', hash( 'parent_node_id', $oPicturesGroup.0.main_node_id,
    									'limit', 5,
    									'sort_by', array( 'priority', true() ),
    									'class_filter_type', 'include',
    									'class_filter_array', array('photo_page_type') ) )}
    	{if $oPictures|count}
    		{set $sShowPictures = 'pictures'}
    	{/if}
    {/if}
    <div class="chapeau {$sShowPictures}">
    {if $oPictures|count}
    	<div id="pictures_slide">
    		<ul id="pictures_img" class="pictures_img">
    			{foreach $oPictures as $child}
    				<li><a href="{$child.data_map.grande_photo.content[photo_page_type_diapo_large].full_path|ezroot(no)}" class="smoothbox" target="_blank" title="{$child.name}" rel="pictures_slide">{attribute_view_gui image_class=photo_page_type_diapo_small attribute=$child.data_map.petite_photo alt_text=$child.name }</a></li>
    			{/foreach}
    		</ul>
    	</div>
    {/if}
    <div class="chapo">
    			{$node.data_map.chapeau.content.output.output_text}
    		</div>
    	</div>
    	{undef $sShowPictures $iPicturesGroupCount}

  4. #4
    Membre habitué
    Homme Profil pro
    VP Community
    Inscrit en
    Septembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : VP Community
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 63
    Points : 126
    Points
    126
    Par défaut
    Ok, le comportement est donc normal.

    Par défaut lorsqu'on vide le cache de vue (View Cache) d'un objet (typiquement lorsqu'on le publie), les caches de vue des objet suivants sont vidés :
    • Objets liés (Related Objects) et Reverse related
    • Objet(s) parent
    • Objet utilisant les mêmes keywords (datatype : ezkeyword)


    Ceci est le comportement par défaut, détaillé ici :
    http://doc.ez.no/eZ-Publish/Technica...the-view-cache

    Tu peux ensuite activer le SmartViewCache qui te permet de modifier, par de la configuration INI, le comportement par défaut. Toutes les infos ici : http://doc.ez.no/eZ-Publish/Technica...cache-cleaning

    et notamment les exemples un peu plus bas. L'exemple 2 répond à ta problématique courante.

    J'espère que cela t'aide.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    c'est le cahce view de l'objet parent qui est supprimer uniquement ou aussi ne cache view de l'objet grand parent ?

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    ça marche en définissant dans view cache


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [photo_page_type]
    DependentClassIdentifier[]=gestion_photos_page_type
    ClearCacheMethod[]=object
    ClearCacheMethod[]=parent
    ClearCacheMethod[]=relating
    ClearCacheMethod[]=siblings
    pas besoin de mettre MaxParents=2

    merci

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    la gestion de réécriture des cache dans viewcache.ini.append.php marche bien pour des sous éléments par contre pour un attribut relation d'objet ça ne marche pas

    le problème est sur ma front page ou je remonte plusieurs offres

    j'ai un 1er noeud enfant (mes offres) qui contient plusieurs offres
    et pour chaque offre j'ai un attribut relation d'objet qui pointe sur une photo

    si je met mes offres à jour pas de pb de cache
    par contre si je met à jour dans média ma photo, elle n'est pas mise à jour dans front page

    j'ai ajouté dans [ViewCacheSettings]
    les valeurs suivantes
    ClearRelationTypes[]=attribute
    ClearRelationTypes[]=reverse_attribute

    et j'ai bien renseigné ClearCacheMethod=related pour ma class

    je ne vois pas ce que je dois encore changer.

  8. #8
    Membre éclairé Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Points : 683
    Points
    683
    Par défaut
    Pour cela il faut créer un workflow de post-publication :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    function execute( $process, $event )
        {
     
        	$parameters = $process->attribute( 'parameter_list' );
        	$relateds_objects = eZContentFunctionCollection::fetchReverseRelatedObjects( $parameters['object_id']  , '', true, true);
     
    		foreach($relateds_objects['result'] as $attributeId => $object_list) {
    			$attribut = eZContentFunctionCollection::fetchClassAttribute($attributeId);
    			$attribut = $attribut['result'];
     
    			foreach($object_list as $objet) {
     
    				$data_map = $objet->attribute( 'data_map' );
     
    			    // get the attribute
    			    $rel_attr = $data_map[ $attribut->Identifier ];
    			    $rel_attr_content = $rel_attr->Content();
     
    			    // store the object ids
    			    $rel_attr_obj_ids = array();
    			    foreach( $rel_attr_content[ 'relation_list' ] as $relObject )
    			    {
    			        $rel_attr_obj_ids[] = $relObject[ 'contentobject_id' ];
    			    }
     
    			    // init new objectrelation attribute
    			    $newRelationList = new eZObjectRelationListType();
     
    			    // prepare the value to use with toString 
    			    $newRelationListString = implode( "-", $rel_attr_obj_ids );
     
    			    // use toString method to set the value and store the attribute
    			    $newRelationList->fromString( $rel_attr, $newRelationListString );
    			    $rel_attr->store();
     
    			    eZContentOperationCollection::registerSearchObject( $objet->attribute('id'), false );
     
    			}
    		}
     
            return eZWorkflowType::STATUS_ACCEPTED;
        }

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    je place ce code ou ?

  10. #10
    Membre éclairé Avatar de sboyer
    Homme Profil pro
    Développeur PHP chez OpenWide
    Inscrit en
    Février 2010
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur PHP chez OpenWide
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2010
    Messages : 348
    Points : 683
    Points
    683

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    ok dsl je l'ai bien cherché.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 113
    Points : 74
    Points
    74
    Par défaut
    Ça y est je m'en suis sortie avec la création d'un workflow de post publication.

    je me suis basé sur ce tuto :
    http://share.ez.no/blogs/thiago-camp...vent-extension

    et sur le code que sboyer m'a fournis ce qui donne ça :

    création d'une extension relatedobject

    • extension
      • relatedobject
        • settings
          • workflow.ini.append.php

        • eventtypes
          • event
            • relatedobject
              • relatedobjecttype.php

    ----


    code de workflow.ini.append.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    /*
     
    [EventSettings]
    ExtensionDirectories[]=relatedobject
    AvailableEventTypes[]=event_relatedobject
     
    */
    ?>
    et le code de relatedobjecttype.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?php
     
    /*
    
    This event clear cache view of object wich have current object as related object.
    
    */
     
    class RelatedObjectType extends eZWorkflowEventType {
        const WORKFLOW_TYPE_STRING = "relatedobject";
     
        function RelatedObjectType() {
            $this->eZWorkflowEventType(self::WORKFLOW_TYPE_STRING, "RelatedObject");
            /* define trigger here */
            $this->setTriggerTypes(array ('content' => array ('publish' => array ('after'))));
        }
     
        function execute($process, $event) {
            /* code goes here */
            $parameters = $process->attribute( 'parameter_list' );
        	$relateds_objects = eZContentFunctionCollection::fetchReverseRelatedObjects( $parameters['object_id']  , '', true, true);
     
        	foreach($relateds_objects['result'] as $attributeId => $object_list) {
    			$attribut = eZContentFunctionCollection::fetchClassAttribute($attributeId);
     			$attribut = $attribut['result'];
    			foreach($object_list as $objet) {
     
     				eZContentCacheManager::clearViewCache($objet->ID);
     
    			}
    		}
     
                    return eZWorkflowType::STATUS_ACCEPTED;
        }
     
    }
     
    eZWorkflowEventType::registerEventType(RelatedObjectType::WORKFLOW_TYPE_STRING, "RelatedObjectType");
    ?>
    une fois que l'extension est déclarée on oublie pas de vider les caches et de régénèrer les autoloads.

    @sboyer : Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2009, 18h24
  2. [AC-2003] En tête sous état qui ne s'affiche pas
    Par isabelle b dans le forum IHM
    Réponses: 1
    Dernier message: 12/04/2009, 18h13
  3. [eZ Publish] Problème de nom de sous élément qui n'apparait pas
    Par ricozor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/03/2009, 10h20
  4. Réponses: 4
    Dernier message: 02/10/2008, 02h41
  5. Sous-menu qui ne s'affiche pas sous Mozilla
    Par philippef dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 08/08/2008, 19h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo