Суть вопроса вот в чем ....возможно ли задавать список параметров для списка в фале xml динамически , путем считываения из базы.
а можно немного попоробнее....я просто с парсерами не сталкивался никогда. Это надо будет когда в самом xml писать или как?
xml-file это что то на подобе БД, только текстовая ))) Парсеры помогают удобно работать с хмл-файлом, от вас требуется только указывать имена узлов и их атрибутов, если такие имеются. Вот тут все написано, для 1.5 тоже подойдет.
я вот только одного не пойму это мне каждый раз надо пересоздавать файл install.xml ? или просто отдельный файл какой-то?
Код (PHP): <?xml version="1.0" encoding="utf-8"?> <metadata> <layout title="Страница специальности"> <message> <![CDATA[Стандартная страница специальности]]> </message> </layout> <state> <name>Сраница специальности</name> <description>Стандартная страница специальности</description> <params> <param name="spec" type="list" default="0" label="Тип списка" description="Выбор специальности"> <option value="1">1</option> ....... тут должен быть список, который хранится в базе данных <option value="n">n</option> </param> </params> </state> </metadata> Суть в том чтобы мы имели возможность создать пункт меню для каждой специальности отдельно. Для этого когда мы создаем новый пукнт меню и выбираем этот шаблон для вывода , мы должны иметь возможность выбрать конкретную специальность, а учитывая что число специальностей может менятся со временем, то список должен формироваться динамически.
deadheart, а зачем? этот файл нужен только при установке компонента, и каждый раз его пересоздавать нет надобности. если хмл нужен вообще, то вкратце могу описать схему: указываешь с каким файлом хмл скрипту нужно работать (заранее создашь пустой файл с нужным именем(права соответсвенно на него): Код (PHP): <?php $File = "filename.xml"; $Handle = fopen($File, 'w'); $Data = "<?xml version='1.0' encoding='windows-1251?>\n"; fwrite($Handle, $Data); запрос в таблицу бд, выбор значений по условию Код (PHP): $sql = "SELECT * FROM table WHERE что-то_такое='yes' AND что-то_такое еще = 'сколько-то_или_чего-нибудь' ORDER BY _как_сортировать_ LIMIT _нужное_кол-во_строк"; открываешь цикл while Код (PHP): $result = mysql_query($sql); while($row = mysql_fetch_assoc($result)) { $id = $row['name']; записываешь Код (PHP): $Data = "<name='".$name."'>\n"; fwrite($Handle, $Data); } fwrite($Handle, $Data); fclose($Handle); ?> там, где $id = $row['name'] - туда добавляешь все данные, какие тебе нужно получить из бд и записать в файл. $id = $row['id']; $date =$row['date']; $name =$row['name']; и тд. соответственно, и в хмл нужно это все записать тоже $Data = "<date='".$date."'>\n";\ $Data = "<ID='".$id."'>\n";\ в общем, нужный тебе хмл сделать по аналогии не составит труда, думаю здесь все предельно понятно
agruts, эммм.... зачем учите неправильно ? ))) Код (CODE): $File = "filename.xml"; $Handle = fopen($File, 'w'); для создания деревьев в хмл? для чего использовать велосипед если можно воспользоваться готовыми классами аля DomIt? deadheart, хмл-файл, который Вам необходим для динамического меню, должен лежать в корне компонента или в его подкатегориях. Собственно его и нужно править )
ну если это Ваш собственный компонент - то там как хотите, в если вы про com_menus - то там все исключительно на хмл+мускул.
omfgpanda, если ему нужно подправить один раз, то это одно. Но вопрос состоит в динамическом создании XML: Я привел вполне рабочий пример. И даже для создания деревьев его можно приспособить
Код (PHP): <?php $sql = "SELECT * FROM table.... WHERE ..."; //построить правильный запрос в бд исходя из того, какие данные нужно получить $characters_to_remove = array('&', '\'', '"', '>', '<'); $replace_with = array('&', ''', '"', '>', '<'); $title = str_replace($characters_to_remove, $replace_with, $row['title']); $message = strip_tags($row['message']); $description = str_replace($characters_to_remove, $replace_with, $description); $name = $row['name']; $paramname = $row['paramname']; $option = $row['option']; $File = "filename.xml"; $Handle = fopen($File, 'w'); $Data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" ."<metadata>\n" ."<layout title=\"Страница специальности\">\n"; . "<message>". $message ."</message>\n" . "</layout>\n" . "<state>\n" . "<name>'" .$name."'</name>\n" . "<description>'" .$description. "'</description>\n" . "<params>\n"; fwrite($Handle, $Data); $Data = "<param name='". $paramname . "'type=\"list\" default=\"0\" label=\"Тип списка\" description='".$description."'>\n"; $result = mysql_query($sql); while($row = mysql_fetch_assoc($result)) { $Data = "<option value='". $option . "'>" .$option."</option>"; fwrite($Handle, $Data); } $Data = "</param>\n" . "</params>\n" . "</state>\n" . "</metadata>"; fwrite($Handle, $Data); fclose($Handle); ?> цикл показан для одного параметра (<param>), т.е. если параметров несколько, то их тоже надо в цикл, но так, чтобы цикл для построения <option> оказался вложенным. сохранить в отдельный файл, а вызывать путем include_once в в том файле, при обращению к которому должен создаваться XML