您的位置:首页 > 运维架构

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

2012-08-02 11:24 253 查看
其实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的:

/article/9875614.html

/article/9875632.html

/article/9875674.html

/article/9875673.html

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

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

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

如果我们做这样一个假设,即是,Joomla!做不到在一个component中将某个视图的结果独立输出来达到web service的目的,那么这将意味着Joomla!的设计有多么欠缺灵活性上的考量,这不是很有可能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: