2013-10-06 18 views
0

乡亲形式的行动,村 - 正确的方式来定义的插件

在村插件,我发展,我有以下的DisplayObject两页:

myinput.cfm 
myaction.cfm 

在myinput.cfm,我使用cfform收集输入:

<cfform action="myaction.cfm" method="post"> 
... 
</cfform> 

当我将我的插件添加到页面后,myinput.cfm中的表单按预期方式出现。然而,当点击提交时,我得到一个错误,myaction.cfm找不到。

我想我定义行为的方式是不正确的。回想一下,我的插件只是较大页面的一小部分。表单提交实际上应该回到同一页面,除了呈现应该以某种方式使用myaction.cfm而不是myinput.cfm。

我猜这个问题在本质上是比较普遍的,那就是如何定义一个指向插件内不同页面的导航链接。

非常感谢您的帮助。

问候,
彼得

回答

3

所有的DisplayObject必须直接添加到页面,所以除非你加入myaction.cfm到页面中,也不会被别人发现。

<cfinclude template="/#$.getPlugin('MyPluginPackageName').getDirectory()#/..."> 

通常你可以在一个开始分配$ .getPlugin(“MyPluginPackageName”)对象变量:

如果你真的需要,你可以使用得到你的插件的映射文件DisplayObject,以便您可以重复使用它,而无需重复调用该函数。

但是,这是而不是将您的“查看”文件映射到Mura Plugin中的最佳实践。

这样做的更多推荐方法是让相同的DisplayObject显示窗体并处理窗体结果。你可以用你的形式,有条件的,如:

<cfif StructKeyExists(form,"some_field_in_my_form")> 
... action code 
<cfelse> 
... form code 
</cfif> 

...,以确定是否有形式尚未提交(如果你是做服务器端验证或类似的明显调整)。我建议的一件事是你不使用StructCount(“表单”)或类似的,因为页面上可能有其他表单已经提交。

如果你想分离你的代码,以保持它更有组织,只需使用你的DisplayObject作为容器,并使用包含/函数调用/等。

Display Object: [your plugin folder]/displayObjects/myform.cfm 

<cfif StructKeyExists(form,"some_field_in_my_form")> 
    <cfinclude template="./inc/myaction.cfm"> <!--- [your plugin folder]/displayObjects/inc/myaction.cfm ---> 
<cfelse> 
    <cfinclude template="./inc/myinput.cfm"> <!--- [your plugin folder]/displayObjects/inc/myinput.cfm ---> 
</cfif> 

如果你真的有决心有两个显示对象,你就必须要么一)他们都分配给同村的内容页,但用条件来包装他们,以确保它们只出现在适当的范围内,或b)将它们分配到不同的Mura页面,并将表单发布到包含myaction.cfm显示对象的Mura页面。

最后,我建议检查一下FW/1样本插件https://github.com/blueriver/MuraFW1 ...一旦你获得了FW/1(最简单的CFML框架来学习)的窍门,它将使建立你的插件变得更加容易。

+0

太棒了。非常感谢您的帮助。彼得 – Peter

相关问题