Сначала создайте ресурс с использованием 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