PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bookmark-Navigation aus XML-File basteln?!


Rampage
2005-06-10, 20:59:14
Edit: Hab was hinbekommen, siehe unten!

Hi,

ich nutze sehr intensiv die "Synchronize Bookmarks" Extension des Firefox. Mit dieser Extension kann ich meine Bookmarks als XML-Datei auf einen FTP-Server hochladen und evtl. auch mittels dieser Extension wieder auf einem anderem Rechner herunterladen.

Ich würde allerdings gerne eine Web-Lösung programmieren. Nun habe ich mir überlegt, wie man die Bookmarks schön auf einer Webseite einbinden kann. Meiner Meinung nach wäre eine Layer Navigation die beste Möglichkeit.
Die Navigation müsste also erkennen, wo ein neuer Ordner anfäng und diesen als neues Navigationselement anlegen, bei Unterordner oder direkten Links natürlich das gleiche Spiel. So könnte eine Layernavigation aussehen:

http://www.pixelguy.de/ordner.gif

Eine andere Möglichkeit wäre es, die Bookmarks in ein Drop-Down Menü einzulesen. Allerdings stellt sich hier das Problem, dass man ab einer gewissen Anzahl von Unterordnern (eigentlich schon bei dem Ersten) den Überlick verliert. Man müsste die Drop-Down Elemente dann entsprechend formatieren. In etwa so:

http://www.pixelguy.de/dropdown.gif

Kann mir jemand bei dem Auslesen der XML-Datei helfen? Ich habe da leider keinerlei Erfahrung mit. Ich denke mal, dass man es mittels PHP recht gut lösen kann, oder?

Wäre auf jeden Fall für Hilfe aller Art dankbar. Ist vielleicht auch nicht nur für mich eine Interessante Sache ;)

Eine solche XML-Datei sieht übrigens wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xbel PUBLIC "+//IDN python.org//DTD XML Bookmark Exchange Language 1.0//EN//XML" "http://pyxml.sourceforge.net/topics/dtds/xbel-1.0.dtd">
<xbel>
<title>Lesezeichen</title>
<info>
<metadata owner="Mozilla" BookmarksToolbarFolder="NC:PersonalToolbarFolder"/>
</info>
<folder id="NC%3APersonalToolbarFolder">
<title>Lesezeichen-Symbolleiste</title>
<desc>Lesezeichen, die Sie in diesem Ordner ablegen werden in der Lesezeichen-Symbolleiste
angezeigt. </desc>
</folder>
<folder id="rdf%3A#$OGDQi2">
<title>Firefox</title>
<bookmark id="rdf%3A#$RGDQi2" href="http://www.mozilla.org/">
<title>mozilla.org</title>
</bookmark>
<separator/>
<bookmark id="rdf%3A#$QGDQi2" href="http://update.mozilla.org/extensions/">
<title>Extensions</title>
</bookmark>
<bookmark id="rdf%3A#$SGDQi2" href="http://update.mozilla.org/themes/">
<title>Themes</title>
</bookmark>
</folder>
<separator/>
<bookmark id="rdf%3A#$VRDQi2" href="http://www.manager-magazin.de/">
<title>Manager Magazin</title>
</bookmark>
<bookmark id="rdf%3A#$WRDQi2" href="http://www.spiegel.de/">
<title>Spiegel.de</title>
</bookmark>
</xbel>

Edit: Hab was hinbekommen, siehe unten!

Coda
2005-06-10, 21:29:35
http://de3.php.net/manual/de/ref.domxml.php

Rampage
2005-06-10, 21:32:10
http://de3.php.net/manual/de/ref.domxml.php
Autsch, ich habe mir schon gedacht, dass sowas kommt ;)
Leider habe ich bis auf ein paar wenige Grundlagen überhaupt keine Erfahrungen mit PHP. Trotzdem, ich werde es mir mal anschauen. Vielleicht schaffe ich ja was :|

Coda
2005-06-10, 21:33:38
Wenn du PHP 5 zur verfügung hast würde ich mir auch SimpleXML anschauen, das dürfte für den Zweck viel einfacher sein.

HellHorse
2005-06-10, 22:51:52
Ein andere Möglichkeit wäre XSLT. Daran scheiden sich allerdings die Geister.

Rampage
2005-06-11, 12:49:31
PHP 5 habe ich leider momentan noch nicht, muss ich wohl noch installieren. Ich habe mir mal das Manual durchgelesen. Leider verstehe ich teilweise nur Bahnhof ;(

Gibt es nicht irgendow Beispielscripts? Eigentlich müsste sich das ganze doch ähnlci verhalten wie ein Newsreeder oder?

Coda
2005-06-11, 19:10:00
Eigentlich ist es eine C ähnliche Scriptsprache ;)

Rampage
2005-06-12, 17:17:54
Eigentlich ist es eine C ähnliche Scriptsprache ;)
Kann mir keiner helfen? Ich hab es jetzt echt lange versucht, aber bekomme absolut nix auf die Reihe ;(

Coda
2005-06-13, 22:39:16
Naja du wirst wohl keinen finden der dir das ganze Ding programmiert. Du solltest vielleicht mal sagen was die Probleme sind.

Rampage
2005-06-13, 22:41:23
Naja du wirst wohl keinen finden der dir das ganze Ding programmiert. Du solltest vielleicht mal sagen was die Probleme sind.
Das verlange ich auch nicht. Mein Problem ist es, aus dem XML-File die Daten wie Titel, Ordner, URL, usw zu extrahieren... Wenn ich das habe, kann ich selber weitermachen.

Rampage
2005-07-08, 16:21:40
So, ich habe was hinbekommen. Mit Hilfe eines Scripts kann ich jetzt schonmal das XML-File auslesen und einigermaßen formatieren.

So sieht das PHP-File aus:
http://pixelguy.de/temp/test.php

So sollte es aber aussehen:
http://pixelguy.de/temp/test.html

Sprich mit den ausklappenden Menüs. Leider bekomme ich das in keiner Weise so hin :(

Das CSS sieht so aus:
<?
$file = "xbel.xml";
$xml_parser = xml_parser_create();

if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}

$data = fread($fp, filesize($file));
fclose($fp);
xml_parse_into_struct($xml_parser, $data, $vals, $index);
xml_parser_free($xml_parser);

$params = array();
$level = array();
foreach ($vals as $xml_elem) {
if ($xml_elem['type'] == 'open') {
if (array_key_exists('attributes',$xml_elem)) {
list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
} else {
$level[$xml_elem['level']] = $xml_elem['tag'];
}
}
if ($xml_elem['type'] == 'complete') {
$start_level = 1;
$php_stmt = '$params';
while($start_level < $xml_elem['level']) {
$php_stmt .= '[$level['.$start_level.']]';
$start_level++;
}
$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
eval($php_stmt);
}
}


?>

<ul id="nav">
<?

$test = $params['XBEL'];

$i = 0;
if (is_array ($test)) {
openArray($test);
}

function openArray ($array) {

$i++;
foreach ($array as $oneArray) {
if (is_array ($oneArray)) {
if ($i > 0) {
//echo "<ul>";
$i++;
}
openArray($oneArray);
} else { echo "<li><a href=\"#\">" . $oneArray . "</a></li>"; }

}
//echo "</ul>";
}

?>
</ul>

Dieses soll it der folgenden CSS-Datei und einer JS-Datei formatiert werden. Hier sind sie:
CSS (http://pixelguy.de/temp/style.css)
Java-Script (http://pixelguy.de/temp/drop_down.js)

Kann mir jemand einen Typ geben, wie ich es in die Form bringen kann??
Wäre euch sehr dankbar.

Rampage
2005-07-09, 15:49:20
kommt schon, jetzt hab ich es soweit gebracht. Hat keiner einen Tip?

HellHorse
2005-07-09, 22:03:15
Ja, XSLT nehmen.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output
method="xml"
indent="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

<xsl:template match="xbel">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>
<xsl:value-of select="title"/>
</title>
<script type="text/javascript" src="drop_down.js"/>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<ul id="nav">
<xsl:apply-templates/>
</ul>
</body>
</html>
</xsl:template>

<xsl:template match="folder">
<li>
<a>
<xsl:value-of select="title"/>
</a>
<xsl:if test="count(bookmark) > 0">
<ul>
<xsl:apply-templates select="bookmark"/>
</ul>
</xsl:if>
</li>
</xsl:template>

<xsl:template match="bookmark">
<li>
<a href="{@href}">
<xsl:value-of select="title"/>
</a>
</li>
</xsl:template>

<xsl:template match="text()" />
</xsl:stylesheet>

Nicht perfekt, aber du sollst ja auch was selber machen ;)

Rampage
2005-07-10, 18:52:03
Hmm, braucht man dafür PHP5??
Läuft bei mir nämlich nicht. Als welchen Dateityp muss man es speichern?

Danke aber schonmal für die Mühe ;)

Xmas
2005-07-10, 19:11:26
Hmm, braucht man dafür PHP5??
Läuft bei mir nämlich nicht. Als welchen Dateityp muss man es speichern?

Danke aber schonmal für die Mühe ;)
.xsl
http://www.w3schools.com/xsl/xsl_transformation.asp

Rampage
2005-07-10, 19:18:38
Danke, aber folgendes kommt dabei raus: http://www.pixelguy.de/temp/test2.xsl

Warum ist da nichts formatiert? So wie ich den Code verstehe, wird da doch eine Liste erstellt?!

Xmas
2005-07-10, 19:22:33
Lies mal in dem von mir verlinkten Tutorial den Absatz "Link the XSL Style Sheet to the XML Document". Das XSL(T) ist nur ein Stylesheet, ausgeben musst du immer noch die XML-Datei. Genauso wie du nix siehst, wenn du Statt HTML die CSS-Datei ausgibst.

Rampage
2005-07-10, 19:38:02
Ahh, ich habs endlich gerafft. Siehe hier: http://www.pixelguy.de/temp/test2.xml :)

Leider funktioniert das alles noch nicht mit mehreren Unterordnern, aber das bekomme ich auch noch hin, hoffe ich.

Danke schonmal ;)

HellHorse
2005-07-10, 20:19:01
Leider funktioniert das alles noch nicht mit mehreren Unterordnern, aber das bekomme ich auch noch hin, hoffe ich.
Probier mal
<xsl:apply-templates/>
statt
<xsl:apply-templates select="bookmark"/>

Rampage
2005-07-10, 20:38:34
Danke, so kommen alle Menüs, leider ist die Sache etwas komplizierter als ich gedacht habe. Denn jeder Ordner hat mehrere Unterordner, die sich jetzt sofort alle ausklappen und so völlig durcheinander geraten...

Allerdings sind das Sachen, die ich mit einer besseren Layer-Navigation in den Griff bekommen sollte.