Parser un xml pour un plugin
Bonjour,
Pour plxcoinslider j'ai besoin de créer depuis le fichier admin.php du plugin différent fichier xml de configuration pour chaque slideshow. J'ai deux solutions, faire ma popote ou alors utiliser les fonctions natives de pluxml pour gérer les fichiers xml. Je pense que la deuxième solution est la mieux et surtout mieux intégré à pluxml.
On commence. J'ai créé un fichier class.admin.plxcoinslider.php qui est une class avec comme parent PlxMotor :
Si vous avez une idée ça serait sympa.
Pour plxcoinslider j'ai besoin de créer depuis le fichier admin.php du plugin différent fichier xml de configuration pour chaque slideshow. J'ai deux solutions, faire ma popote ou alors utiliser les fonctions natives de pluxml pour gérer les fichiers xml. Je pense que la deuxième solution est la mieux et surtout mieux intégré à pluxml.
On commence. J'ai créé un fichier class.admin.plxcoinslider.php qui est une class avec comme parent PlxMotor :
<?php
class AdminPlxCoinslider extends plxMotor {
public $aSlideshow = array();
public function __construct() {
$this->getSlideshow(PLX_ROOT.$this->aSlideshow['slideshow_id']);
}
public function getSlideshow($filename) {
if(!is_file($filename)) return;
$data = implode('',file($filename));
$parser = xml_parser_create(PLX_CHARSET);
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
xml_parse_into_struct($parser,$data,$values,$iTags);
xml_parser_free($parser);
if(isset($iTags['name'])) {
$nb = sizeof($iTags['name']);
$size = ceil(sizeof($iTags['name'])/$nb);
# On boucle sur $nb
for($i = 0; $i < $nb; $i++) {
$attributes = $values[$iTags['number'][$i*$size]]['attributes'];
$number = $attributes['number'];
$this->aSlideshow[$number]['name'] = isset($iTags['name'][$i])?$values[$iTags['name'][$i]]['value']:'';
}
}
}
public function editSlideshow($slideshow) {
if (empty($slideshow['name'])) {
return plxMsg::Error('Nom du slideshow obligatoire');
} else {
$xml = "<?xml version=\"1.0\" encoding=\"".PLX_CHARSET."\"?>\n";
$xml .= "<document>\n";
$xml .= "\t<slideshow number=\"".$slideshow['slideshow_id']."\">\n";
$xml .= "\t\t<name><![CDATA[".plxUtils::cdataCheck($slideshow['name'])."]]></name>\n";
$xml .= "\t\t<width><![CDATA[".plxUtils::cdataCheck($slideshow['width'])."]]></width>\n";
$xml .= "\t\t<height><![CDATA[".plxUtils::cdataCheck($slideshow['height'])."]]></height>\n";
$xml .= "\t\t<spw><![CDATA[".plxUtils::cdataCheck($slideshow['spw'])."]]></spw>\n";
$xml .= "\t\t<sph><![CDATA[".plxUtils::cdataCheck($slideshow['sph'])."]]></sph>\n";
$xml .= "\t\t<delay><![CDATA[".plxUtils::cdataCheck($slideshow['delay'])."]]></delay>\n";
$xml .= "\t\t<sdelay><![CDATA[".plxUtils::cdataCheck($slideshow['sdelay'])."]]></sdelay>\n";
$xml .= "\t\t<opacity><![CDATA[".plxUtils::cdataCheck($slideshow['opacity'])."]]></opacity>\n";
$xml .= "\t\t<effet><![CDATA[".plxUtils::cdataCheck($slideshow['effet'])."]]></effet>\n";
$xml .= "\t\t<navigation><![CDATA[".plxUtils::cdataCheck($slideshow['navigation'])."]]></navigation>\n";
$xml .= "\t\t<links><![CDATA[".plxUtils::cdataCheck($slideshow['links'])."]]></links>\n";
$xml .= "\t\t<hoverPause><![CDATA[".plxUtils::cdataCheck($slideshow['hoverPause'])."]]></hoverPause>\n";
$xml .= "\t</slideshow>\n";
$xml .= "</document>";
# On écrit le fichier
$filename = $_SESSION['user'].'.'.$slideshow['slideshow_id'].'.'.$slideshow['name'].'.xml';
if(plxUtils::write($xml, PLX_ROOT.'plugins/plxcoinslider/slideshow/'.$filename)) {
return plxMsg::Info(L_SAVE_SUCCESSFUL);
} else {
return plxMsg::Error(L_SAVE_ERR.' '.PLX_ROOT.'plugins/plxcoinslider/slideshow/'.$filename);
}
}
}
}
?>
Dans le fichier admin.php contient toute la gestion et formulaire :
<?php
if(!defined('PLX_ROOT')) exit;
require_once('class.plxcoinslider.admin.php');
$AdminCoinslider = new AdminPlxCoinslider();
if(!empty($_GET['slideshow'])) {
$id = $_SESSION['user'].'.'.plxUtils::strCheck($_GET['slideshow']).'.xml';
if(!isset($AdminCoinslider->aSlideshow[ $id ])) {
plxMsg::Error('Pas de fichier');
header('Location: plugin.php?p=plxcoinslider');
exit;
}
}
if($_POST['btn_settings']) {
$AdminCoinslider->editSlideshow($_POST);
}
?>
<h2><?php echo $plxPlugin->getInfo('title') ?></h2>
<form action="plugin.php?p=plxcoinslider" method="post" id="form_slideshow">
<table class="table">
<thead>
<tr>
<th class="checkbox"><input type="checkbox" onclick="checkAll(this.form, 'idSlideShow[]')" /></th>
<th class="title"><?php echo L_CONFIG_USERS_ID ?></th>
<th><?php echo $plxPlugin->getLang('L_SLIDESHOW_NAME') ?></th>
<th><?php echo $plxPlugin->getLang('L_ACTION') ?></th>
</tr>
</thead>
<tbody>
<?php
# Initialisation de l'ordre
$num = 0;
$dir = opendir(PLX_PLUGINS.'plxcoinslider/slideshow/');
while($files = readdir($dir)) {
if($files != '..' && $files != '.' && $files != '/') {
$file = explode('.', $files);
echo '<tr class="line-'.$file[0].'">';
echo '<td><input type="checkbox" name="idSlideShow[]" value="'.$file[1].'" /><input type="hidden" name="idSlideShow[]" value="'.$file[1].'" /></td>';
echo '<td>'.$file[0].'</td>';
echo '<td>'.$file[2].'</td>';
echo '<td><a href="plugin.php?p=plxcoinslider&slideshow='.$file[1].'" title="Editer">Editer</a></td>';
echo '</tr>';
}
}
?>
</tbody>
</table>
</form>
<?php if(!empty($_GET['slideshow'])) { ?>
<form action="plugin.php?p=plxcoinslider" method="post">
<fieldset class="withlabel">
<?php
foreach($AdminCoinslider->aSlideshow as $k=>$v) {
$ordre = ++$num;
echo '<p>'.$plxPlugin->getLang('L_NAME').'</p>';
plxUtils::printInput('name', plxUtils::strCheck($v['name']), 'text', '15-50');
}
?>
</form>
<?php } ?>
L'écriture du fichier xml ne pose pas de problème mais c'est la lecture. Lorsque j'essaie de charger un fichier depuis admin.php j'ai le message suivant :
J'avoue être un peu larguer sur la partiePas de fichier
public $aSlideshow = array();
public function __construct() {
$this->getSlideshow(PLX_ROOT.$this->aSlideshow['slideshow_id']);
}
J'ai fouillé un peu de partout dans pluxml sans en comprendre le sens Si vous avez une idée ça serait sympa.
J'ai un string de l'array
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
2: dans le fichier admin.php, affiche le contenu de la variable $id et vérifie son contenu. n'oublie pas d'indiquer le chemin complet pour accèder au répertoire où tu stockes tes fichiers xml.
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
J'ai modifié $id le résultat donne : ../../plugins/plxcoinslider/slideshow/001.0001.xml ce qui correspond bien au chemin d'accès jusqu'au fichier xm mais j'ai toujours le message comme quoi il trouve pas le fichier. Et c'est le message qui vient plxMsq::Error car c'est un jquery.
J'ai un string de l'array
pour voir si tu as bien un index de tableau correspondant à la valeur de $id
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
J'ai un string de l'array
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
J'ai un string de l'array
Consultant PluXml
Ancien responsable du projet (2010 à 2018)
J'ai un string de l'array