Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Simplexml [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Simplexml


 
FrankH
13-11-2006, 10:44 
 
Hallo!

Ich habe bei mir eine Bildergallerie laufen, deren Pics per XML-Datei geladen werden. Die XML Datei ist wie folgt aufgebaut:

<?xml version="1.0" encoding="UTF-8"?>
<menu>
<gallery name="Familien">
<image source="bilder/familien/1.jpg" thumb="bilder/familien/1t.jpg" title="Bild 1"/>
<image source="bilder/familien/2.jpg" thumb="bilder/familien/2t.jpg" title="Bild 2"/>
<image source="bilder/familien/3.jpg" thumb="bilder/familien/3t.jpg" title="Bild 3"/>
</gallery>
<gallery name="Kinder">
<image source="bilder/kinder/1.jpg" thumb="bilder/kinder/1t.jpg" title="Bild 1"/>
<image source="bilder/kinder/2.jpg" thumb="bilder/kinder/2t.jpg" title="Bild 2"/>
<image source="bilder/kinder/3.jpg" thumb="bilder/kinder/3t.jpg" title="Bild 3"/>
</gallery>
usw...
</menu>

Die Galerie läuft ohne Probleme. Jetzt bin ich dabei ein kleines Tool zu basteln, welches erlaubt die XML-Datei online per Browser zu bearbeiten. Dazu verwende ich SimpleXml:

<?php
$file = "gallery.xml";
$savefile = "gallery.xml";
$xml = simplexml_load_file($file);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>XML-Editor</title>
</head>

<body>
<?php
if (empty($_POST)) {
?>
<form action="<? echo $_SERVER['PHP_SELF']?>" method="post">
<?php
foreach ($xml->gallery->image as $node) {
$i++;
$name = $node["source"];
$thumb = $node["thumb"];
$title = $node["title"];
//
echo "<input name=\"name_$i\" type=\"text\" value=\"$name\" /> \n";
echo "<input name=\"thumb_$i\" type=\"text\" value=\"$tumb\" /> \n";
echo "<input name=\"title_$i\" type=\"text\" value=\"$title\" /><br />\n<br />\n";
}
?>
<input type="submit" name="Submit" value="Speichern" />
</form>
</body>
</html>
<?php
} else {
foreach ($_POST as $key => $value) {
if($key != "Submit") {
$para = explode("_", $key);
$nr = $para[1];
$name = $para[0];
$xml->gallery[$nr-1]->image[$name] = $value;
$xml->asXML($savefile);
}
}
echo "Datei unter <strong> $savefile </strong> gespeichert!\n";
echo "</body>\n";
echo "</html>";
}
?>

Jetzt zu meinem Problem... Wenn ich nun das Script im Browser aufrufe werden mir lediglich die ersten drei Zeilen aus der Gallery "Familien" zum Bearbeiten angezeigt. Wie bekomme ich es nun hin, dass das Script dynamisch die weiteren Gallerien in der Datei ausgibt?

Bin seit heute früh im Netz unterwegs und konnte bisher leider keine Antwort finden. :( Vielleicht kann mir jemand hier einen Lösungsansatz nennen?

Gruß, Frank

 
FrankH
13-11-2006, 10:59 
 
Hab es gerade mit Xpath lösen können:

foreach ($xml->xpath('//image') as $node) {

Leider habe ich jetzt das Problem, wenn ich auf Speichern gehe erscheint folgende Meldung: Fatal error: Objects used as arrays in post/pre increment/decrement must return values by reference in /homepages/23/d160806763/htdocs/datalesen.php5 on line 44

Das betrifft diese Zeile: $xml->gallery[$nr-1]->image[$name] = $value;

Vielleicht hat jemand eine Idee?


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:59 Uhr.