[SPIP Zone] Comment surcharger une action ?

Bonjour

J'essaye bêtement de surcharger l'action action_joindre_dist()

Du coup dans mon plugin j'ai mis un /action/joindre.php avec

    function action_joindre() {
        spip_log('action_joindre','doc2img');
        return action_joindre_dist();
    }

Or ceci ne marche pas du tout. j'ai tenté en nommant mon fichier
/action/doc2img_joindre.php, pas mieux.

J'ai tenté aussi avec un spip_include('action/joindre'), que dale.

En regardant sur la zone, les plugins que j'ai trouvé copie/colle
complètement les actions natives de spip, si j'ai bien lu le code.

Du coup ma question est comment faire une surcharge d'une action ?

Merci

Km

--
------------
-----
http://www.azerttyu.net (hébergement)
http://km.azerttyu.net (blog)
cam.lafit@azerttyu.net

Salut,

tu as l'air de le faire de la bonne façon, j'ai juste un doute sur le:
return action_joindre_dist();
si tu ne charges jamais ecrire/action/joindre.php, alors cette
fonction n'existera pas et du coup, php va pas aimer, non?

Pierre

On 10/17/07, cam.lafit@azerttyu.net <cam.lafit@azerttyu.net> wrote:

Bonjour

J'essaye bêtement de surcharger l'action action_joindre_dist()

Du coup dans mon plugin j'ai mis un /action/joindre.php avec

    function action_joindre() {
        spip_log('action_joindre','doc2img');
        return action_joindre_dist();
    }

Or ceci ne marche pas du tout. j'ai tenté en nommant mon fichier
/action/doc2img_joindre.php, pas mieux.

J'ai tenté aussi avec un spip_include('action/joindre'), que dale.

En regardant sur la zone, les plugins que j'ai trouvé copie/colle
complètement les actions natives de spip, si j'ai bien lu le code.

Du coup ma question est comment faire une surcharge d'une action ?

Merci

Km

--
------------
-----
http://www.azerttyu.net (hébergement)
http://km.azerttyu.net (blog)
cam.lafit@azerttyu.net
_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

--
Pierre Andrews
Ph.D. Student, The University of York
Ing.info.dipl. EPFL
pierre.andrews@a3.epfl.ch
http://www.cs.york.ac.uk/~pandrews

S'lt

si tu ne charges jamais ecrire/action/joindre.php, alors cette
fonction n'existera pas et du coup, php va pas aimer, non?

Bah comme c'est une surcharge faut bien que j'arrive à l'appeler d'une
façon ou d'une autre.

Pour la charger un spip_includre('action/joindre'); ?

km

Bonjour

Je viens de tester ainsi :

include_spip('inc/charsets'); # pour le nom de fichier
include_spip('base/abstract_sql');
include_spip('inc/actions');
include_spip('action/joindre');

    function action_joindre() {
        spip_log('action_joindre','doc2img');
        return action_joindre_dist();
    }

le action_joindre_dist() n'est pas appellé ....

km

Le truc, c'est que quand tu vas faire un
include_spip('action/joindre');

spip va charger TON fichier joindre, puisque include_spip prend la
surcharge en compte.
probablement, tu devrais utiliser un include_once, ou alors trouver le
moyen de dire à SPIP de charger le fichier original...

Pierre

On 10/17/07, cam.lafit@azerttyu.net <cam.lafit@azerttyu.net> wrote:

Bonjour

Je viens de tester ainsi :

include_spip('inc/charsets'); # pour le nom de fichier
include_spip('base/abstract_sql');
include_spip('inc/actions');
include_spip('action/joindre');

    function action_joindre() {
        spip_log('action_joindre','doc2img');
        return action_joindre_dist();
    }

le action_joindre_dist() n'est pas appellé ....

km

--
Pierre Andrews
Ph.D. Student, The University of York
Ing.info.dipl. EPFL
pierre.andrews@a3.epfl.ch
http://www.cs.york.ac.uk/~pandrews

cam.lafit@azerttyu.net wrote:

Bonjour

J'essaye bêtement de surcharger l'action action_joindre_dist()

Du coup dans mon plugin j'ai mis un /action/joindre.php avec

    function action_joindre() {
        spip_log('action_joindre','doc2img');
        return action_joindre_dist();
    }

Or ceci ne marche pas du tout. j'ai tenté en nommant mon fichier
/action/doc2img_joindre.php, pas mieux.

J'ai tenté aussi avec un spip_include('action/joindre'), que dale.

En regardant sur la zone, les plugins que j'ai trouvé copie/colle
complètement les actions natives de spip, si j'ai bien lu le code.

Du coup ma question est comment faire une surcharge d'une action ?

Tu crées un fichier action/joindre.php

tu mets dedans :

include(_DIR_RESTREINT.'action/joindre.php');

function action_joindre(...) { ... }

ça devrait suffire.

--
James

S'lt

Merci à vous 2, sur l'idée de Pierre en fouillant avec un getcwd(),
j'ai pu voir que les actions sont lancés depuis la racine donc :
require('ecrire/action/joindre.php') marche

Et je viens de tester la solution de james qui marche aussi :
include(_DIR_RESTREINT.'action/joindre.php');

Bon je vais peut être pouvoir avancer :slight_smile:

Merci encore

Km

Bonjour

Bon je viens de tester :

    function action_joindre() {
        //on charge le action originel
        include(_DIR_RESTREINT.'action/joindre.php');

         global $redirect;

        //on fait les traitement propre à la surcharge
        spip_log('action_joindre','doc2img');

        //on appelle la fonction orignelle
        action_joindre_dist();

        //on fait les traitement propre à la surcharge
        spip_log('action_joindre2','doc2img');

    }

Dans ce cas le seconde spip_log n'est pas lancé, je suppose que sur
les cascades de fonctions on a la redirection qui est exécuté entre
temps.

L'idée était de récupérer l'id_document une fois chargé pour lancer un
traitement dessus.
Du coup en fouillant un peu, je vois que c'est
inc/inc_ajouter_documents_dist() qui semble faire le boulot.

Or là impossible de faire une surchage j'ai repris le même principe
que pour action mais là ça coince et spip.log ne dit rien et mes
spip_log ne sont pas retournés.

Ceci empêche bien l'action normale de chargement mais le spip_log
n'est pas écrit. Alors je dois avoir un autre effet de bord.

function inc_ajouter_documents($sources, $file, $type, $id, $mode,
$id_document, &$actifs, $hout='', $redirect='', $iframe_redirect='') {

    spip_log('inc_ajouter_documents','doc2img');

}

Une idée ?

Je rappelle mon besoin c'est juste de connaître l'id du document lors
de son chargement.

Merci à vous

Km