Brådisfråga om xml och php

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2005-03-02 21:33

Har en fråga om xml och php som jag måste försöka lösa, helst idag. Gör ett försök att förklara..

Det gäller en php-sida med en flashmeny (lite trädmenyaktig) som läser sitt innehåll från en xml-fil och jag måste nu helt enkelt göra motsvarande meny fast html-fil för de som inte har flash. Xml-filen skall delas mellan flashobjektet och html-filen.

Sidorna menyn ska ligga på är php-sidor och i dem måste xml-filen läsas in för att användas av antingen flashmenyn eller html-menyn.

XML-filen ser lite märklig ut, den har inga värden för meny och submeny, flash kollar istället nivåerna i menyn. Men som sagt, för de som inte har flash installeras ska den visa ren html istället.

(Flashlösningen är klar)

Tusen tack till den som har tips var jag ska kolla. Det här kanske är hur enkelt som helst, har dock dålig koll på xml och php.

<?xml version="1.0"?>
<menu>
<item txt="MENYRUBRIK" link="myhtml_0.html">
<item txt="UNDERNAVIGATION" link="myhtml_1.html"/>
<item txt="UNDERNAVIGATION" link="myhtml_2.html"/>
<item txt="UNDERNAVIGATION" link="myhtml_3.html"/>
</item>
<item txt=" MENYRUBRIK" link="myhtml.html">
<item txt="UNDERNAVIGATION" link="myhtml_4.html"/>
<item txt="UNDERNAVIGATION" link="myhtml_5.html"/>
<item txt="UNDERNAVIGATION" link="myhtml_6.html"/>
</item>
<item txt=" MENYRUBRIK" link="myhtml_7.html">
<item txt="UNDERNAVIGATION" link="myhtml_8.html"/>
<item txt="UNDERNAVIGATION" link="myhtml_9.html"/>
</menu>

  • Medlem
  • Sollefteå
  • 2005-03-03 00:00

Här är något som du kan bygga utifrån. Det är helt enkelt lite omhackad kod från php.net, men den kräver att du lägger till ett </item> i sista gruppen, annars är datat obalanserat och man får ett error. Med lite tur så dör inte flash-menyn av den modden.

<?php
$depth = array();

function startElement($parser, $name, $attrs) {
   global $depth;
   
   if ($name == "ITEM") {
     for ($i = 1; $i < $depth[$parser]; $i++) {
       echo "  ";
     }
     echo "<a href=\"".$attrs['LINK']."\">".$attrs['TXT']."</a><br>\n";
   }
   $depth[$parser]++;
}


function endElement($parser, $name) {
   global $depth;
   $depth[$parser]--;
}


$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");

if (!xml_parse($xml_parser, file_get_contents('menu.xml'))) {
  die(sprintf("XML error: %s at line %d", 
      xml_error_string(xml_get_error_code($xml_parser)), 
      xml_get_current_line_number($xml_parser)));
}
xml_parser_free($xml_parser);
?>  

<?xml version="1.0"?>
<menu>
<item txt="Huvud-A" link="myhtml_0.html">
<item txt="Sub-A1" link="myhtml_1.html"/>
<item txt="Sub-A2" link="myhtml_2.html"/>
<item txt="Sub-A3" link="myhtml_3.html"/>
</item>
<item txt="Huvud-B" link="myhtml.html">
<item txt="Sub-B1" link="myhtml_4.html"/>
<item txt="Sub-B2" link="myhtml_5.html"/>
<item txt="Sub-B3" link="myhtml_6.html"/> 
</item>
<item txt="Huvud-C" link="myhtml_7.html">
<item txt="Sub-C1" link="myhtml_8.html"/>
<item txt="Sub-C2" link="myhtml_9.html"/>
</item>
</menu>
  • Oregistrerad
  • 2005-03-03 00:15

Tack!! Började ge upp för idag men ska prova. När du säger 'bygga utifrån', är det något jag bör tänka på? Är som sagt helt ovetandes i just detta ämne..

  • Medlem
  • Sollefteå
  • 2005-03-03 00:21
Ursprungligen av rodin:

Tack!! Började ge upp för idag men ska prova. När du säger 'bygga utifrån', är det något jag bör tänka på? Är som sagt helt ovetandes i just detta ämne..

Mjä.... så mycket är det nog inte att tänka på.

Byta ut filnamnet från "menu.xml" till en variabel kanske (eller bara rätt filnamn om det alltid är samma xml-fil som ska användas.

Sen beror det ju lite på hur funky du vill att menyn ska vara. Som det är nu så blir det en enkelt lista med A-taggar och två st   som indragningar. Du kanske behöver en <li>-lista eller så för att det ska fungera snyggt i layouten, och då så får du ändra koden som genererar html'en.

for ($i = 1; $i < $depth[$parser]; $i++) { 
       echo "  "; 
} 
echo "<a href=\"".$attrs['LINK']."\">".$attrs['TXT']."</a><br>\n"; 

I övrigt så fungerar det ju typ.

  • Oregistrerad
  • 2005-03-03 00:56

Grymt bra! Ska prova imorgon. Dum fråga kanske, men flashmenyn använder ju samma xml-fil, kommer detta inte ställa till något för de som använder flashmenyn istället? Eller menar du att man lägger detta script i koden som bara berör dem som inte har flashplugin?

  • Medlem
  • Sollefteå
  • 2005-03-03 07:38

Ja, det är ju grundtanken - att det här scriptet bara körs för användare som inte använder flash-navigerinngen. Så det ska inte påverka.

Det som skulle kunna påverka är att du måste fixa xml'en genom att lägga till ett </item> på näst sista raden.

Jag skulle nog börja med att prova att göra det och se om flash-menyn mår illa av det, men det verkar osannorlikt att det skulle göra det.

Varifrån kommer xml-filerna? Är det något annat program som skapar dom automatiskt eller görs dom manuellt för hand?

  • Oregistrerad
  • 2005-03-03 08:28

De görs manuellt för hand så det är inte superdynamiskt. Dock kommer det ju gå snabbt att uppdatera och bygga ut menyn genom att bara ändra xml-filen. Det kommer att finnas ett par olika xml-filer då menyn inte ser exakt likadan ut på alla sidor.

  • Oregistrerad
  • 2005-03-03 12:58

Frågan är hur jag lättast ger rubriklänkarna och underrubrikerna varsin css-klass i länken, eller tilldelar dem stil på annat sätt, t ex class="linkleftmenured". Just nu delar ju länkar i rubrik och underubrik "link" i php-scriptet. Hum...

Senast redigerat 2005-03-03 15:58
1
Bevaka tråden