在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!的设计有多么欠缺灵活性上的考量,这不是很有可能。
问题就是,正常情况下,我们在一个组件中创建一个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!的设计有多么欠缺灵活性上的考量,这不是很有可能。
相关文章推荐
- 在Joomla!的组件里创建web service - 03: Joomla!自身的Component设计
- 在Joomla!的组件里创建web service - 01: JElement 回顾
- 在Joomla!的组件里创建web service - 02: JDump
- 如何创建一个Joomla的组件
- 使用 Fabrik 组件为 Joomla 创建一个简单的留言板
- 使用 Fabrik 组件为 Joomla 创建一个简单的留言板
- 动态创建MFCTabCtrl组件并在其父窗口中捕获,处理消息
- EasyUi常用组件(四)Dialog对话框、创建按钮(Buttons)、创建工具栏(Toolbar)
- 如何在Joomla!新建菜单类型里快速增加自定义组件类型?
- ATL7.1创建连接点组件
- 详解Android App中创建ViewPager组件的方法
- 如何使用jquery easyui创建标签组件
- 代码实现JSF组件树的创建与呈现
- 手把手教你使用VB来创建ASP组件
- 判断是否支持创建某组件对象
- 使用VB创建ASP服务器端组件
- joomla组件开发——会员积分管理组件的登陆跳转
- 使用Java创建RESTful Web Service
- OpenStack中nova组件创建虚拟机的源码流程
- 为 Microsoft Visual Studio .NET 设计器创建可设计的组件