文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用PHP创建XForms 第 1 部分

使用PHP创建XForms 第 1 部分

时间:2008-05-17  来源:剑心通明


[url=javascript:;]PHP[/url]
XForms 库简介
XForms 是一种优秀的 Web 2.0 语言,它拥有一些很好的特性使开发人员能够创建最强大的表单。既然如此,为何不在 PHP 中使用 XForms?PHP 开发人员通常输出的是
[url=javascript:;]HTML[/url]
,后者一般对表单的功能有所限制。但是,XForms 的问题在于,其文件类型是严格的 XHTML,这是一种更精确的 HTML 版本,因为
[url=javascript:;]XML[/url]
格式严格,并且不允许出现错误,标记不匹配等情况。另外,XForms 有正规的语法,这让一些只学过 PHP 语言的 PHP 开发人员在
[url=javascript:;]学习[/url]
XForms 时有些困难。

系列文章
展示了 XForms PHP 库的创建过程,PHP 开发人员可以访问这些库以创建 XForms 元素。这将有助于减少 XForms 的学习过程,并且也有助于经验丰富的 XForms 开发人员在其 Web 应用程序设计中使用 PHP。这也免去了需要连续地输出显式的 XHTML
[url=javascript:;]代码[/url]
的要求,相反,对 XForms 库执行一些简单的调用即可输出所需的 XHTML 代码。这样,最终可以减少得到的 XHTML 中出现错误的可能性,从而加快开发速度。
在本文中,您需要使用 PHP 5 和 Firefox XForms 插件(请参阅
参考资料
一节中的下载链接)。本系列文章中的测试是使用 PHP5 在运行于
[url=javascript:;]Apache[/url]
2 上的 WAMP5 Server Version 1.7.1 上执行的。
现在开始创建库。




创建库
创建 PHP XForms 库时,您需要使用类,内存变量和本地变量都保存在类中,消除多余的变量以及代码中的混乱。首先,从类声明和局部变量定义开始,如清单 1 所示。
清单 1. 类声明和局部变量
               
这里请注意类名,使用类时需要知道该名称。
清单 1
中所示的三个变量是您将用到的三个主要的名称空间:通用的 XHTML 名称空间、XForms 名称空间和 Events 名称空间。
请注意,构造函数(见
清单 2
)和所有的后续
[url=javascript:;]方法[/url]
都在类声明中,如
清单 1
所示。
开始创建上述文件时,将其名称保存为 xforms_lib.php,并将其放入 PHP 代码的一个子目录中;比如称为 lib。
这些类变量(如
清单 1
所示)在类的构造函数中进行设置,如清单 2 所示。
清单 2. xforms_lib 构造函数
                    
    function xforms_lib($ns, $nsxforms, $nsevents){
        $this->namespace = $ns;
        $this->namespaceXforms = $nsxforms;
        $this->namespaceEvents = $nsevents;
    }
上面的构造函数接收这些名称空间的值并将其保存在类中。这让您免于一直访问名称空间的要求,比如,您可以使用 PHP XForms 库编写多个 XHTML 文件。
接下来,您将编写 htmlTag 方法,此方法返回开放 HTML 标记的声明。此函数只为您输出 HTML 标记:。如清单 3 所示。
清单 3. 打开 HTML 标记
               
    function htmlTag($customNS='', $customNSnamespace=''){
        $xml = 'namespace != '')
            $xml .= ' xmlns="'.$this->namespace.'"';
        if($this->namespaceXforms != '')
            $xml .= ' xmlns:xforms="'.$this->namespaceXforms.'"';
        if($this->namespaceEvents != '')
            $xml .= ' xmlns:ev="'.$this->namespaceEvents.'"';
        if($this->customNS != '' && $this->customNSnamespace != '')
            $xml .= ' xmlns:'.$this->customNS.
                '="'.$this->customNSnamespace.'"';
        $xml .= ' >';
        return $xml;
    }
清单 3
所示的函数创建了开放的 HTML 标记,同时将名称空间值置于 HTML 标记中的适当位置。htmlTag 方法返回下面的 XHTML,如清单 4 所示。
清单 4. htmlTag 返回的 XHTML
               
现在,您可以开始编写更多的函数来指定
[url=javascript:;]其他[/url]
XForms XHTML 标记的内容。查看清单 5 中的 submissionTag 函数。您将使用此函数创建一个 XForms XHTML 提交标记。
清单 5. submissionTag 函数
               
    function submissionTag($id, $action, $method = 'post', $ref='',
                           $instance = '', $replace = ''){
        $xml = '";
        return $xml;
    }
考察此函数如何接收所需的两个变量 $id 和 $action。request 方法默认为 post。因此,前三个变量 $id、$action 和 $method 在结果 XHTML 中返回,与其他变量的值无关。如果 ref、instance 和 replace 已经定义,则结果 XHTML 中也将返回这些变量。将至少两个变量 submissionTag('xformsTest', 'receive.php') 传给此函数,返回以下的 XHTML:。
接下来,您将创建 bindTag 函数,如清单 6 所示。您可以使用此函数创建变量绑定标记,方法是更改函数的参数。
清单 6:创建 bindTag 函数
               
    function bindTag($nodeset, $relevant = '', $calculate = '',
                     $required = ''){
        $xml = '";
        return $xml;
    }
这里有一个字段 nodeset 是必需的,要使该绑定元素正常
[url=javascript:;]工作[/url]
,还需要设置另外三个字段 relevant、calculate 或 required 中的一个。
接下来,使用清单 7 所示的 PHP 代码可以输出调度标记。您将使用此函数根据传给函数的输入创建调度标记。
清单 7. 调度标记
               
    function dispatchTag($name, $target){
        $xml = '";
        return $xml;
    }
此元素需要两个参数,name 和 target,您可以使用此元素将 XForms 事件(如 xforms-submit(示例 name)调度给提交元素(示例 target)。
loadTag 可用于重定向到另一个页面,或显示 “弹出” 类型的页面(传递 ‘new’ 作为 $show 变量)。查看清单 8 中的代码。您可以使用此函数在 PHP 代码中动态地创建加载标记。
清单 8. loadTag 函数
               
    function loadTag($resource = '', $ref = '', $show='replace'){
        $xml = '";
        return $xml;
    }
注意,$resource 和 $ref 不能同时定义。在本系列的第 2 部分,您将添加一些错误检查,确保 $resource 和 $ref 输入没有同时定义。
接下来,创建 insertTag 函数,如清单 9 所示。您可以使用此函数在 PHP 代码中根据传给函数的数据自动创建插入标记。
清单 9. insertTag 函数
               
    function insertTag($nodeset, $at, $position = 'after'){
        $xml = '';
        return $xml;
    }
此函数需要接收两个参数,另外还可以选择接收一个默认参数 $position。
下一个函数 setvalueTag 需要接收两个参数,如清单 10 所示。您可以一直使用此函数创建各种 setvalue 标记。
清单 10. setvalueTag 函数
               
    function setvalueTag($ref, $value){
        $xml = '';
        return $xml;
    }
inputTag 函数的布局稍有不同,因为它有一个嵌套的 XHTML 标签标记,如清单 11 所示。您可以使用输入函数在 PHP 代码中轻松地创建输入框。
清单 11. inputTag 函数。
               
    function inputTag($ref, $label = ''){
        $xml = '';
        if($label != '')
            $xml .= ''.$label.'';
        $xml .= "";
        return $xml;
    }
注意,只需要一个输入变量 $ref,如果定义了 $label,则在输入标记中将置入一个嵌套的标签标记,用于在输入旁边显示以指明所需输入的内容,比如 ‘Phone number: ’。在本文的测试小节您将看见此函数的运作情况。
接下来处理 outputTag 函数,如清单 12 所示。与输入函数类似,您可以使用输出函数轻松地在 PHP 代码中创建输出标记。
清单 12. outputTag 函数
               
    function outputTag($value){
        $xml = '';
        $xml .= '';
        return $xml;
    }
这是一个简单的函数,用于向屏幕显示变量的输出,与直接向普通的 Web 页面输出 HTML 很类似,只是此函数可以根据它在值属性中引用的 XML 的实际内容进行动态更改。
接下来考察 select1Tag 函数,此函数稍微复杂一些。在清单 13 中查看该函数。您可以使用 select1Tag 函数更加轻松地创建 select1 元素,不需要考虑语法是否正确。
清单 13. select1Tag 函数
               
    function select1Tag($ref, $label, $itemArray, $itemset,
                        $appearance = 'minimal'){
        $xml = '';
        $xml .= ''.$label.'';
        if(is_array($itemset)){
            $xml .= '';
            $xml .= '';
            $xml .= '';
            $xml .= '';
        }
        else if(is_array($itemArray))
            foreach($itemArray as $item){
                $xml .= '';
                $xml .= ''.$item['label'].'';
                $xml .= ''.$item['value'].'';
                $xml .= '';
            }
        $xml .= '';
        return $xml;
    }
此函数显示了一个完整的 select1 标记。如果在 $itemArray 元素中输入了一组标签和值,则对这些标签和值进行迭代并显示在菜单上。如果输入项目集,则会用于填充菜单的内容。
下一个函数提供了一种快速的方法,用于在结果的 XHTML 代码中输出 XHTML 注释,如清单 14 所示。
清单 14. comment 函数
               
    function comment($comment){
        $xml = '';
        return $xml;
    }
这里,输入 $comment 被置于有效的 XHTML 注释标记和返回之间。
下一个方法 instanceTag 返回一个完整的实例,如清单 15 所示。您可以使用此函数轻松地在 PHP 代码中创建实例声明。
清单 15. instanceTag 函数
               
    function instanceTag($id = '', $instanceXML = '', $src = ''){
        $xml = ''."\r\n";
            $xml .= $instanceXML;
            $xml .= "\r\n".'';
        }
        else
            $xml .= " />";
        return $xml;
    }
实例 XML 可通过 $instanceXML 参数输入,或者通过 $src 参数中的源 URL 输入。稍后可在其他的 XHTML 元素中使用其 $id 引用此实例。
submitTag 函数输出了一个按钮,用于将指定的实例数据提交给给定的 URL。如清单 16 所示。您可以使用此函数轻松地将提交按钮链接到 PHP 代码中的提交标记。
清单 16. submitTag 函数
               
    function submitTag($submission, $label='Submit', $ref = ''){
        $xml = '';
        $xml .= ''.$label.'';
        $xml .= '';
        return $xml;
    }
当您在
清单 5
中使用 submissionTag 函数创建提交标记时,可以在 $submission 参数中输入清单 5 中使用的 $id。这会将 submit 元素链接到 submission 元素。
最后八个函数用于打开和关闭各种标记:action、repeat、model 和 trigger。
清单 17. action、repeat、model 和 trigger 标记的打开和关闭
               
    function actionTagOpen($event){
        $xml = '';
        return $xml;
    }
    function actionTagClose(){
        $xml = '';
        return $xml;
    }
    function repeatTagOpen($nodeset, $id = ''){
        $xml = '';
        return $xml;
    }
    function repeatTagClose(){
        $xml = '';
        return $xml;
    }
    function modelTagOpen($id = ''){
        $xml = '';
        return $xml;
    }
    function modelTagClose(){
        $xml = '';
        return $xml;
    }
    function triggerTagOpen($ref, $submission = '', $label = 'default'){
        $xml = '';
        return $xml;
    }
    function triggerTagClose(){
        $xml = '';
        return $xml;
    }
这些函数与其他函数在风格上类似,只是前者打开和关闭的标记通常有一些嵌套的元素。例如,模型元素可以有几个嵌套的绑定实例和提交元素等。这里,您所需要注意的是,每个函数的 xxxxTagOpen 版本都打开元素的 XHTML。例如,modelTagOpen() 返回 。close 版本 xxxxTagClose 用于关闭 XHTML。例如,modelTagClose() 返回 。close 版本通常不接收参数,而 open 版本与本文中定义的其他函数很类似,只是 XHTML 标记不是关闭的,而是开放的,从而允许在关闭 XHTML 标记之前添加其他相应的嵌套元素。
下面,您将验证这一概念。




简单测试
现在,对前面所做的操作进行测试。首先,您需要创建一个简单的 index.php 文件,如清单 18 所示。
清单 18. 对测试文件进行概念证明
               
htmlTag();
?>
XForms served via PHP
';
echo $xformsDoc->modelTagOpen($model1);
echo $xformsDoc->instanceTag($instance1, $instance1data);
echo $xformsDoc->submissionTag($xformsTestSubmit,
                               "receive.php", 'post');
echo $xformsDoc->modelTagClose();
?>
inputTag("instance('$instance1')//data1", 'input1: ');
echo $xformsDoc->submitTag($xformsTestSubmit);
?>
因为这是一个 PHP 文件,所以需要输出到浏览器的写入数据实际上应该是 application/xhtml+xml 类型。这使得 Firefox 可以正确地将数据呈现为 XForms。您将使用 PHP 头函数 header() 来实现这一功能。接下来,注意 HTML 标记的打开方式,即,传入三个名称空间,创建一个新的 xforms_lib 类实例。然后,在 "// display model here," 下面的四个语句中,您可以看见定义了几个变量用作各种 XForms 实例的 ID 和 submission 元素等,以及实例数据。这里,您将真正看见结合使用 PHP 和 XForms 时的强大功能,您可以使用、保存或从
[url=javascript:;]数据库[/url]
中获取变量名创建 XForms 文档。
您还会看见使用 modelTagOpen 和 modelTagClose 函数打开 model 标记、编写 instance 和 submission 标记,以及后面调用 modelTagClose 函数以关闭 model 标记。
在 HTML 体中,调用 inputTag 和 submitTag 将分别显示 input 标记和 submit 标记,如图 1 所示。
图 1. 概念证明


现在,创建一个页面以捕获 submission 数据;receive.php 在上面的
清单 18
中已经指定。因此,创建一个新文件 receive.php,如清单 19 所示。
清单 19. 接收和显示提交的表单数据
               
', '>
',
                 str_replace('
这样,数据就从脚本输入中获取并回显到了屏幕上。
现在,您可以向文本框中键入任何内容,并单击 “提交”。键入 “testing testing 1 2 3” 将返回清单 20 所示的内容。
清单 20. 接收数据
               
testing testing 1 2 3
任务圆满完成!现在进入结束语部分,了解下一篇文章将要介绍的内容。




结束语

您现在已经成功地创建了 PHP XForms 库,它将协助您创建和开发 XForms 内容。
请继续关注本系列的
第 2 部分
,其中您将对先前创建的库进行增强,添加错误检查和一些便利的方法。您还将使用
第 2 部分
中的库创建概念证明表单。




下载
第 1 部分的示例代码


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载