Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Résolu] Nouvel objet jResponse qui ne fonctionne pas

Posted by sylozof on 01/10/2008 10:01

Bonjour

J'ai développé un objet jResponse qui est un mix entre un jResponseText, un jResponseHTML et un jResponseXml. Je l'ai nommé jResponseTextHtml.

Son utilité est d'envoyer du HTML, avec la possibilité d'utiliser un template (donc comme jResponseHTML) mais sous forme de texte, sans les balises meta, headers et autres body autour. L'intérêt c'est de pouvoir envoyer en réponse des bouts de code HTML pour des échanges XMLHttpRequest (plus communément Ajax).

C'était déjà possible d'envoyer du HTML sous forme de texte avec jResponseText comme indiqué sur cette page du manuel mais l'objet jResponseText ne permet pas l'utilisation de template, et ça m'embêtait de générer tout mon HTML à la main.

Mais le problème (j'y arrive enfin) c'est que ma réponse ne semble pas fonctionner. En effet elle me renvoie une page vide.

Voilà le code de l'objet jResponseTextHtml

 <?php
 
 require_once(JELIX_LIB_TPL_PATH.'jTpl.class.php');
 
 /**
 * TextHtml response generator
 * This response gives a way to generate pieces of HTML content using templates
 * but without all the headers and enclosing tags (<body>, <html>, etc.). Handy to generate
 * HTML content for Ajax services.
 * @package  jelix
 * @subpackage core_response
 */
 class jResponseTextHtml extends jResponse {
 
     protected $_type = 'texthtml';
 
     public $content = null;
 
     public $contentTpl = '';
 
     protected $_charset;
 
     function __construct (){
         global $gJConfig;
         $this->_charset = $gJConfig->charset;
         $this->content = new jTpl();
         parent::__construct();
     }
 
     final public function output(){
         
         $this->addHttpHeader('Content-Type','text/plain;charset='.$this->_charset);
         //$this->_httpHeaders['Content-length']=strlen($this->content);
         $this->sendHttpHeaders();
 
         if(is_string($this->content)) {
             // utilisation chaine de caractères html
             $texthtml_string = $this->content;
         }else if (!empty($this->contentTpl)) {
             // utilisation d'un template
             $texthtml_string = $this->content->fetch($this->contentTpl);
         }
 
         return true;
     }
 
     final public function outputErrors() {
         global $gJConfig;
         header("HTTP/1.0 500 Internal Server Error");
         header('Content-Type: text/plain;charset='.$gJConfig->charset);
         if($this->hasErrors()){
             foreach( $GLOBALS['gJCoord']->errorMessages  as $e){
                echo '['.$e[0].' '.$e[1].'] '.$e[2]." \t".$e[3]." \t".$e[4]."\n";
             }
         }else{
             echo "[unknow error]\n";
         }
     }
 }

 ?>

J'ai bien déclaré ma réponse personnalisée dans la config avec

 [responses]
 texthtml = jResponseTextHtml

Voici le code de mon action qui utilise la réponse

 function listprod() {
    // récupération du numéro de commande
    $order_no = $this->param('order_no');
 
    $rep = $this->getResponse('texthtml');
    $rep->contentTpl = 'listprod';
    $rep->content->assign('order_no', $order_no);
 
    return $rep;
 }

et voici le code de mon template listprod.tpl

 <h2>Liste des produits pour la commande {$order_no}</h2>

Et j'appelle le tout avec une url du genre http://localhost/myapp/www/index.php?order_no=414&module=sav&action=default:listprod

Et donc comme dit, la page que j'obtiens est une page blanche, sans code source, alors que je devrais y trouver (d'après le paramètre order_no de l'url du dessus)

 <h2>Liste des produits pour la commande 414</h2>

Auriez-vous une idée ? J'ai certainement du foirer un truc dans ma jResponseTextHml, mais quoi ?

Merci d'avance.

  [Opened] Re: Nouvel objet jResponse qui ne fonctionne pas

Reply #1 Posted by laurentj on 01/10/2008 10:07

Bah tu rempli la variable $texthtml_string mais tu n'en fait rien aprés... Je crois donc que tu as oublié un léger détail : une fonction echo par exemple ;-)

  [Opened] Re: Nouvel objet jResponse qui ne fonctionne pas

Reply #2 Posted by sylozof on 01/10/2008 10:13

RAAAAAH !!! Je comprends pas comment on peut être aussi %*$ù# !

Merci beaucoup, surtout pour la réactivité éclair.

Soit dit en passant, ça serait sympa si ce genre de réponse était intégrée dans le core, parce que générer des fragments de HTML avec un jResponseText, c'est pas vraiment pratique si on a du code un peu 'complexe'.

Merci encore une fois.

  [Opened] Re: [Résolu] Nouvel objet jResponse qui ne fonctionne pas

Reply #3 Posted by sylozof on 01/10/2008 14:53

Entendu, ce sera avec plaisir.

  [Opened] Re: [Résolu] Nouvel objet jResponse qui ne fonctionne pas

Reply #4 Posted by sylvain261 on 03/14/2008 08:44

Apparemment y a pas eu de ticket ouvert jusqu'à présent.

J'en ai ouvert un : http://developer.jelix.org/ticket/501

 
Page
  1. Re: [Résolu] Nouvel objet jResponse qui ne fonctionne pas