Joomla:如何将一种表单用于前端和后端视图?
Posted
技术标签:
【中文标题】Joomla:如何将一种表单用于前端和后端视图?【英文标题】:Joomla: how can I use one form for frontend and backend view? 【发布时间】:2013-10-05 07:16:49 【问题描述】:我正在创建一个 Joomla 2.5 组件。在后端,我创建了一个模型/视图/控制器“成员”,它显示了一个网格。我还创建了一个 MVC 'Member',用于从网格中添加或编辑成员。到目前为止一切顺利。
现在,我想添加一个前端视图,它与后端的“会员”视图非常相似,但这个视图是为访问者设计的,因此他们可以自己订阅。它必须比后端表单看起来更用户友好,所以我将在前端创建一个稍微不同的“成员”视图,但我真的很想重用表单文件 (/administrator/components/mycomponent/models/forms/member .xml) 从后端!
那么,我的问题是我的前端视图如何找到并使用该后端表单?
【问题讨论】:
【参考方案1】:您肯定必须将其加载到模型中。您的模型必须扩展 JModelAdmin,然后 getForm
函数必须加载表单
public function getForm($data = array(), $loadData = true)
// Get the form.
JForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/forms');
JForm::addFieldPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/fields');
$form = $this->loadForm('com_dpattachments.attachment', 'attachment', array('control' => 'jform', 'load_data' => $loadData));
if (empty($form))
return false;
....
我在我的 DPAttachments 组件中使用相同的方法,它适用于 Joomla 3.1,但主要代码在正面和背面使用相同的模型和形式,也应该在 Joomla 2.5 上运行。这是getForm函数的链接 https://github.com/Digital-Peak/DPAttachments/blob/master/com_dpattachments/admin/models/attachment.php#L102
【讨论】:
第 3 行和第 4 行是我正在寻找的行!但是,我将 JForm::addFormPath() 和 JFrom::addFieldPath() 放在 /site/mycomponent.php 中,以使所有前端模型都从后端获取它们的表单。谢谢!【参考方案2】:如果您遵循 Joomla MVC 指导,您的前端应该能够自动获取表单。
在你看来(虽然它实际上应该从模型中请求它)你可以这样写:
$formsPath = JPATH_ADMINISTRATOR.DS.'components'.DS.'com_mycom'.DS.'models'.DS.'forms';
$this->form = JForm::getInstance('myform', $formsPath.DS.'myform.xml');
【讨论】:
【参考方案3】:您还可以查看夏季代码 cm_config 项目,该项目使用 JSON 将配置表单和 templateDetails 表单拉到前端。 https://github.com/Buddhima/joomla-cms/tree/gsoc_com_config 或 com_services 分支。
【讨论】:
以上是关于Joomla:如何将一种表单用于前端和后端视图?的主要内容,如果未能解决你的问题,请参考以下文章