PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 26/09/2018 20:51:27

JulienCognito
Membre
Inscription : 04/05/2009
Messages : 53

Demande d'aide pour création d'un plugin

Bonjour à tous,

Suite à ce message, j'imagine bien que Bronco n'est pas dispo et que détricoter un plugin n'enchante personne.
C'est pourquoi je vais prendre les choses dans l'autre sens et demander de l'aide pour construire, en s'inspirant, un plugin de galerie minimaliste.
En fait je souhaiterais pouvoir intégrer une galerie aux articles de manière simplissime.
Le code de l'affichage dans article.php pourrait être celui proposé dans le wiki:

<?php
# Récupération et affichage de la liste des images sous forme de liste
$glob = plxGlob::getInstance($dir);

if ($files = $glob->query('/[a-z0-9-_]+.tb.(jpg|gif|png)$/i')) {
    echo '<ul class="galerie">';
    foreach($files as $filename) {
        $file = $dir.'/'.$filename;
        echo '<li><a href="'.str_replace('.tb', '', $file).'"><img src="'.$file.'" alt="" /></a></li>';
    }
    echo '</ul>';
}
else echo "Aucune image";
?>

ou la variable $dir serait récupérée d'une sélection de dossier dans la page d'édition d'un article... comme dans GalArt de Bronco ops

Mais prenons du début.

CONFIG.PHP pour préciser le dossier recevant les galleries

le code ci-dessous volé à JerryWham fonctionne bien.

<?php 
if(!defined("PLX_ROOT")) exit; ?>
<?php 
	if(!empty($_POST)) {
		$plxPlugin->setParam("rep", ($_POST["rep"] == '' ? $plxAdmin->aConf["medias"].'images/' : plxUtils::strCheck($_POST["rep"])), "string");
		$plxPlugin->saveParams();
		header("Location: parametres_plugin.php?p=minigal");
		exit;
	}
?>
<h2><?php $plxPlugin->lang("L_TITLE") ?></h2>
<p><?php $plxPlugin->lang("L_DESCRIPTION") ?></p>
<form action="parametres_plugin.php?p=minigal" method="post" >
	<p>
		<label>Répertoire principal des images : 
			<input type="text" name="rep" value="<?php echo ($plxPlugin->getParam("rep") == '' ? $plxAdmin->aConf["medias"].'images/' : $plxPlugin->getParam("rep"));?>"/>
            <a class="hint"><span><?php echo L_HELP_SLASH_END ?></span></a>&nbsp;<strong>ex: data/medias/images/</strong>
		</label>
		</p>

	<br />
	<input type="submit" name="submit" value="Enregistrer"/>
</form>

MINIGAL.PHP - hook=AdminArticleContent - Ajout de la liste déroulante en bas de la page d'édition d'un article
Encore volé à GalArt

public function AdminArticleContent(){
		$label=$this->getLang("L_ARTICLE_FOLDER");		
		echo '<?php 
		function recursiveDirContent($root=null){
			if (empty($root)){return false;}
			if (!is_dir($root)){return array($root);}
			$iter = new RecursiveIteratorIterator(
			    new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS),
			    RecursiveIteratorIterator::SELF_FIRST,
			    RecursiveIteratorIterator::CATCH_GET_CHILD # Ignore "Permission denied"
			);

			$paths = array($root);
			foreach ($iter as $path => $dir) {		
				$paths[] = $path; 
			}

			return $paths;
		}
			$folders=recursiveDirContent(PLX_ROOT."'.$this->getParam('rep').'");
			?>';

		echo '
					<div class="sml-12"><label for="id_url_link">'.$label.'</label><select name="folder" id="folder_image">';
					echo "<option value=''></option>\n";
		echo '<?php
		foreach ($folders as $item) {
			if (is_dir($item)){	
				if (PLX_ROOT.$folder==$item){$selected="selected=\"true\"";}else{$selected="";}
				echo "<option value=\'".str_replace(PLX_ROOT,\'\',$item)."\' $selected>".str_replace(PLX_ROOT.$plxAdmin->aConf[\'medias\'],\'\',$item)."</option>\n";
			}
		} ?>
		</select></div>';
	}	

MINIGAL.PHP - hook=plxAdminEditArticleXml - Ajout de l'info dossier au fichier XML de l'article
Toujours emprunté à Bronco

public function plxAdminEditArticleXml(){
		echo '<?php 
			$folder = plxUtils::getValue($content["folder"]);
			$xml .= "\t<folder><![CDATA[".plxUtils::cdataCheck(trim($folder))."]]></folder>\n";					
			?>';
	}
	

MINIGAL.PHP - hook= AdminArticleParseData/AdminArticleInitData - On récupère l'info dans l'article
Là je comprends déjà plus rien.

	# Ajout de la variable $url_link (édition d'un article)
	public function AdminArticleParseData(){
		echo '<?php 
			if (!isset($result["folder"])){
				$folder="";
			}else{
				$folder=$result["folder"];
			}
		?>';
	}

		# Ajout de la variable $url_link lors de l'initialisation
	public function AdminArticlePostData(){
		echo '<?php	$folder = plxUtils::strCheck($_POST["folder"]);?>';
		
	}

Qu'est ce qu'il manque?
Ah oui, l'appel de l'info ci dessus, et son insertion dans le code tout en haut! Là, le code de Bronco rajoute la génération de vignette, la cration d'un flux rss, et ma méconnaissance totale en prog php m’empêche d'avancer:

  1. Quel hook pour apparaître en fin de contenu ArtContent? plxMotorParseArticle?

  2. J'ai oublié des trucs?

  3. Comment modifier le code indiqué tout en haut issu du wiki pour afficher la gallerie.

  4. Comment insérer un peu de css? Dans l'idéal, il apparaîtra dans l'administration du plugin.

Bref, il y a du boulot mais les essais en php, je n'y arrive pas (une erreur de syntaxe et vlan!) donc mon tatonement habituel à base de "afficher le code source" dans firefox n'est pas efficace.

Merci d'avance aux programmeurs chevronnés que je lis ici pour leur attention;

Julien

PS: je peux héberger ça sur un dépôt Gitea, si c'est plus simple.

Dernière modification par JulienCognito (26/09/2018 22:42:43)

Hors ligne

#2 27/09/2018 12:01:51

JulienCognito
Membre
Inscription : 04/05/2009
Messages : 53

Re : Demande d'aide pour création d'un plugin

Bonjour;

Non, ce n'est pas un UP, c'est un point sur mes avancés. wink
J'ai hébergé le code sur gitea là pour plus de facilité mais je le pose ici aussi pour l'historique.

La partie config, admin et xml semble fonctionner. Mais pour l'ajout côté public, je ne m'en sort pas (derniers paragraphe)

<?php

class minigal extends plxPlugin {
	public function __construct($default_lang) {
		
# defaut
	parent::__construct($default_lang);
	$this->setConfigProfil(PROFIL_ADMIN);
		
		
# Declaration des Hooks
	$this->addHook('plxAdminEditArticleXml','plxAdminEditArticleXml');		
	$this->addHook('AdminArticleContent','AdminArticleContent');
	$this->addHook('AdminArticlePreview','AdminArticlePreview');
	$this->addHook('AdminArticlePostData','AdminArticlePostData');
	$this->addHook('AdminArticleInitData','AdminArticleInitData');
	$this->addHook('AdminArticleParseData','AdminArticleParseData');
	$this->addHook('plxMotorParseArticle','plxMotorParseArticle');
		}

# Fonctions Activation/Désactivation, inutilisé
	public function OnActivate() {}
	public function OnDeactivate() {}
	
#################################################################################################################


# Ajoute le stockage dossier dans le fichier de l'article
	public function plxAdminEditArticleXml(){
		echo '<?php 
			$folder = plxUtils::getValue($content["folder"]);
			$xml .= "\t<folder><![CDATA[".plxUtils::cdataCheck(trim($folder))."]]></folder>\n";					
			?>';
	}

# Ajout d'un input sur la page admin pour gérer le dossier associé à un article
	public function AdminArticleContent(){
		$label=$this->getLang("L_ARTICLE_FOLDER");		
		echo '<?php 
		function recursiveDirContent($root=null){
			if (empty($root)){return false;}
			if (!is_dir($root)){return array($root);}
			$iter = new RecursiveIteratorIterator(
			    new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS),
			    RecursiveIteratorIterator::SELF_FIRST,
			    RecursiveIteratorIterator::CATCH_GET_CHILD # Ignore "Permission denied"
			);

			$paths = array($root);
			foreach ($iter as $path => $dir) {		
				$paths[] = $path; 
			}

			return $paths;
		}
			$folders=recursiveDirContent(PLX_ROOT."'.$this->getParam('rep').'");
			?>';

		echo '
					<div class="sml-12"><label for="id_url_link">'.$label.'</label><select name="folder" id="folder_image">';
					echo "<option value=''></option>\n";
		echo '<?php
		foreach ($folders as $item) {
			if (is_dir($item)){	
				if (PLX_ROOT.$folder==$item){$selected="selected=\"true\"";}else{$selected="";}
				echo "<option value=\'".str_replace(PLX_ROOT,\'\',$item)."\' $selected>".str_replace(PLX_ROOT.$plxAdmin->aConf	[\'medias\'],\'\',$item)."</option>\n";
			}
		} ?>
		</select></div>';
	}

	
# Gestion du lien dans la prévisualisation d'un article	
	public function AdminArticlePreview(){
		echo '<?php	$art["folder"] = plxUtils::strCheck($_POST["folder"]);?>';
	}

# Gestion du lien posté dans l'article
	public function AdminArticlePostData(){
		echo '<?php	$folder = plxUtils::strCheck($_POST["folder"]);?>';
	}

# Ajout de la variable $url_link (nouvel article)
	public function AdminArticleInitData(){
		echo '<?php	$folder = "";?>';
	}

# Ajout de la variable $url_link (édition d'un article)
	public function AdminArticleParseData(){
		echo '<?php 
			if (!isset($result["folder"])){ $folder="";
			}else{$folder=$result["folder"];
			}
		?>';
	}

# Gestion du dossier dans le parsing d'un article
	public function plxMotorParseArticle(){
		echo '<?php 
		if (!empty($iTags["folder"])){
			$art["folder"] = $values[$iTags["folder"][0]]["value"];
			if (!defined("PLX_ADMIN")){				
				$art["content"].="
					".$this->plxPlugins->aPlugins["minigal"]->galerie(PLX_ROOT.$art["folder"],true);
			}
		}else{
			$art["folder"] = "";
		}
		?>';
	}

##################################################################################################################
	
	public function galerie($path=null,$title=null,$infos=false){
		$plxMotor = plxMotor::getInstance();
		if (!$path || $path == PLX_ROOT){return false;}
		$liste=array_merge(glob($path.'/*.png'),glob($path.'/*.gif'),glob($path.'/*.jpg'),glob($path.'/*.jpeg'));
		echo  '<?php 		
		$content.= '<div class="gallery">';
			foreach($liste as $image){	
				$i=basename($image);
				$content.=  "<a href='".$plxMotor->urlRewrite($image)."' class='photo' ><img src='".$plxMotor->urlRewrite($image,'.tb',)."' /></a>";
		}
	?>';
		else{$content.=  '<p class="error">Pas d\'image dans <em>'.$path.'</em></p>';}
		return $content;
	}
}

Bien amicalement,

Julien

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2019 PluXml.org, tous droits réservés