|
|
|||||||||||||||||||||||||||||
|
Используйте PHP для создания XForms : Часть 2. Использование библиотеки XForms, написанной на PHP, для создания форм (исходники)Источник: ibm Тайлер Андерсон, независимый автор, N/A
На данный момент у нас есть библиотека, написанная на PHP, которая теоретически должна работать, но на практике она еще не тестировалась. Настало время улучшить вид выводимых данных, ввести проверку входных параметров функций (поскольку сообщения об ошибках, выдаваемые программой предварительной обработки данных XForms, не всегда бывают полезны), а также посмотреть на пример использования данной библиотеки. Ну что же, приступим к реализации намеченного плана. После того как мы создали ядро библиотеки XForms, мы готовы внести в нее некоторые улучшения. Например, можно добавить возможность исключения данных определенного типа, а также возможность управления этими данными, что бывает полезно в тех случаях, когда не все вводимые данные могут быть приняты, либо в случае, когда возникшие ошибки могут оказать негативное воздействие на конечный XHTML-документ. Кроме того, нам понадобятся несколько вспомогательных функций, которые будут использоваться при выводе кода XHTML в Web-браузер и форматировании данных. Начнем с введения проверки на ошибки. Добавив в библиотеку возможность проверки на ошибки, мы тем самым значительно сократим время написания кода за счет того, что препроцессору XForms придется обрабатываться гораздо меньше ошибок. Если это сделать сейчас, то в дальнейшем эта проверка будет значительно помогать нам при разработке. Проверка на ошибки будет производиться двумя способами:
Для начала перейдем к списку переменных в файле xforms_lib.php и добавим две переменные, как показано в листинге 1. Здесь новые переменные - $allowed и $tag . В конструкторе мы проинициализируем их. Ниже в данном разделе вы узнаете больше о назначении переменной $tag , а пока вам достаточно знать лишь то, что эта переменная предназначена для хранения текущего открытого тега. Все значения, представленные в листинге 1, являются тегом XHTML самого верхнего уровня XForms. Root используется в том случае, если ни один тег не был определен (repeat и root фактически являются одним и тем же тегом, при этом, когда тег repeat открыт, root используется для проверки данного факта). Например, взгляните на 'action': в качестве разрешенных дочерних тегов XHTML выступают только dispatch, insert, setvalue и load. Как видите, в разных тегах разрешено использовать разные дочерние теги. Чтобы воспользоваться всеми новыми функциональными возможностями, нам предстоит изменить метод Обратите внимание на то, что здесь добавилось нового. В новую функцию Теперь нам необходимо ввести новую функцию
Сейчас нам предстоит воспользоваться функцией Здесь нам необходимо не забыть добавить вызов функции Сейчас нам предстоит создать функцию, которая назначает открытый в данный момент тег ( Мы будем использовать эту функцию для назначения тега самого верхнего элемента. Например, после открытия тега model мы воспользуемся этой функцией следующим образом: Настало время добавить проверку вводимых значений. При этом при обнаружении недопустимых данных будет выводиться соответствующее сообщение. Для добавления проверки нам понадобятся всего пять функций: При использовании функции submissionTag можно вводить один из двух входных параметров ( $instance или $replace ), но при этом только один из них, а не оба сразу. При использовании этой функции в случае обнаружения недопустимого значения пользователю будет выведено соответствующее сообщение. Этот же принцип используется и в остальных четырех функциях (как показано в листинге 7). Обратите внимание на то, что для функции На этом мы заканчиваем рассмотрение данного раздела, посвященного обработке ошибок. Далее в разделе, посвященном тестированию, вы увидите, как происходит обработка ошибок и отображается соответствующее сообщение пользователю. В дополнение к обработке ошибок нам предстоит создать еще несколько вспомогательных функций, которые будут помогать разработчикам при создании XForms с помощью PHP. Вначале нам предстоит ввести еще несколько переменных класса, как показано в листинге 8. Дополнительные три переменные будут использоваться при форматировании выводимых данных XHTML. С помощью переменной $print определяется, необходимо ли выводить XHTML (с помощью выражения echo) непосредственно в браузер, используя для этого функцию Сейчас нам предстоит создать несколько функций, одна из которых будет устанавливать значение $print, а другие - увеличивать и уменьшать величину отступа (т.е. изменять значение переменной Первые две функции увеличивают и уменьшают значение переменной $indentation (обнуленной изначально в конструкторе), а третья переменная устанавливает значение переменной $print . При этом $print принимает значение 1, если выполняется условие ввода переменной, и 0 - если нет. В листинге 10 представлена функция, вставляющая отступ перед строкой кода.
Количество итераций в цикле данной функции равно значению переменной $indentation , при этом на каждой итерации происходит прибавление значения переменной $indentationValue к $xml , после чего функция выводит это накопленное значение в качестве результата. Например, если значение $indentation было 2, то в переменной $xml будет накоплено восемь пробелов, которые и будут выведены данной функцией в качестве результата. Эта функция вместе с функциями В листинге 11 представлена функция
В конце каждой функции происходит вызов функции Здесь в листинге 12 вы можете увидеть использование в каждой функции выражения Добавьте также выражение Наконец, осталось создать еще несколько вспомогательных функций (как показано в листинге 13), чтобы сделать более простым использование нашей библиотеки XForms. Вы можете использовать эти функции в файле PHP с целью более удобного отображения необходимых тегов HTML. В следующем разделе для тестирования библиотеки XForms мы создадим форму. При ее разработке мы будем использовать все представленные выше функции. С их помощью будут создаваться теги и выводиться заголовки формата XHTML. Создание формы с помощью библиотеки XForms, написанной на PHP Настало время убедиться в удобстве использования библиотеки XForms. В данном разделе будут созданы несколько виджетов XForms, на примере которых будет показано использование библиотеки (при этом будет задействован плагин Firefox XForms). Взгляните на начальный код новой страницы index, представленный в листинге 14. В первой строке мы указываем на использование библиотеки в нашем файле PHP, присваиваем значение новому классу Далее в листинге 15 вы увидите, как с помощью библиотеки создается модель XForms. В первых нескольких строках файла PHP представлены переменные, содержащие имена модели, экземпляра класса и элементов, с помощью которых отправляются данные. Также определяются две копии данных документа XML. Затем происходит инициализация переменной класса $tag , которой присваивается значение 'root' путем вызова функции Теперь все готово для открытия тега model, что и происходит в следующей строке. Опять используется переменная $tag , которая теперь принимает значение 'model' (поскольку только что был открыт тег model, и тег root уже не является тегом верхнего уровня). При этом также необходимо увеличить отступ, для чего вызывается функция Далее приписываются значения двум экземплярам документов, после чего следуют два тега submission. Они оба будут использоваться для перенаправления с помощью метода Теперь мы можем приступить к созданию тела документа XHTML, как показано в листинге 16. Вначале закрывается тег заголовка XHTML и открывается тег основной части документа. Затем создаются три тега input, в каждом из которых идет обращение к полям $instance1 : data1, data2 и data3 соответственно. После этого создаются два тега output, в каждом из которых идет обращение к полям $instance1 : data4 и data5 соответственно. Изменяя эти значения в форме, вы можете убедиться в том, что привязка элементов, созданная в листинге 15, работает именно так, как ожидается. Далее нам необходимо определить тег select1, как показано в листинге 17. Вначале в качестве значения массива $itemset мы устанавливаем nodeset, содержащий все элементы из $instance2 . Затем тегу select1 приписывается значение и происходит обращение к полю data5 (принадлежащему $instance1 ). Обратите также внимание на то, что изменяя значение тега select1, вы тем самым будете изменять значение второго тега output, определенного в листинге 16. Далее нам предстоит определить две кнопки submit. С помощью этих двух кнопок мы сможем увидеть настоящий код XML каждого объекта (листинг 18). Изменяя значения в текстовых полях и в выпадающем списке select1, нажимая после этого на подписанные соответствующим образом кнопки, вы можете выводить код XML. Теперь нам предстоит рассмотреть пример использования тега trigger, как показано в листинге 19. Здесь мы создаем тег trigger с названием 'new page.' После его открытия мы присваиваем переменной $tag значение 'trigger', а внутри тега trigger мы создаем тег action, активируемый при возникновении события DOMActivate. После того как внутри данного тега мы установили 'action' в качестве значения тега $tag , мы создадим тег load, с помощью которого будет производиться загрузка новой страницы, основанной на значении поля data1. (Вы можете самостоятельно посмотреть на изменение выводимых результатов, вводя различные значения в поле data1 и вызывая событие, на которое реагирует код из тега trigger). Наконец, мы закрываем теги action и trigger и присваиваем исходное значение root переменной $tag . Последний тег repeat, который нам предстоит проверить в работе, представлен в листинге 20. Здесь мы указываем все дочерние объекты $instance2 в качестве содержимого тега repeat. Поскольку repeat является эквивалентом root (при добавлении новых элементов), то мы устанавливаем 'root' в качестве значения $tag. Затем с помощью тега output мы отображаем текущее содержимое кода XML. Перед закрытием тега repeat переменная $tag принимает значение 'repeat', а после закрытия тега repeat переменная $tag принимает значение root. После создания всех тегов XHTML XForms документ XHTML закрывается, при этом в 2 раза уменьшается отступ и закрываются теги body и html. На рисунке 1 вы можете увидеть, как выглядит полученная форма. Не забудьте щелкнуть правой кнопкой мыши по отображаемой XHTML-странице, чтобы убедиться в правильности вывода кода XHTML вашим PHP-кодом (рисунок 2). Рисунок 2. Просмотр правильности форматирования полученного кода Попробуйте немного поработать с формой и с виджетами XForms, которые вы создали с помощью PHP.
Поздравляю! Теперь у вас есть надежная библиотека XForms, написанная на PHP, которую вы можете использовать и продолжать развивать. Как видите, библиотеку и определенные теги XHTML XForms нельзя назвать полностью завершенными. В эту библиотеку все еще можно вносить дополнения и улучшать ее возможности по обработке различных ошибок. Например, вы можете добавить несколько новых функций, с помощью которых будут определяться новые теги XHTML XForms и т.д. На самом деле возможности по улучшению безграничны. Целый проект с открытым исходным кодом не может быть сосредоточен на решении только одной простой задачи, которую мы начали рассматривать в первой части данной статьи. Надеюсь, вы получили удовольствие от знакомства с PHP и XForms. Удачи! Ссылки по теме
Файлы для загрузки
|
|