Sujet : Hoa_View & manipulation de tableaux

Bonjour à tous!

J'ai une première question sur les variables que l'on passe à la vue ($this->view->__)
Jusqu'à présent tout fonctionnait très bien, et là je suis face à une variable récalcitrante!

je vous livre le code complet du module:

<?php

import('Database.Dal.~');


/**
 * On se connecte à notre base de données.
 */
$db = Hoa_Database_Dal::getInstance(
    'mysql',
    Hoa_Database_Dal::PDO,
    'mysql:host=localhost;dbname=****',
    'root',
    '****'
);

class MediasController extends Hoa_Controller_Action_Standard {
    
    public function PhotosAction(){
            
            $this->view->pageNumber = 14;
            
            echo $this->view->render();
    }
    
    public function VideosAction(){
        
            $this->view->playerFlv='<object type="application/x-shockwave-flash" data="'.PUBLIC_URL.'Medias/dewtube.swf" width="657" height="389" id="dewtube">'.
            '<param name="allowFullScreen" value="true" />'.
            '<param name="movie" value="dewtube.swf" />'.
            '<param name="quality" value="high" />'.
            '<param name="bgcolor" value="#000000" />'.
            '<param id="videourl" name="flashvars" value="movie=%1$s&amp;width=657&amp;height=389&amp;autostart=%2$s" />'.
            '</object>';
            $this->view->playerDailymotion='<object width="657" height="389">'.
            '<param name="movie" value="http://www.dailymotion.com/swf/%1$s&autoPlay=%2$s"></param>'.
            '<param name="allowFullScreen" value="true"></param>'.
            '<param name="allowScriptAccess" value="always"></param>'.
            '<embed src="http://www.dailymotion.com/swf/%1$s&autoPlay=%2$s" type="application/x-shockwave-flash" width="657" height="389" allowfullscreen="true" allowscriptaccess="always"></embed>'.
            '</object>';
            $this->view->playerYoutube='<object width="657" height="389">'.
            '<param name="movie" value="http://www.youtube.com/v/%1$s&hl=fr_FR&autoplay=%2$s"></param>'.
            '<param name="allowFullScreen" value="true"></param>'.
            '<param name="allowscriptaccess" value="always"></param>'.
            '<embed src="http://www.youtube.com/v/%1$s&hl=fr_FR&autoplay=%2$s" type="application/x-shockwave-flash" width="657" height="389" allowscriptaccess="always" allowfullscreen="true"></embed>'.
            '</object>';
        
            $db = Hoa_Database_Dal::getLastInstance();
            
            
            $statement = null;
 
            try {
             
                $statement = $db->query(
                    'SELECT 
                        v.id_video,
                        v.url,
                        v.nom,
                        v.nom_url,
                        v.description,
                        v.type,
                        c.nom AS nom_categorie
                    FROM 
                        videos AS v
                    JOIN 
                        categories AS c
                    ON
                        v.id_categorie=c.id_categorie'
                );
                $videoListSql = $statement->fetchAll();
            }
            catch ( Hoa_Database_Dal_Exception $e ) {
             
                $statement->closeCursor();
            }
            

            
            

            $tmp=array();
            $this->view->videoList=array();
            
            foreach($videoListSql as $entry){
                
                
                $url=($entry['type']=='flv' ? PUBLIC_URL.'Medias/Videos/':'').$entry['url'];
                
                $id_video=(int)$entry['id_video'];
                
                $this->view->videoList[$id_video]=array(
                    'name'=>$entry['nom'],
                    'nameUrl'=>$entry['nom_url'],
                    'type'=>$entry['type'],
                    'url'=>$url
                );
                
                
                $tmp[]=$id_video.':{\'url\':\''.$url.'\',\'type\':\''.$entry['type'].'\'}';
            }
            
            $this->view->videoListJs='{'.implode(',',$tmp).'}';
            
            var_dump($this->view->videoList);
            
            $params = $this->getParameters();
            
            if(!empty($params['data.array']['idVideo'])){
                $videoId = (int)$params['data.array']['idVideo'];
                $autostart = 1;
            }
            else {
                $videoId = 1;
                $autostart = 0;
            }
            
            switch($this->view->videoList[$videoId]['type']){
                case 'dailymotion':
                    $player    = $this->view->playerDailymotion;
                break;
                case 'youtube':
                    $player    = $this->view->playerYoutube;
                break;
                default:
                    $player    = $this->view->playerFlv;
                break;
            }
            $this->view->player=sprintf($player,$this->view->videoList[$videoId]['url'],$autostart);
            
            $this->view->pageNumber = 15;
            
            echo $this->view->render();
    }
}

Pour toute les variables (pageNumber,videoListJs, etc...) tout fonctionne, mais le var_dump() de ma variable $this->view->videoList reste invariablement null... (le comble pour une variable... :-° )
Je ne sais pas si c'est à cause des clés de tableau que j'essaye de définir?

Merci d'avance pour les réponses wink

Dernière fois dit par jojolapine (27 Jan. 2010 21:50)

Re : Hoa_View & manipulation de tableaux

J'ai réussit à poser une rustine temporaire, j'utilise une variable temporaire pour la construction de mon tableau, et je la colle dans la variable finale...
Mais c'est un peu moche... hmm
ça serait pas du à des setter() sur la vue?

3

Re : Hoa_View & manipulation de tableaux

Hey smile,

C'est un « bug » connu de PHP. En fait, c'est une fonctionnalité qui ne marche pas dans PHP. C'est comme !a. C'est chiant mais bon … En fait, j'utilise les méthodes __get et __set, et c'est là que le bât blaisse sad.
Tu n'as pas d'autre choix que de passer par un autre tableau. À la limite, termine en le passant en référence, ce sera moins lourd en mémoire.

« 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 : Hoa_View & manipulation de tableaux

Hello!
Bon si faut refaire php, on va s'en tenir à la variable temporaire smile
Sinon l'histoire de référence, j'ai pas trop pigé ... hmm
Après lecture du manuel php, il est écrit:

N'utilisez pas  le retour par référence pour améliorer les performances, le moteur est suffisamment robuste pour optimiser cela en interne. Retournez uniquement des références lorsque vous avez techniquement une bonne raison de le faire !

Donc je croit que je vais pas changer wink

Pour la deuxième question, je vais scinder le topic wink

Merci!

5

Re : Hoa_View & manipulation de tableaux

Fait juste ceci :

$this->view->newArray = &$oldArray;

Si ça passe, ce sera mieux smile. Crois-moi wink.

« 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 : Hoa_View & manipulation de tableaux

Ok, merci.
Dans le principe, on change juste l'adresse de l'ancien tableau, pour le nouveau? et on ne fait pas un copier/coller... ?
J'ai juste professeur? smile

Re : Hoa_View & manipulation de tableaux

Ah visiblement ça passe pas... hmm

Fatal error: Cannot assign by reference to overloaded object in hoa://Application/Controller/Medias.php on line 109

Te bile pas la dessus, c'est secondaire quand même smile

8

Re : Hoa_View & manipulation de tableaux

Oui c'est secondaire smile. Dommage que ça ne passe pas …

« 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. »