Как я могу загрузить Xml, сгенерированный из Php, в форму Xforms для редактирования? - PullRequest
1 голос
/ 24 августа 2011

У меня есть приложение, разработанное с использованием Xforms / Php / Mysql.Мне удалось сгенерировать Xml из mysql db с помощью Php, но как мне загрузить значения xml в форму xforms для редактирования? Также как я могу вызвать выходной элемент управления для отображения сообщения об ошибке, когда необходимые элементы не заполнены, при условии, что яне хотите, чтобы всплывающий элемент сообщения отображался в событии xforms-submit-error для отправки.Пожалуйста, помогите и спасибо.

1 Ответ

1 голос
/ 25 августа 2011

Сначала создайте ресурс с использованием PHP, который выводит XML.Сделайте это, когда вы делаете HTTP GET.Затем заставьте его принять тот же XML, что и HTTP POST, используя этот совет от IBM: http://www.ibm.com/developerworks/xml/library/x-xformstipphp/

Допустим, ваши данные выглядят так:

<data>
  <pizza>
    <size>medium</size>
    <topping>pepperoni</topping>
    <notes>Extra cheese</notes>
  </pizza>
</data>

Эти данные будутзагружается в «экземпляр» XForms, который XForms называет переменными XML, которые вы можете загрузить через HTTP и POST обратно.Когда вы нажимаете Order, форма отправляет XML обратно на ваш ресурс, который ваш PHP должен затем записать обратно в вашу базу данных.Затем PHP выводит обновленный XML, который отправляется обратно процессору XForms, и он обновляет экземпляр, а форма отображает обновленные значения, оставаясь на той же странице.

Затем используйте его в своем видеHTML-страница:

html xmlns="http://www.w3.org/1999/xhtml" xmlns:ev="http://www.w3.org/2001/xml-events">
  <head>
    <title>Pizza</title>
    <model xmlns="http://www.w3.org/2002/xforms">
      <instance resource="/path/to/my/data.php" />
      <submission resource="/path/to/my/data.php" method="post" replace="instance" id="order" />
    </model>
  </head>
  <body>
    <group ref="pizza" xmlns="http://www.w3.org/2002/xforms">
      <select1 ref="size">
        <label>Size: </label>
        <item><label>Large</label><value>large</value></item>
        <item><label>Medium</label><value>medium</value></item>
        <item><label>Small</label><value>small</value></item>
      </select1>
      <select1 ref="topping">
         <label>Topping: </label>
         <item><label>Large</label><value>large</value></item>
         <item><label>Medium</label><value>medium</value></item>
         <item><label>Small</label><value>small</value></item>
      </select1>
      <textarea ref="notes">
         <label>Notes: </label>
      </textarea>
      <submit submission="order">
         <label>Order</label>
      </submit>
    </group>
  </body>
/html        

Это будет выглядеть не очень хорошо, если вы отобразите его на странице, потому что для макета нет CSS.Если вы используете Orbeon, avernet может помочь вам разобраться в этом.

Если вы используете AgenceXML xsltforms, поместите это в block-form.css и добавьте в заголовок вашей страницы.

.block-form {
  margin-left: 3pt;
  margin-top: 3pt;
  margin-bottom: 3pt;

}

.block-form span.xforms-control > span {
  display:inline-block; 
  white-space:nowrap; 
}

.block-form label.xforms-label {
   display:inline-block; width:6em; 
   text-align:left; 
   margin-right:4px;
}

.block-form span.xforms-input.row,
 span.xforms-select.row,
 span.xforms-select1.row,
 span.xforms-textarea.row,
 span.xforms-secret.row,
 span.xforms-output.row {
  display:block;
}

.block-form-section > div.xforms-group-content {
  padding-bottom: 10px; 
  margin: 2px; 
  width: 32em;
}

.block-form-section .xforms-group-label {
  display: inline-block; 
}

.wide .xforms-value { 
  width: 32em;
}

Затем поместите class = "block-form" в вашей внешней группе и class = "row" в каждом из select1 и textarea и отправьте.

Если вы хотите, чтобы этот пример работал с XSLTFormsпосещение http://xformstest.org/klotz/2011/08/pizza/pizza.xml - просмотр источника также будет работать там.Кнопка «Заказать» просто отправляет данные и возвращает их без изменений, поскольку программа PHP просто игнорирует их.

Если вы вместо этого хотите перейти на другую страницу после получения новых данных, вы можете сделать это следующим образом:

<submission resource="/path/to/my/data.php" method="post" replace="instance" id="order">
  <load ev:event="xforms-submit-done" resource="/path/to/my/new/page.html" />
</submission>

(Чтобы узнать больше о загрузке, см. http://en.wikibooks.org/wiki/XForms/Load - вы можете получить новую страницу для возврата как часть экземпляра XML и использоватьусловно перейти и на другую страницу.)

Вы также можете вытащить список добавок со страницы HTML и поместить его во второй экземпляр, чтобы он мог быть определен отдельной серверной PHP-программой.или статический файл.Прочтите о select1 и itemset, чтобы узнать, как это сделать.В этот момент вы также можете начать использовать связывание для привязки условий к данным, чтобы вы могли контролировать релевантность и сделать так, чтобы в цельнозерновой пицце не было бекона или любых условий, которые вы можете выразить в данных экземпляра.

Обновление Вот работающая версия.Нажатие кнопки «сохранить» отправляет данные, но серверная часть ничего с этим не делает.Используйте View Source, чтобы увидеть, что происходит.http://xformstest.org/klotz/2011/08/pizza/pizza.xml

...