[mysql xml] Tree menu

Pagina: 1
Acties:

  • koekoek
  • Registratie: Mei 2000
  • Laatst online: 28-06 17:00
Ik ga als stage opdracht een webapplicatie maken in php. Deze app moet onder andere bestaan uit een tree met verschillende categorieën, onder deze categorieën hangen dan linkjes naar bestanden (denk aan Explorer uit Windows). Ik heb het idee dat het handigst is om deze tree een xml bestand te laten zijn en die opmaak te geven met een xsl stylesheet.
Voorbeelden van wat de bedoeling is kan je vinden op http://www.15seconds.com/issue/020424.htm of op http://www.planet-source-...p?txtCodeId=8453&lngWId=4

De xml file kan soms veranderen omdat de beheerder van de site nodes moet kunnen toevoegen,verwijderen en wijzigen. Dus de xml kan niet statisch zijn.

De hele applicatie haalt zijn data uit een mySQL database en een wens van mijn opdrachtgever is dan ook om ook de tree op te slaan in de database. Ik heb inmiddels uitgevonden dat een tree opslaan in een relationele database het best gaat via het nested-set model.

Ik zie dus momenteel nog geen problemen in het opslaan of de weergave van de tree.

Waar ik nu al de hele dag mee bezig ben is een idee te krijgen van hoe ik het moet aanpakken om van de data in de database te komen tot een xml bestand.

Ga ik dit doen met het mysqldump –xml commando of moet ik zelf de recordset in een array gooien en de boel echo-en ?

Ik heb dan een xml bestand op de server staan en dan ? Moet ik dus bij elke view van de site dat bestand laten overschrijven of maak ik het zo dat er alleen een nieuw xml bestand gegenereerd wordt als er iets veranderd in de database? Kan je niet xml alleen in het geheugen van de server laten bestaan en via een server side stylesheet de boel naar een browser sturen ? (en dus live wijzigingen aanbrengen in de xml via DOM bijv) en dan weer updaten in mysql 8)7

Ik heb echt alle threads die ik kon vinden over tree’s en xml doorgelezen op GOT en veelvuldig Google aangeslingerd maar ben er alleen maar meer van in de war geraakt :)

Ik ga maar snel het boek XML en PHP van Vikram Vaswani bestellen misschien wordt het dan nog wat.

Kortom ik heb een zetje in de goede richting nodig. Iemand ??

Verwijderd

Wat wil je nu? Xml of een mysql database.
Het lijkt mij nogal onlogisch om een xml te laten genereren van je database en die dan in je tree te gebruiken...
Of laad je slechts een gedeelte uit je database in xml?

anders hier is een mooi menuutje: php+xml
http://www.phphelper.net/

Voor de xml opbouw (denkende aan het feit dat je die mss uit een database zult laten genereren) zou ik hetvolgende gebruiken
<menu>
<item>
<id>1</id>
<parent>0</parent> -> 0 is de root node dus dit is een toplevel menuitem
<content>...</content>
</item>
<item>
<id>2</id>
<parent>1</parent>
<content>blabla</content>
<url>http://tweakers.net</url>
...
</item>
...
</menu>
Op deze manier kan je eindeloos veel menu's maken zonder dat de volgorde belangrijk is (denk aan een database waar de records willekeurig staan)
Alles is een item.
Ik kan dus een item aan een item hangen
of een item aan een item
en als je item x waar item y aanhangt als parent item z geeft dan krijg je: item z <- item x <- item y dus alles kan erven van zijn parent...
Gewoon mijn mening :)

  • koekoek
  • Registratie: Mei 2000
  • Laatst online: 28-06 17:00
ik wil inderdaad mysql en xml , alleen voor het menu heb ik xml nodig terwijl er nog veel meer in de database komt

voor de opslag van de tree in de database ga ik het neested set model gebruiken
zie http://gathering.tweakers...message/11688233#11688233

Maar wat ik eigenlijk wil weten, is hoe ik nou de data in de database omzet naar xml. En of het verstandig is om met een xml bestand op de server te werken die ik alleen update bij veranderingen.

Dat menuutje op phphelper werkt nog steeds met html en tables ik dacht dit op te lossen met xml en xsl stylesheet

Thanx voor het mee denken

  • koekoek
  • Registratie: Mei 2000
  • Laatst online: 28-06 17:00
Ter verduidelijking hoe krijg ik het met php voor elkaar om te gaan van:

mysql database :
Afbeeldingslocatie: http://www.intelligententerprise.com/001020/gifs/Celko.10.19.Table2s1.gif
Afbeeldingslocatie: http://www.intelligententerprise.com/001020/gifs/Celko.10.19.Fig1s.gif

naar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0"?>
<personnel>
    <name>Albert</name>
        <employees>
            <name>Bert</name>
            <name>Chuck</name>
                <employees>
                    <name>Donna</name>
                    <name>Eddie</name>
                    <name>Fred</name>
                </employees>
        </employees>
</personnel>


????

Grote kans dat dit xml voorbeeld niet goed is maar ook daar moet ik nog veel over lezen :)

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Tipje: zoek eens op recursieve functies. Op www.codebase.nl staan hier genoeg example scriptjes voor :)


dit kan je wel omslopen :)

[ Voor 84% gewijzigd door SchizoDuckie op 26-08-2003 19:18 ]

Stop uploading passwords to Github!


  • koekoek
  • Registratie: Mei 2000
  • Laatst online: 28-06 17:00
Dus de hele tabel uit de database met 1 query in een array gooien en dan met een recursieve functie echo-en ? poe dat wordt moeilijk , maar ik ga het proberen

Helaas kan ik nog steeds geen pseudo code of andere aanwijzingen op het net vinden.

Ik ga aan de gang :)

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025

SchizoDuckie

Kwaak

Ik kom zojuist een mooi stukje van mn eigen code tegen die precies doet wat jij nodig hebt :)

Aanschouw ende leer

http://razorblade.kicks-ass.net/menuxml.phps

Stop uploading passwords to Github!


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
koekoek schreef op 27 August 2003 @ 11:11:
Dus de hele tabel uit de database met 1 query in een array gooien en dan met een recursieve functie echo-en ? poe dat wordt moeilijk , maar ik ga het proberen

Helaas kan ik nog steeds geen pseudo code of andere aanwijzingen op het net vinden.

Ik ga aan de gang :)
Ik zou ff een inschatting proberen te maken van de te verwachten grootte van de tree. Als ie echt heel groot word, zou ik niet de hele tree uit de db fietsen, maar slechts de nodes en children in het geselecteerde pad. Dat is, als je van plan bent de tree bij elke navigatie stap opnieuw te refreshen.

Ben je dat niet van plan (hetgeen mij overigens niet verstandig lijkt voor een stage-opdracht, waar wel meer is te leren dan trees bouwen) en wil je dus een non-refreshing tree waarvan je ook nog eens deelverzamelingen van kunt updaten middels Javascript, dan ben je gewoon euhm.. 'ver van huis' en kun je misschien beter je tijd steken in het implementeren van bestaande oplossingen op dit gebied.

Voor het transformeren van xml naar html hoef je overigens geen permanente xml file op de server bij te houden. Je kunt PHP gewoon direct XML laten uitkotsen, en dat client- dan wel serverside transformeren.

Ik heb zelf ook wel eens zo'n mysql->xml->htmltree gebouwd, maar heb uiteindelijk de hele xml tussenlaag eruit gesloopt. Scheelde een hoop tijd, ergernis, en het was een stuk sneller. Je moet wel een goede reden hebben om xml als tussenlaag te gebruiken, bv: je hebt nog geen template-systeem en wilt daarvoor xml/xslt in gaan zetten, je bent van plan andersoortige database-backends in te zetten en gebruikt xml zodoende als abstractielaag, of je hebt rekening te houden met derden (softwaremakers) of andere applicaties die met jou applicatie willen communiceren op een standaard-manier.

-- edit --

als je opdracht precies zo is als je omschrijft (tree met bestanden als "blaadjes"), waarom wil je dan een MySQL database gebruiken? lijkt me veel eenvoudiger om de tree dan simpelweg exact na te bouwen in het bestandssysteem op de server en een eenvoudig scriptje te schrijven dat daar een xml bestand van maakt.

[ Voor 9% gewijzigd door Genoil op 28-08-2003 10:12 ]


  • koekoek
  • Registratie: Mei 2000
  • Laatst online: 28-06 17:00
Genoil schreef op 28 August 2003 @ 10:05:
[...]
Ik zou ff een inschatting proberen te maken van de te verwachten grootte van de tree. Als ie echt heel groot word, zou ik niet de hele tree uit de db fietsen, maar slechts de nodes en children in het geselecteerde pad. Dat is, als je van plan bent de tree bij elke navigatie stap opnieuw te refreshen.
[/qoute]
De tree zal zeker niet gigantisch zijn, ik schat zo'n 5 top nodes met onder elk van deze nodes 5 kinderen met daaronder maximaal 7 linkjes.


[qoute]
Voor het transformeren van xml naar html hoef je overigens geen permanente xml file op de server bij te houden. Je kunt PHP gewoon direct XML laten uitkotsen, en dat client- dan wel serverside transformeren.
[/qoute]

Kijk daar was ik nou zo benieuwd naar, gebeurt dit met XMLDOM?

[qoute]
Ik heb zelf ook wel eens zo'n mysql->xml->htmltree gebouwd, maar heb uiteindelijk de hele xml tussenlaag eruit gesloopt. Scheelde een hoop tijd, ergernis, en het was een stuk sneller. Je moet wel een goede reden hebben om xml als tussenlaag te gebruiken, bv: je hebt nog geen template-systeem en wilt daarvoor xml/xslt in gaan zetten, je bent van plan andersoortige database-backends in te zetten en gebruikt xml zodoende als abstractielaag, of je hebt rekening te houden met derden (softwaremakers) of andere applicaties die met jou applicatie willen communiceren op een standaard-manier.
[/qoute]

Ik heb inderdaad geen template systeem en het leek me zinnig hier XSLT en XML voor te gebruiken omdat XML al een tree van zich zelfs. Ik zie dat in heel veel toepassingen XML gebruikt wordt dus ik wil me daar in gaan verdiepen.

[qoute]
als je opdracht precies zo is als je omschrijft (tree met bestanden als "blaadjes"), waarom wil je dan een MySQL database gebruiken? lijkt me veel eenvoudiger om de tree dan simpelweg exact na te bouwen in het bestandssysteem op de server en een eenvoudig scriptje te schrijven dat daar een xml bestand van maakt.
Ja inderdaad dat is inderdaad een betere manier , ook zou ik graag met een native xml-database aan de gang willen maar dat wil mijn opdrachtgever niet. Daarbij komt dat er veel meer dingen in het systeempje komen die al met MySQL werken.

Genoil bedankt voor je opmerkingen en ideeen, Papa Eend zeer bedankt voor je code voorbeeld ik ga hem nu bekijken

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Ik gebruik zelf ook een stukje XML in mijn site dat gegenereerd wordt door een PHP pagina met een MySQL database.

De eerste regel is heel belangrijk, anders wordt je XML niet geparsed door MSXML4.

PHP:
1
2
3
4
5
6
7
<?php
 header ("Content-type: text/xml");
 echo '<?xml version="1.0" encoding="UTF-8"?>';
 echo '<!DOCTYPE tree SYSTEM "dtd/xloadtree.dtd"><tree>';
/* echo je tree hier */
 echo '</tree>';
?>


Tip: Kijk ook eens naar de XLoadTree van WebFX.

[ Voor 26% gewijzigd door Skaah op 29-08-2003 19:31 ]


Verwijderd

Skaah schreef op 29 August 2003 @ 19:29:
Tip: Kijk ook eens naar de XLoadTree van WebFX.
Tip: Gebruik deze niet voor serieuze zaken, hij is zo instabiel als wat en boordevol issues.

[ Voor 4% gewijzigd door Verwijderd op 29-08-2003 21:56 ]

Pagina: 1