【问题标题】:Joomla com_user extending similar to com_categories and com_contentJoomla com_user 扩展类似于 com_categories 和 com_content
【发布时间】:2013-08-09 19:23:05
【问题描述】:

好的,这只是我觉得我应该问的问题,因为我在任何类型的文档中都找不到对此的任何引用,并且通读实际代码以找出实现此目标的最佳方法将花费比希望更长的时间花费。

当您进入文章管理器时,您有一个指向类别管理器的导航链接,反之亦然。我想对我的组件和默认用户管理器做类似的事情。

我已经有一个配置文件插件来扩展用户以满足我的需要,但我希望它的配置无缝,因此调整 com_user 组件以更好地与我的组件集成是我正在寻找的。​​p>

所以我的问题是他们使用“扩展”参数的 com_content 和 com_categories。是否可以在不完全覆盖 com_users 的情况下添加类似的功能?如果我完全覆盖,则由于依赖用户,某些扩展可能无法正常工作。

如果有什么不明白的地方,我愿意澄清一下,这个问题更多是为了看看你可以在多大程度上“扩展”Joomla 而没有覆盖。

更新:

我找到了一个很酷的技术,但不是一个很好的答案。 您可以仅覆盖组件中的列表控制器/模型/视图,如果您基于当前的 com_users 组件,您可以使其看起来像直接集成。 您需要做的唯一编辑是确保到用户视图的所有路由都传递给您的组件。

但是,这样做有一个问题,当您添加新用户或编辑一个新用户时,一旦您完成它会将您定向到主用户管理器。系统插件可能会对此有所帮助,但前提是有可靠的方法来检测用户何时通过您的组件而不是用户管理器进行编辑。

注意:向用户视图添加覆盖的问题在于它依赖于 5-6 个其他 MVC 组件,因此为了便于使用核心 com_users 更新进行更新,最好避免如果完全有可能。

另一件事是确保找到 com_users 的语言文件并将所有条目添加到您的组件中。

我觉得可能还有更好的答案,但这样做不会对核心产生太大影响,并且很容易通过对 com_users 的更新进行更新。

我正在为此开奖,我觉得我问过的每一个问题都是对社区最有益的问题。所以这里是问题的精简版。

有什么简单的方法可以将核心组件集成到自定义组件中,并让它通过该组件无缝路由,而对核心组件的编辑最少。

【问题讨论】:

    标签: php joomla joomla3.1


    【解决方案1】:

    我不太清楚你想要什么,但如果你在 com_content 中谈论这样的工具栏子菜单:

    您给出的类别示例(即com_categories)是添加的特定支持,您可以在其中使用您的扩展标识符(extension=com_mycomponent)传递指向com_catgories 的链接,它将为您的扩展加载侧边栏菜单.这样核心类别可以在各种组件之间共享 [see Add Categories]

    您可能已经知道以下内容,但是,如果您想知道如何将侧边栏菜单添加到组件管理器视图中,您可以致电 JHtmlSidebar::addEntry($title, $link, $active);

    通常,这会放在您的扩展主帮助文件中的一个名为addSubmenu($vName) 的函数中(这是com_categories 将在哪里寻找以显示您的工具栏子菜单)。 之所以称为addSubmenu(),是因为sidebar 是从以前版本的Joomla 中的工具栏子菜单演变而来的。

    例如这是administrator/com_content/helpers/content.php中定义的ContentHelper类中的addSubmenu()方法

    /**
     * Configure the Linkbar.
     *
     * @param   string  $vName  The name of the active view.
     *
     * @return  void
     * @since   1.6
     */
    public static function addSubmenu($vName)
    {
        JHtmlSidebar::addEntry(
            JText::_('JGLOBAL_ARTICLES'),
            'index.php?option=com_content&view=articles',
            $vName == 'articles'
        );
        JHtmlSidebar::addEntry(
            JText::_('COM_CONTENT_SUBMENU_CATEGORIES'),
            'index.php?option=com_categories&extension=com_content',
            $vName == 'categories');
        JHtmlSidebar::addEntry(
            JText::_('COM_CONTENT_SUBMENU_FEATURED'),
            'index.php?option=com_content&view=featured',
            $vName == 'featured'
        );
    }
    

    相比之下,com_categories 助手类 CategoriesHelper 有一个非常不同的 addSubmenu() 方法,它查找调用扩展核心助手类(如果找不到,则默认为 com_content)。

    com_users 中没有类似的支持,因此您可能必须创建一个系统插件来触发 onAfterRoute 并根据您的组件是否提供合适的参数来添加子菜单项,例如 @ 987654343@。这会有点麻烦,但它应该可以工作 - 唯一的事情是您将在分派组件之前添加一个子菜单项,您的新子菜单项将始终是 com_users 子菜单中的第一项。它不会像com_categories 支持那样完全替代。

    不幸的是,com_users 中没有任何触发器,我发现它们对调整整个侧边栏菜单有任何帮助。

    下一个选项是通过创建您自己的替代版本来使用 Donald Gilbert's gist to create a system plugin that allows you to override any core class 之类的东西 - 显然这会对任何重大更新产生问题,但如果您小心的话,您可以将覆盖限制在您的特定情况下。

    如果这还不够/矫枉过正,您可能想尝试一个响应onAfterDispatch 的系统插件,此时您将在页面返回浏览器之前拥有该页面,并且您可以破解 HTML,但这非常难看并且容易发生如果用户更改他们的管理模板,就会崩溃。

    当然,我可能完全错了,在 3.x 中有更好的方法来做到这一点。也许其他人会插话。

    【讨论】:

    • 是的,这个问题的原因是我的组件直接与用户集成,因此能够在组件和用户之间跳转是关键。这可能对我的情况没有帮助,但它非常清楚地解释了扩展的功能,所以竖起大拇指!
    • 您是说您只是想添加一个带有来自另一个扩展程序的视图的选项卡,而您想将用户视图作为您的扩展程序上的一个选项卡进行广告?我对你想做什么有点困惑,
    • 如果您转到用户管理器并单击“用户”,即“查看”我想在我的扩展程序中使用,因为该组件处理许多用户附加组件,简化它会非常方便它。我已经做了一种覆盖,它可以工作,但是在保存时路由回我的组件有问题(因为我没有路由“用户”视图,只路由“用户”列表视图)。
    猜你喜欢
    • 2013-07-29
    • 2011-08-14
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多