这应该是插件还是组件解决方案? (Joomla!)

Posted

技术标签:

【中文标题】这应该是插件还是组件解决方案? (Joomla!)【英文标题】:Should this be a plugin or component solution? (Joomla!) 【发布时间】:2014-05-21 21:14:43 【问题描述】:

根据下图,为Joomla(3.0)的核心注册组件创建一个插件会更好还是创建一个自定义组件更好?

我设想它仍将用户数据库表用于常见元素,但根据用户类型(客户/供应商)使用两个单独的关系表

提前谢谢你。

【问题讨论】:

我绝对同意@Brian。插件最适合此,因为它最好扩展当前的注册表单。如果您对Joomla Answers Proposal 做出承诺,我们也将不胜感激,因为您有 200 多个代表 :) 【参考方案1】:

我不得不恭敬地不同意另一个答案,这个用例实际上是创建自定义用户插件的标志。

您甚至可以使用现有的 #__user_profiles 表来存储任何新数据,只需一个插件即可将整个用例范围复制到注册、个人资料查看/编辑和后端用户管理。

  <?php
  defined('JPATH_BASE') or die;

  class plgUserCustomProfile extends JPlugin
  

        function onContentPrepareData($context, $data) 
                //  This method loads all data for existing users
                //  By attaching variables to the $data object using the
                //  same naming convention as your form field definitions
                //  will facilitate automatic loading of values into forms
                return true;
        

        function onContentPrepareForm($form, $data) 
            // This method allows you to attach custom forms to core user form
            // I usually have different forms for profile view, profile edit
            // registration and back-end administration depending on needs
        

        function onUserAfterSave($data, $isNew, $result, $error) 
             // This method allows you to save edits to custom user fields
             return true;
        

        function onUserAfterDelete($user, $success, $msg) 
             //  Here you get to delete all custom profile data when
             //  a user is deleted.
            return true;
        


 

下面的链接是一个更详细的解释,但一旦建成;它提供的控制和灵活性将使管理用户配置文件数据更加容易。

http://docs.joomla.org/Creating_a_profile_plugin

您熟悉使用 Joomla 方法创建 XML 表单定义文件吗?

您是否正在为您的自定义扩展实现多语言支持或 Latisha 定义文件?

【讨论】:

嗨@brian bolli,感谢您的意见!一段时间以来,我一直在搞乱用户插件,实际上我负责对您提供的文档进行一些编辑。我开始怀疑我是否应该为我正在尝试做的事情考虑“和”而不是“或”这个词。我主要担心的是: 如何根据用户分配给自己的组以及该信息将如何在两个组之间传达和显示(商家查看供应商报价,供应商查看接受来自商户)。基本上,将比较商家和供应商的输入以提供自动报价。 @cclark413 逻辑可以封装在字段集中。例如,您有一个带有“核心”选项的字段集,包括组的选择。您将任一组的其余表单字段全部放入单独的字段集中,在呈现注册表单时,这两个字段都通过 JS 隐藏。然后我们一个 JS 处理程序来监控组字段,根据用户选择显示适当的字段集。尝试在隐藏字段集客户端内使用必填字段时,事情会变得很棘手,但这是另一个问题。 ;)【参考方案2】:

根据下面的定义,您添加的内容更好地描述为一个组件。

http://docs.joomla.org/Extension_types_(general_definitions)

组件

组件是所有组件中最大和最复杂的扩展;它们可以被视为迷你应用程序。大多数组件有两个部分:站点部分和管理员部分。每次加载 Joomla 页面时,都会调用一个组件来呈现主页正文。例如,Content (com_content) 是处理内容显示的组件;用户可以在您网站的前端查看,并且作为管理员,您可以编辑内容。组件是页面的主要部分,因为组件由菜单项驱动,每个菜单项都运行一个组件。

模块

模块是用于页面渲染的更轻量级和更灵活的扩展。这些模块通常被称为围绕组件排列的“盒子”,例如:登录模块。页脚是一个模块。为每个菜单项分配模块。因此,您可以根据用户正在查看的菜单项来决定显示或隐藏登录模块。有时模块会链接到组件,例如“最新消息”模块,该模块链接到 com_content 并显示指向最新内容项的链接。但是,模块不需要链接到组件,事实上它们甚至不需要链接到任何东西,可以只是静态 html 或文本。

插件

插件是更高级的扩展,本质上是事件处理程序。在 Joomla 的任何部分的执行中,无论是核心、模块还是组件,都可以触发事件。当一个事件被触发时,向应用程序注册以处理该事件的插件就会执行。例如,可以使用插件来拦截用户提交的文章并过滤掉坏词。

【讨论】:

以上是关于这应该是插件还是组件解决方案? (Joomla!)的主要内容,如果未能解决你的问题,请参考以下文章

joomla 1.5 的地理定位组件

我可以在我的组件中使用 Joomla 插件吗

Joomla - 如何捕捉系统事件

joomla 组件到模块

Joomla:一次安装组件和模块

Joomla - 在我的组件中显示一篇文章