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

Zend PHP Discussion :

Mapping d'image sous Zend


Sujet :

Zend PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut Mapping d'image sous Zend
    Bonjour,

    Toujours dans le cadre de mon projet, je cherche à appeler une image par le biais de mon controlleur.


    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
    class PictController extends Zend_Controller_Action
    {
     
        public function indexAction()
        {   
     
        	$objpict = new Application_Model_Page();     	
        	$objpict->CheminPictures(Application_Model_String::ExtractNamePict($this->getParam('niveau0')));    	
        	$this->_helper->viewRenderer->setNoRender(true);
        	$this->_helper->getHelper('layout')->disableLayout();
        	header('Content-Type: image/jpeg');
        	header('Content-Length: ' . filesize($file));
        	echo file_get_contents($file);
        	exit;    	
     
        }   
     
    }
    Seulement je ne sais plus comment procéder afin d'appeler ce controlleur depuis ma vue afin qu'il me renvoie l'information.
    Ceci me renvoie le nom de la page dans laquelle je suis et pas le controlleur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img alt="montitre" src="<?php echo $this->url(array('controller' => 'pict', 'action' => 'index')); ?>" >

    Une route à été crée également, mais elle n'est pas prise en compte non plus !



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$routeRegex = new Zend_Controller_Router_Route_Regex(
    				'img/([a-z-0-9-/-]+).jpg',
    				array('controller' =>'pict','action' => 'index'),
    				array(1 => 'niveau0',2 => 'niveau1',3 => 'niveau2'),'img/%s.jpg');
     
    		$this->_routeur->addRoute('routeimage', $routeRegex);


    Une idée comment faire ?

    D'avance merci
    ++

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,

    si tu souhaites appeler ton controlleur depuis une vue il te faut indiquer le nom du controlleur, de l'action et éventuellement des paramètres dans la balise <a href=""> </a>:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <a href="<?php echo $this->url(array('controller'=>'pict',
            'action'=>'index', 'niveau0'=>'valDuPrametre')); ?>">lien vers indexAction</a>

    un clic sur le lien fait appel à l'action index du controlleur pict et passera le paramètre $_GET['niveau0'] à l'action index.

    L'action index se contentera de transmettre à la vue associée le chemin de l'image.Dans la vue, tu recupères le chemin transmis par l'action index et tu renseignes dans la balise <img src=""/> ce chemin:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class PictController extends Zend_Controller_Action
    {
     
        public function indexAction()
        {   
     
        	$objpict = new Application_Model_Page();     	
        	$chemin=$objpict->CheminPictures(Application_Model_String::ExtractNamePict($this->getParam('niveau0')));    	
     
     
        $this->view->chemin = $chemin;//
     
    }

    dans la vue index.phtml:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img alt="montitre" src="<?php echo $this->chemin; ?>" >

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    Merci pour ta réponse !

    Je cherche à mettre des slash dans "niveau0", mais ils sont encodé, donc je n'arrive pas à la solution que je désire !

    Sais tu comment je peux faire passer plusieurs "niveau" (niveau0, niveau1,...) dans la fonction URL ? ou ajouter des slashs ?

    D'avance merci
    ++

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    si tu veux passer plusieurs paramètres $_GET dans l'url.Par exemple http://domain.com/pic/index/param1/titi/param2/toto

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //dans le controller pic
     
    public function indexAction(){
     $parametre1=$this->getParam('param1') //correspond à $_GET['param1'] et affichera titi
     
     $parametre2=$this->getParam('param2') //correspond à $_GET['param2'] et affichera toto
     
    }

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 240
    Par défaut
    Problème résolu :

    Le but :

    Mettre les images dans un autre endroit que dans le dossier public de Zend et ne pas avoir à mettre un nom SEO pour chacun des images.
    L'idée étant de mappé le noms des images réel au nom virtuel...

    Afficher l'image

    Mettre un chemin virtuel dans la balise img.
    Aucun dossier n'existe, on peut mettre n'importe quel arborescence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <img src="<?php 
    		echo $this->url(
    			array( 'niveau0'=>'img/maison/jardin.jpg')
     
    		,false,false,false) ?>" />

    Comment trouve t-il la bonne image ?

    Une route à été crée pour rediriger la requête vers le bon controller et la bonne action.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$routeRegex = new Zend_Controller_Router_Route_Regex(
    				'img/([a-z-0-9-/-]+).jpg',
    				array('controller' =>'pict','action' => 'index'),
    				array(1 => 'niveau0',2 => 'niveau1',3 => 'niveau2'),'img/%s.jpg');
     
    		$this->_routeur->addRoute('routeimage', $routeRegex);

    Coté Controller

    Le controller reçoit le paramètre passé - GetParam("niveau0") - et me renvoie le file_get_contents de l'image.
    Le vrai chemin de l'image fut trouvé en le recherchant en base...


    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
    class PictController extends Zend_Controller_Action
    {
     
        public function indexAction()
        {      	
     
     
        	$objpict = new Application_Model_Page();    	
        	//var_dump($this->_getAllParams());      	
        	$file = 'images/bx3.jpg';
     
        	//$objpict->CheminPictures(Application_Model_String::ExtractNamePict($this->getParam('niveau0')));
     
     
        	$this->_helper->viewRenderer->setNoRender(true);
        	//$this->_helper->getHelper('layout')->disableLayout();
        	/*$file = 'pict/M2DR4003.jpg';*/
        	header('Content-Type: image/jpeg');
        	header('Content-Length: ' . filesize($file));
        	echo file_get_contents($file);
        	exit;
     
        }
     
     
    }

    Conclusion

    Avec cette méthode, vous pouvez crée des dossier virtuel, crée des noms virtuel d'image et renvoyé au visiteur la vrai image.
    Il vous faut juste une base de données pour faire la relation entre le nom virtuel que vous donnez et le nom réel de l'image...

    Requête inutile en base de données ? Oui surement.
    Qu'est-ce qui empêche la mise en cache du chemin réel de l'image ?

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

Discussions similaires

  1. Animation d'une séries d'image sous une carte (Map)
    Par catrina13 dans le forum Images
    Réponses: 0
    Dernier message: 13/12/2014, 10h17
  2. Manipulation d'images sous Zend
    Par francois_a dans le forum Autres composants
    Réponses: 13
    Dernier message: 19/10/2010, 09h41
  3. [D5][SQL Server] Conserver des images dans la BDD
    Par FONKOU dans le forum Bases de données
    Réponses: 8
    Dernier message: 08/06/2008, 19h58
  4. Afficher des images sous directX
    Par cyberlewis dans le forum DirectX
    Réponses: 17
    Dernier message: 12/07/2004, 12h07
  5. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 10h41

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