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 :
- <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 :
- $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 :
- 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 ?