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:如何将一种表单用于前端和后端视图?的主要内容,如果未能解决你的问题,请参考以下文章

也使用 Jquery 和 Php 在前端和后端验证表单数据

如何使用 App Insights 关联前端和后端?

在 spring-boot 中如何分离前端和后端机器?

前端和后端处理不同的拼接的json数据

jQuery Ajax 前端和后端数据交互的问题

【JSON】JSON在前端和后端传递