在Joomla!的组件里创建web service - opening

来源:互联网 发布:c#判断网络状态 编辑:程序博客网 时间:2024/04/27 22:28

其实web service的定义不是那么明确,基本上在一个RPC操作过程中在服务器端扮演提供者的东西都可列入其中。而在我当前的语境里,我所指的是一个输出JSON格式数据的功能,这个功能会在一个组件之中:JoomSport。


问题就是,正常情况下,我们在一个组件中创建一个controller,Joomla会根据index.php页面请求的task参数导向这个controller;接下来我们给这个controller创建一个view,Joomla会根据view参数导向它;之后我们再给这个view创建一个layout,Joomla会根据layout参数最终导向它,而最终这个layout的模板php所输出的HTML内容,将只会是所安装的Joomla主题模板输出的HTML中的一个片段。它通常被放在一个div中。在我的模板里,它的ID好像是componentpane。


也就是说,默认情况下,我们在一个组件中写的功能,将不会作为独立的输出被返回,它只会出现在整个主题模板中,而我要输出的是一个给Ajax请求的JSON数据,它不需要那些多余的HTML。这就是要解决的问题。在没有帮助信息的情况下,我想到一些思路或许可以解决这个问题:


1.我首先想到的是在后台部分的element,它实际上是保存在administrator/component/com_joomsport/elements/路径下的一些PHP文件,而每个文件内是一个类的定义,它们都继承自JElement类。它的作用是,为当用户,设定一个菜单项链接到一个视图布局时,提供该链接的某个参数的可能值来给用户从中选择。这个过程的重点就是,Joomla会把一个JElement的类文件输出的HTML作为一个独立的输出。在我以前的博客中有几篇讨论JElement的:

http://blog.csdn.net/zlxadhkust/article/details/6862317

http://blog.csdn.net/zlxadhkust/article/details/6904458

http://blog.csdn.net/zlxadhkust/article/details/7061435

http://blog.csdn.net/zlxadhkust/article/details/7060956


2.我可以参考一个叫JDump的Joomla!插件。它是一个用于给开发者输出PHP变量的工具,它跨越了前台和后台的分别,不管你在哪里的PHP页面中插入dump()函数,当请求执行到那个页面时,浏览器会弹出一个新的窗口,在窗口中输出关于一些变量的信息。

我想在这个过程中,这个组件应该是在HTML还在缓存的时候尚未被输出以前,注入了一些Javascript脚本,来实现弹出窗口的功能。但是中间过程的数据是如何被移动或者传递的就暂不清楚。


3.通过Joomsport自身,从Joomla的MVC设计中寻找答案。

如果我们做这样一个假设,即是,Joomla!做不到在一个component中将某个视图的结果独立输出来达到web service的目的,那么这将意味着Joomla!的设计有多么欠缺灵活性上的考量,这不是很有可能。


原创粉丝点击