variable du dossier image

danielsandanielsan Member
juin 2012 modifié dans Entraide
Bonsoir,


je planche sur un plugin qui crée automatiquement un dossier d'images associé à l'article.
L'objectif est d'afficher un diapo des images associées à l'article.


Cette manière évite au rédacteur de devoir
1/ crée un nouveau dossier
2/ renseigner dans un champ l'adresse du dossier


Le plugin se fait en 2 étapes:


1/ création du dossier
		public function AdminArticleTop() {
			$string = "
					\$fileArt=array();
					\$dossier_img = PLX_ROOT.\"/\".\$plxAdmin->aConf['images']; // url du dossier général images
					\$fichiers = scandir(\$dossier_img); // lecture du dossier images
					foreach(\$plxAdmin->aCats as \$cat_id => \$cat_name) {
						if(is_array(\$catId) AND in_array(\$cat_id, \$catId)) {
							if(!is_dir(\$dossier_img.\"/\".\$cat_name['url'])) { # Si le dossier de la catégorie de l'article n'existe pas on le crée
								if(!@mkdir(\$dossier_img.\"/\".\$cat_name['url'],0755,true)){
									return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
								} else {}
								if(!@mkdir(\$dossier_img.\"/\".\$cat_name['url'].\"/\".\$url,0755,true)){
									return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
								} else {}
								
							} else { // si le dossier de la catégorie existe, on lit le contenu de son dossier
								if(!is_dir(\$dossier_img.\"/\".\$cat_name['url'].\"/\".\$url)) { # Si le dossier de l'article n'existe pas on le crée
									if(!@mkdir(\$dossier_img.\"/\".\$cat_name['url'].\"/\".\$url,0755,true)){
										return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
									} else {}
									
								} else {}
							}
						}else{}
					}
				";
			echo "<?php ".$string." ?>";
		}


2/ renvoi de l'url du dossier dans le template
		public function filesGenerator() {
			$plxMotor = plxMotor::getInstance(); // permet de récupérer les champs de l'article
			$catIds = explode(',', $plxMotor->plxRecord_arts->f('categorie'));
			
			$filesArt = array();
			$dossier_img = PLX_ROOT."/".$plxAdmin->aConf['images']; // url du dossier général images
			
			# Initialisation de notre variable interne
			$catIds = explode(',', $plxMotor->plxRecord_arts->f('categorie'));
			foreach ($catIds as $idx => $catId) {
				# On verifie que la categorie n'est pas "home"
				if($catId != 'home') {
					# On va verifier que la categorie existe
					if(isset($plxMotor->aCats[ $catId ])) {
						# On recupere les infos de la categorie
						$url = $plxMotor->aCats[ $catId ]['url'];
						$filesArt[] = $dossier_img."/".$url."/".$plxMotor->plxRecord_arts->f('url');
					} else {}
				} else {}
			}

			return $filesArt;


Le hic est que je n'arrive pas à renvoyer la variable de l'adresse du dossier d'images ... pourtant elle fonction bien dans la fonction AdminArticleTop()
$plxAdmin->aConf['images']


Quelqu'un a-t-il une idée ?

Merci pour l'aide.

Réponses

  • zakar!zakar! Member
    Peux être en la passant en session ?
  • euh ... je ne suis pas bien sur là ;)
    t'as une idée en tête ?
  • zakar!zakar! Member
    Récupérer l'id à la volée:
    		public function AdminArticleTop() {
    			$string = '
    					$fileArt=array();
    					$dossier_img = PLX_ROOT. '/' .$plxAdmin->aConf['images']; // url du dossier général images
    					$fichiers = scandir($dossier_img); // lecture du dossier images
    					foreach(\$plxAdmin->aCats as $cat_id => $cat_name) {
    						if(is_array(\$catId) AND in_array($cat_id, $catId)) {
    						    $_SESSION['folder_img'] = $dossier_img. '/' .$cat_name['url'];
    							if(!is_dir($dossier_img. '/' .$cat_name['url'])) { # Si le dossier de la catégorie de l'article n'existe pas on le crée
    								if(!@mkdir(\$dossier_img. '/' .$cat_name['url'],0755,true)){
    									return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
    								} else {}
    								if(!@mkdir($dossier_img. '/' .$cat_name['url']. '/' .$url,0755,true)){
    									return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
    								} else {}
    								
    							} else { // si le dossier de la catégorie existe, on lit le contenu de son dossier
    								if(!is_dir($dossier_img. '/' .$cat_name['url']. '/' .$url)) { # Si le dossier de l'article n'existe pas on le crée
    									if(!@mkdir($dossier_img. '/' .$cat_name['url']. '/' .$url,0755,true)){
    										return plxMsg::Error(L_PLXMEDIAS_NEW_FOLDER_ERR);
    									} else {}
    									
    								} else {}
    							}
    						}else{}
    					}
    				';
    			echo  $string;
    		}
    		
    		public function filesGenerator() {
    			$plxMotor = plxMotor::getInstance(); // permet de récupérer les champs de l'article
    			$catIds = explode(',', $plxMotor->plxRecord_arts->f('categorie'));
    			
    			$filesArt = array();
    			$dossier_img = PLX_ROOT. '/' .$_SESSION['folder_img']; // url du dossier général images
    			
    			# Initialisation de notre variable interne
    			$catIds = explode(',', $plxMotor->plxRecord_arts->f('categorie'));
    			foreach ($catIds as $idx => $catId) {
    				# On verifie que la categorie n'est pas "home"
    				if($catId != 'home') {
    					# On va verifier que la categorie existe
    					if(isset($plxMotor->aCats[ $catId ])) {
    						# On recupere les infos de la categorie
    						$url = $plxMotor->aCats[ $catId ]['url'];
    						$filesArt[] = $dossier_img."/".$url."/".$plxMotor->plxRecord_arts->f('url');
    					} else {}
    				} else {}
    			}
    
    			return $filesArt;	
    
    Pas testé...
    Sinon dans ta function filesGenerator(), passer par un $_GET[$_SESSION]
  • Je crains que cela ne puisse fonctionner ..
    La function AdminArticleTop() s’exécute lors de l'édition d'un article en backoffice et function filesGenerator() lors de la consultation en frontoffice.
    Pour l'instant j'ai mis "data/images", mais bon quitte à ce que la variable existe, autant l'utiliser ( surtout si quelqu'un la modifie par la suite ).
  • StéphaneStéphane Member, Former PluXml Project Manager
    dans ta fonction filegenerator tu as déclaré une instance de plxmotor, or pour accèder à aConf tu utilises plxAdmin. Normal que ça te retourne rien.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • merci Stéphane.
    et comment je fais pour accéder à plxAdmin dans filegenerator ?


    Merci
  • StéphaneStéphane Member, Former PluXml Project Manager
    $plxAdmin = plxAdmin::getInstance();
    

    pas plus compliqué ;)
    et comme plxAdmin est une classe dérivée de plxMotor, tu auras aussi accès aux méthodes de plxMotor.
    attention toutefois, si ton plugin est utilisé coté visiteur, plxAdmin n'est pas accessible.

    Mais dans ton cas, il faut juste remplacer $plxAdmin->aConf par $plxMotor->aConf, surtout que tu l'utilises de cette façon plus bas dans ton code et que tu as déclaré une instance de plxMotor au début de ta fonction filegenerator.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • yeahhhhh ! ça marche graaaaave :p
    Merci ! ( c'est que j'ai un peu peur de créer une faille, alors j'préfère demander ;) )


    je suis soulagé !
    ( je fais passer un site sous joomla vers PluXml, 200 articles ... j'ai déjà ça de moins à faire ! ^^^)
Connectez-vous ou Inscrivez-vous pour répondre.