J'ai quelques idées à envisager.
# 1
L'utilisation d'un moteur de modèle, comme Smarty, probablement en faire un peu plus facile à entretenir. Il serait au moins débarrasser du code XML de votre code PHP.
Par exemple, vous pouvez créer un modèle pour le XML extrait de code que vous avez posté:
<?xml version="1.0" encoding="UTF-8" ?>
{foreach from=$graphs item=graph}
<graph caption="{$graph.caption}" showNames="{$graph.show_names}" decimalPrecision="{$graph.decimal_precision}" bgcolor="{$graph.bg_color}">
{foreach from=$graph.set item=set}
<set name="{$set.name}" value="{$set.value}"/>
{/foreach}
</graph>
{/foreach}
et l'appeler à partir de PHP comme
<?php
$address = $_SERVER['PHP_SELF'];
$smart = new Smarty();
$graphs = array();
if ($address == 'webService.php/fcf/last5pricechanges/')
{
$graph_result = mysql_query("SELECT caption, show_names, decimal_precision, bg_color
FROM graph WHERE something='something else'");
while($graph_row = mysql_fetch_assoc($graph_result))
{
$graph_row;
$set_result = mysql_query("SELECT name, value FROM set WHERE graph_id = {$graph_row['id']}");
while($set_row = mysql_fetch_assoc($set_result))
{
$graph_row['sets'][] = $set_row;
}
$graphs[] = $graph_row;
}
}
$smarty->assign('graphs', $graphs);
$smarty->display('graph_template.tpl');
?>
# 2
Vous pouvez créer des objets à vous aider à gérer le code. Par exemple, pour générer la même sortie XML comme avant, vous pouvez faire:
<?php
class Graph
{
protected $caption;
protected $show_names;
protected $decimal_precision;
protected $bg_color;
protected $sets;
public function __construct($graph_id)
{
$graph_result = mysql_query("SELECT caption, show_names, decimal_precision_bg_color
FROM graph WHERE something='something else'");
while($graph_row = mysql_fetch_assoc($graph_result))
{
list($this->caption, $this->show_names, $this->decimal_precision, $this->bg_color) = $graph_result;
$set_result = mysql_query("SELECT name, value FROM set WHERE graph_id = {$graph_row['id']}");
while($set_row = mysql_fetch_assoc($set_result))
{
$this->sets[] = $set_row;
}
}
}
public function fetch_xml()
{
$output = '<?' . 'xml version="1.0" encoding="UTF-8" ?' . '>';
$output .= "<graph caption=\"{$this->caption}\" showNames=\"{$this->show_names}\" decimalPrecision=\"{$this->decimal_precision}\" bgcolor=\"{$this->bg_color}\">\n";
foreach($this->sets as $set)
{
$output .= "<set name=\"{$set->name}\" value=\"{$set->value}\"/>\n";
}
$output .= "</graph>";
return $output;
}
}
?>
Et appelez dans votre code principal comme:
<?php
$address = $_SERVER['PHP_SELF'];
if ($address == 'webService.php/fcf/last5pricechanges/')
{
$graph = new Graph(1);
echo $graph->fetch_xml();
}
?>
# 3
Vous pouvez essayer d'utiliser quelque chose comme SimpleXML, mais je doute que cela aiderait beaucoup à la maintenabilité, car il serait tout aussi verbeux que la méthode d'écho
Et # 4
... non, je suis tous dehors :-) Espérons que cela aide.
Merci pour la réponse. Smarty semble être la voie à suivre car je peux juste avoir des modèles pour chaque graphique rendant les choses beaucoup plus faciles à modifier. – CJD