SimpleXML Kategorisierung + Blätterfunktion?

monoblock

Mitglied
Hallo!

Ich baue grade einen Art Produktgalerie auf XML-Basis, und will, dass der Kunde als erstes eine Auflistung aller Produkte bekommt (was bereits klappt) und dann die Möglichkeit hat ein Produkt anzuklicken und weitere Informationen zu erhalten.

Mein Problem ist nun folgendes, die XML Datei die ich verwende ist mir vorgegeben worden und ich kann sie nicht ändern, um sie leichter nutzbar zu machen...

Die Datei sieht wie folgt aus:
Code:
<?xml version="1.0" encoding="utf-8"?>
<root>
	<collection1>   
		<pants>
		  	<model>
				<head><![CDATA[ABC]]></head> 
				<item>
					<pic><![CDATA[test.jpg]]></pic>
					<txt><![CDATA[1212]]></txt>
					<txt><![CDATA[1234]]></txt>
					<txt><![CDATA[1234]]></txt>  
					<txt><![CDATA[1234]]></txt> 
				</item>
				<item>
					/* Struktur gleich wie beim ersten "item" */
				</item>
			</model>
			<model>
				/* Struktur gleich wie beim ersten "model" */
			</model>
		</pants>
		<tops>
			/* Struktur gleich wie bei "pants" */
		</tops>
	</collection1>
	<collection2>
		/* Struktur gleich wie bei "collection1" */
	</collection2>
</root>

Mein Listingscript sieht wie folgt aus:
PHP:
<?php 
                $src = explode("/", $_GET['p']);
		$config = explode(",", $_GET['c']);
		$data = simplexml_load_file($src[0].'_'.$src[1].'.xml');
		$path = $_GET['p']."/model";

		foreach ($data->xpath($path) as $model) {
			echo "<li><h2>".$model->head."</h2></li>";
			foreach ($model->item as $item) {
				echo "<li><img src=\"img/".$_GET['p']."/thumbs/".$item->pic."\" /></li>";
				echo "<li>article: ".$item->txt[0]."</li>"; /* Artikelnummer */
				echo "<li>style: ".$item->txt[1]."</li>";
				echo "<li>fit: ".$item->txt[2]."</li>";
				echo "<li>mat: ".$item->txt[3]."</li>";
				echo "<li class=\"last\"><a href=\"detail.php5?c=".$_GET['p']."/".$model->head."/".$item->txt[0]."\">more infos</a></li>";
			}
		}
?>

Als Parameter verlangt das Listing script nur "p", also den Path (zB. index.php?p=collection1/pants), das Detailscript kriegt im Moment folgende Parameter: detail.php?c=collection1/pants/ABC(<head> des Modelbereiches)/*Artikelnummer*

Wenn der User nun auf "more infos" klickt soll er/sie auf eine Detailseite kommen und eine Großansicht des Bildes sehen, sowie die Möglichkeit haben zum nächsten Artikel (innerhalb einer Model-Gruppe) zu blättern.

Nun lauten meine Fragen:

1.) Wie kann ich ein item-Parentelement finden, was ein txt-Childelement mit einer bestimmten Artikelnummer hat?

2.) Wie kann ich eine Blätterfunktion erstellen, die sich innerhalb eines bestimmten Modellbereiches bleibt? Und merkt, wenn sie beim letzten Elements des Modellbereichs angekommen ist?

Danke schon einmal für die Hilfe :)
 
Hallo

Ich habe leider noch nie mit den XML Funktionen gearbeitet, deshalb weiß ich auch keine Lösung direkt mit diesen Funktionen.
Ich persönlich würde 1.) mit einem preg_match machen:

PHP:
preg_match("/\<elternelementname id\=\"(\d*)\"\>.*?\<kind id\=\"2\"\>.*?\<\/elternelementname\>

Aber wahrscheinlich wird dies mit den XML Funktionen auch irgendwie gehen.

Zu 2.)
Wenn du das Elternelement hast, kannst du die Kinder auslesen und dann ist es ja kein Problem mehr zu sehen, ob man beim letzten Kindelement angekommen ist oder nicht ;)

Grüße Simon
 
Zurück