Динамический список в xml

Тема в разделе "Программирование", создана пользователем deadheart, 16.11.2009.

  1. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    Суть вопроса вот в чем ....возможно ли задавать список параметров для списка в фале xml динамически , путем считываения из базы.
     
  2.  
  3. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    конечно ) используете хмл-парсеры, например domlite , он по-моему встроен в джумлу.
     
  4. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    а можно немного попоробнее....я просто с парсерами не сталкивался никогда. Это надо будет когда в самом xml писать или как?
     
  5. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    xml-file это что то на подобе БД, только текстовая ))) Парсеры помогают удобно работать с хмл-файлом, от вас требуется только указывать имена узлов и их атрибутов, если такие имеются. Вот тут все написано, для 1.5 тоже подойдет.
     
  6. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    я вот только одного не пойму это мне каждый раз надо пересоздавать файл install.xml ? или просто отдельный файл какой-то?
     
  7. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    а чего вы конкретно хотите добиться ?
     
  8. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    Код (PHP):
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <metadata>
    3.     <layout title="Страница специальности">
    4.         <message>
    5.             <![CDATA[Стандартная страница специальности]]>
    6.         </message>
    7.     </layout>
    8.     <state>
    9.         <name>Сраница специальности</name>
    10.         <description>Стандартная страница специальности</description>
    11.  
    12.     <params>
    13.  
    14.         <param name="spec" type="list" default="0" label="Тип списка" description="Выбор специальности">
    15.           <option value="1">1</option>
    16.                       ....... тут должен быть список, который хранится в базе данных
    17.           <option value="n">n</option>
    18.         </param>
    19.     </params>
    20.     </state>
    21. </metadata>


    Суть в том чтобы мы имели возможность создать пункт меню для каждой специальности отдельно. Для этого когда мы создаем новый пукнт меню и выбираем этот шаблон для вывода , мы должны иметь возможность выбрать конкретную специальность, а учитывая что число специальностей может менятся со временем, то список должен формироваться динамически.
     
  9. agruts
    Offline

    agruts Russian Joomla! Team

    Регистрация:
    01.03.2006
    Сообщения:
    612
    Симпатии:
    21
    Пол:
    Мужской
    deadheart, а зачем?
    этот файл нужен только при установке компонента, и каждый раз его пересоздавать нет надобности.

    если хмл нужен вообще, то вкратце могу описать схему:

    указываешь с каким файлом хмл скрипту нужно работать (заранее создашь пустой файл с нужным именем(права соответсвенно на него):
    Код (PHP):
    1. <?php
    2. $File = "filename.xml";
    3. $Handle = fopen($File, 'w');
    4. $Data = "<?xml version='1.0' encoding='windows-1251?>\n";
    5. fwrite($Handle, $Data);


    запрос в таблицу бд, выбор значений по условию
    Код (PHP):
    1. $sql = "SELECT * FROM table WHERE что-то_такое='yes' AND что-то_такое еще = 'сколько-то_или_чего-нибудь'
    2. ORDER BY _как_сортировать_ LIMIT _нужное_кол-во_строк";


    открываешь цикл while
    Код (PHP):
    1. $result = mysql_query($sql);
    2. while($row = mysql_fetch_assoc($result))
    3.  
    4. {
    5. $id          = $row['name'];


    записываешь
    Код (PHP):
    1. $Data = "<name='".$name."'>\n";
    2. fwrite($Handle, $Data);
    3.  
    4.  }
    5. fwrite($Handle, $Data);
    6. fclose($Handle);
    7.  
    8. ?>


    там, где $id = $row['name'] - туда добавляешь все данные, какие тебе нужно получить из бд и записать в файл.

    $id = $row['id'];
    $date =$row['date'];
    $name =$row['name'];
    и тд.
    соответственно, и в хмл нужно это все записать тоже
    $Data = "<date='".$date."'>\n";\
    $Data = "<ID='".$id."'>\n";\

    в общем, нужный тебе хмл сделать по аналогии не составит труда, думаю здесь все предельно понятно
     
    deadheart нравится это.
  10. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    agruts, эммм.... зачем учите неправильно ? )))
    Код (CODE):
    1. $File = "filename.xml";
    2. $Handle = fopen($File, 'w');

    для создания деревьев в хмл? для чего использовать велосипед если можно воспользоваться готовыми классами аля DomIt?


    deadheart, хмл-файл, который Вам необходим для динамического меню, должен лежать в корне компонента или в его подкатегориях. Собственно его и нужно править )
     
  11. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    ну вроде все понятно. А вообще xml файлы - это единственный способ для задания параметров?
     
  12. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    ну если это Ваш собственный компонент - то там как хотите, в если вы про com_menus - то там все исключительно на хмл+мускул.
     
  13. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    xml так xml)))
     
  14. agruts
    Offline

    agruts Russian Joomla! Team

    Регистрация:
    01.03.2006
    Сообщения:
    612
    Симпатии:
    21
    Пол:
    Мужской
    omfgpanda, если ему нужно подправить один раз, то это одно. Но вопрос состоит в динамическом создании XML:
    Я привел вполне рабочий пример. И даже для создания деревьев его можно приспособить
     
  15. agruts
    Offline

    agruts Russian Joomla! Team

    Регистрация:
    01.03.2006
    Сообщения:
    612
    Симпатии:
    21
    Пол:
    Мужской
    Код (PHP):
    1. <?php
    2. $sql = "SELECT * FROM table.... WHERE ...";
    3.  //построить правильный запрос в бд исходя из того, какие данные нужно получить
    4.  
    5. $characters_to_remove = array('&',     '\'',     '"',      '>',    '<');
    6. $replace_with         = array('&amp;', '&apos;', '&quot;', '&gt;', '&lt;');
    7.  
    8. $title             = str_replace($characters_to_remove, $replace_with, $row['title']);
    9. $message    = strip_tags($row['message']);
    10. $description    = str_replace($characters_to_remove, $replace_with, $description);
    11. $name       = $row['name'];
    12. $paramname      = $row['paramname'];  
    13. $option = $row['option'];
    14.  
    15. $File = "filename.xml";
    16. $Handle = fopen($File, 'w');
    17.  
    18. $Data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
    19. ."<metadata>\n"
    20. ."<layout title=\"Страница специальности\">\n";
    21. . "<message>". $message ."</message>\n"
    22. . "</layout>\n"
    23. . "<state>\n"
    24. . "<name>'" .$name."'</name>\n"
    25. . "<description>'" .$description. "'</description>\n"
    26. . "<params>\n";
    27. fwrite($Handle, $Data);
    28.  
    29. $Data = "<param name='". $paramname . "'type=\"list\" default=\"0\" label=\"Тип списка\" description='".$description."'>\n";
    30.  
    31. $result = mysql_query($sql);
    32. while($row = mysql_fetch_assoc($result))
    33.  
    34. {
    35. $Data = "<option value='". $option . "'>" .$option."</option>";
    36. fwrite($Handle, $Data);
    37.     }
    38. $Data = "</param>\n"
    39. . "</params>\n"
    40. . "</state>\n"
    41. . "</metadata>";
    42.  
    43. fwrite($Handle, $Data);
    44. fclose($Handle);
    45.  
    46. ?>


    цикл показан для одного параметра (<param>), т.е. если параметров несколько, то их тоже надо в цикл, но так, чтобы цикл для построения <option> оказался вложенным.

    сохранить в отдельный файл, а вызывать путем include_once в в том файле, при обращению к которому должен создаваться XML
     
    Последнее редактирование: 18.11.2009
  16. Offline

    deadheart Недавно здесь

    Регистрация:
    07.09.2009
    Сообщения:
    69
    Симпатии:
    0
    Пол:
    Мужской
    всем спасибо за помощь.!
     

Поделиться этой страницей

Загрузка...