Sujet : Exécuter une action, au sein d'une autre.

Bonsoir à tous,

J'ai un petit soucis aujourd'hui, j'ai implémenté un module "Ajax" des mes controleurs, et j'aimerais pouvoir y accéder depuis mes autres actions...
J'ai du mal à expliquer alors direction l'exemple:

Soit l'action "Calendrier" du module "Index".
Au sein du code html généré par cette dernière, on appelle en Ajax une action "Calendar" du module "Ajax".
Jusque là tout va bien, les appels se font bien.

Maintenant le problème que je trouve, c'est que j'aimerais avoir une première génération de mon calendrier sans passer par ajax, au sein même de l'action "Calendrier"...

Sur le papier, ça donne ceci:

public function CalendrierAction(){
            
//...                
                        $ajaxObject = new AjaxController();
                        $this->view->calendar = $ajaxObject->CalendarAction();

Mais ça ne fonctionne pas, le controller ajax n'est pas chargé, donc il ne trouve pas la classe, etc...
J'ai essayer aussi ceci au sein de la vue de l'action "Calendrier":

<div id="calendar">
    <?php include_once(PUBLIC_STATIC_URL.'index.php?module=Ajax&action=Calendar&year='.date('Y').'&month='.date('m'));?>
</div>

Mais ça ne fonctionne pas, et là je ne sais même pas pourquoi:

Warning: include_once() [function.include-once]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in hoa://Application/View/HendTheme/Index/Calendrier.phtml on line 15

Warning: include_once(http://localhost/Developpement/Hoa_Framework/Application/Public/index.php?module=Ajax&action=Calendar&year=2010&month=09) [function.include-once]: failed to open stream: no suitable wrapper could be found in hoa://Application/View/HendTheme/Index/Calendrier.phtml on line 15

Warning: include_once() [function.include]: Failed opening 'http://localhost/Developpement/Hoa_Framework/Application/Public/index.php?module=Ajax&action=Calendar&year=2010&month=09' for inclusion (include_path='.../Developpement/Hoa_Framework/:.../Developpement/Hoa_Framework/Framework/Core/:.../Developpement/Hoa_Framework/Application/:.:/usr/share/php:/usr/share/pear') in hoa://Application/View/HendTheme/Index/Calendrier.phtml on line 15

Voilà je m'en remet à vous, car je ne sais vraiment pas par quel bout prendre ce problème smile
Merci d'avance!

Re : Exécuter une action, au sein d'une autre.

Je comprend pas ta logique ...

include_once ce n'est pas pour inclure un fichier seulement ??

PUBLIC_STATIC_URL.'index.php?module=Ajax&action=Calendar&year='.date('Y').'&month='.date('m'))

Avec ça tu récupères le resultat d'une méthode et non un fichier.

....

Dernière fois dit par Ecureuil Virtuel (16 Sep. 2010 11:20)

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

3

Re : Exécuter une action, au sein d'une autre.

Le principe de l'ajax ce n'est pas de ... faire des appel en javascript ?:cool:

Apprend Hoa et est heureux smile

4

Re : Exécuter une action, au sein d'une autre.

Oui mais un include n'est pas Javascript. Et XHR ne s'exécute pas côté serveur mais côté client … Je ne comprends pas bien non plus smile.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Exécuter une action, au sein d'une autre.

Les requête AJAX doivent être directement dans ton JS.
Par la suite de récupérera une chaîne de caractère que tu traitera.



Exemple avec jQuery : (JS)

Dans mon exemple, j'ai un calendrier en html du mois de janvier.
Celui-ci ce trouve dans une div : <div id="agenda">mon agenda sous forme de tableau</div>

Et je voudrais afficher le mois de février.

Pour ça je vais faire une requête à mon serveur qui me renverra du html.

Ma requête en JS sera donc :

$('#agenda').load('index.php?module=Ajax&action=Calendar&year=2011&month=02');
" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Exécuter une action, au sein d'une autre.

Alors pour répondre à vos remarques:

Le principe de l'ajax c'est effectivement de pouvoir faire des appels sans recharger la page en javascript... effectivement.
Mais quid du premier appel? pourquoi faire deux requête sur le serveur, alors qu'au premier affichage il est possible de n'en faire qu'une?

J'ajoute à cela: que faire des moteurs de recherches et des utilisateurs qui désactivent javascript? (certes il n'y en à plus beaucoup m'enfin...)

Pour ce qui est de mon include, il est logique à mes yeux, je ne cherche pas à inclure un fichier, mais bien le résultat de son éxécution avec les paramètres passés, seulement l'include d'urls distantes n'est pas possible sur toutes les configuration php, ce qui me limite du coup...

Donc pour résumer:
Je veux supprimer une requête inutile au serveur et donner le contenu de la page complet au premier chargement (l'ajax n'étant là que pour rendre l'utilisation de la page plus agréable).

C'est mieux pour les explications?
Merci encore

Re : Exécuter une action, au sein d'une autre.

pour le résultat de ta fonction pourquoi tu fais pas :

dans ton controller :

$this->view->result = mafonction(param1, param2);

et dans ta vue :

echo $this->result

???????

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Exécuter une action, au sein d'une autre.

Je ne comprend pas trop ta question?
La méthode dont je souhaite récupérer le résultat, fait partie d'un module/controller différent :

class AjaxController extends Hoa_Controller_Action_Standard {

    public function CalendarAction(){

        //...
    }
}

Et je souhaite "l'éxécuter" au sein d'un autre module/controller, ce qui donnerais théoriquement (à peu près) :

class IndexController extends Hoa_Controller_Action_Standard {

    public function CalendrierAction(){

        //...
       $oAjax = new AjaxController();

       $this->view->result = $oAjax->CalendarAction();

    }
}

Seulement, cela casse les dépendances (import imporModule...), fin bref, ça ne fonctionne pas quoi...

Re : Exécuter une action, au sein d'une autre.

Si tu utilise à plusieurs endroit ta méthode, pourquoi tu ne fais pas un Hoathis ??

Un Hoathis_Ajax

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

10

Re : Exécuter une action, au sein d'une autre.

Moi ce que je ne comprends pas, c'est pourquoi tu dis que ça ne marche pas. Il se passe quoi ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »