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 4.0][extensions] Appel d'une méthode une fois le cache construit


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut [eZ Publish 4.0][extensions] Appel d'une méthode une fois le cache construit
    Bonjour,

    Je rencontre actuellement un problème avec une extension eZ Publish (4.0.0).
    J'ai déjà réalisé quelques classes sans rencontrer trop de soucis, mais cette fois-ci je reste sur le carreau.

    J'ai besoin de gérer une table supplémentaire pour sauvegarde les dates de dernières visualisation de certains noeud pour un utilisateur donné.

    La table est plus que simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    visites ( id_utilisateur, id_topic, date_visite )
    Tous trois étant des entiers non signés.

    1. Function_definition.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
    <?php
     
    	$FunctionList['forum_visiter'] = array(
     
    		'name' => 'forum_visiter',
    		'operation_types' => array(),
    		'call_method' => array( 
     
    			'include_file' => 'extension/damien/modules/damien/forum.php',
    			'class' => 'Forum',
    			'method' => 'visiter' ),
     
    		'parameter_type' => 'standard',
    		'parameters' => array(
     
    			array( 	'name' => 'utilisateur', 'type' => 'string', 'required' => true ),
    			array( 	'name' => 'topic', 'type' => 'string', 'required' => false )
     
    		)
     
    	);
     
    ?>
    2. La fameuse classe

    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
    <?php
     
    	class Forum {
     
    		/**
    		 * Rajoute une entrée dans la base de données pour dire quand un utilisateur a été voir un sujet pour la derniere fois
    		 * \arg $utilisateur ID de l'utilisateur
    		 * \arg $topic ID du noeud correspondant au topic
    		 * \return Rien d'utile : true tout le temps
    		 */
    		function visiter($utilisateur, $topic){
     
    			echo "<p>Forum::visiter()</p>";
     
    			mysql_connect("xxxxxxxxxx", "xxxxxxxxx", "xxxxxxxxx");
    			mysql_select_db("xxxxxxxxx");
     
    			$res = mysql_query("SELECT * FROM visites WHERE id_utilisateur = $utilisateur AND id_topic = $topic");
     
    			if(mysql_num_rows($res) > 0)
    				$sql = "UPDATE visites SET id_utilisateur = $utilisateur, id_topic = $topic, date_visite = ".time();
    			else
    				$sql = "INSERT INTO visites (id_utilisateur, id_topic, date_visite) VALUES ($utilisateur, $topic, ".time().")";
     
    			mysql_query($sql);
     
    			return array("result" => true);
     
    		}
     
    	}
     
    ?>
    3. le problème

    En fait, si je vide les caches pas de soucis, je passe bien dans mon code (je vois bien le echo et les données sont entrées en base).

    Par contre si je rafraichi la page, je ne passe plus dans ma méthode.

    Et bien sur, si je re-vide les caches... la méthode est appelée...

    C'est bien la première fois que ça me fait ça... les autres méthodes des autres classes peuvent être appelé autant de fois qu'on le souhaite sans rencontrer de soucis.

    Auriez-vous une idée sur la raison de ce comportement plus que bizarre ?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Après beaucoup de temps passé à chercher, j'ai finalement trouvé une solution.
    Par contre, on ne peut pas vraiment dire que ce soit élégant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {set-block scope=root variable=cache_ttl}0{/set-block}
    La première instruction du TPL est de définir la durée de vie du cache pour ce TPL à 0. Résultat, le TPL est interprété à chaque fois qu'une page l'utilisant est appelée.

    Si quelqu'un trouve une solution plus élégante, je suis preneur.

  3. #3
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Salut,

    Je ne suis pas sûr d'avoir bien compris ce que tu as fais. Tu as codé un opérateur de template ?

    Tu pourrais nous montrer la template en question ?
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Bonsoir

    Je n'ai pas le template sous la main mais voilà grosse modo ce qu'il y a dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {* Haut du template *}
    {* Utilisateur est chargé juste avant *}
     
    {def $var = fetch('damien', 'forum_visiter', hash('utilisateur', $utilisateur, 'topic', $node.node_id))}
     
    {* La suite du code qui ne sert pas dans notre cas *}
    Le fait est que logiquement, forum_vister devrais être appelé à chaque fois que l'on charge la page.

    Et là en fait non...

    On passe bien dedans quand le template est compilé mais quand on réutilise le template compilé il n'y passe plus.

    J'ai regardé le code du template compilé et l'appel est bien là... mais sans succés.

    Comme je le disais dans le message juste avant, si on change la durée de vie du cache pour le template (en le mettant à 0) le comportement est bien celui attendus. Par contre mon template est "parsé" à chaque fois...

    Pour info, sur le forum de ez.no on m'a donné cette unique astuce (ou autre chose encore plus tiré par les cheveux).

    Le thread : http://ez.no/fr/developer/forum/deve...ion_works_once

    Mais si tu as une idée, je suis prenneur

  5. #5
    Rédacteur

    Avatar de Yoteco
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 099
    Par défaut
    Ouais bizarre... Normalement les fetch ne sont pas caché.

    Tu peux encore essayer dans la définition de ton opérateur (fichier Function_definition.php) d'indiquer que c'est une fonction 'read'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'operation_types' => array( 'read' )
    Blog - Mon espace developpez -
    Oracle Certified Professional, Java SE 6 Programmer
    eZ Publish Certified developer

  6. #6
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Salut,
    Peut être que cela est dû au fait que tu n'ait pas fait l'historique déclaration du tableau global contenant la liste des fonctions utilisables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $FunctionList = array();
    A part ça je repproche rien à ton custom fetch !

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Par défaut Extension eZ-Publish
    Bonjour
    je cherche des cours et des tutoriels qui explique comment créer et utiliser des extension eZ-publish
    si quelqu'un peut m'aider .

    merci beaucoup d'avance .
    mon email pour qui veut qu'on échange des connaissances ce qui concerne ez-publish :
    r.kamalos@gmail.com

    j'attends vos messages pour échanger les informations

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2008
    Messages : 7
    Par défaut
    Salut,

    Y'a un tuto sur le site d'eZ :
    http://ez.no/developer/articles/an_i...ish_extensions

    Je n'ai pas encore eu le temps de le lire mais il parait pas mal (il couvre notamment les opérateurs de templates).
    Autrement je n'en connais pas vraiment, j'ai démonté une extension existante pour faire la mienne...

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

Discussions similaires

  1. QWidget::sizeHint() n'est appelé qu'une fois
    Par Invité dans le forum Qt
    Réponses: 12
    Dernier message: 31/05/2010, 12h02
  2. Réponses: 4
    Dernier message: 28/12/2003, 15h50
  3. [MFC] Appel d'une dialog
    Par mac07 dans le forum MFC
    Réponses: 6
    Dernier message: 23/12/2003, 17h52
  4. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34
  5. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44

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