php - Joomla com_user 扩展类似于 com_categories 和 com_content

标签 php joomla joomla3.1

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

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

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

所以我的问题是他们使用“扩展”参数的 com_content 和 com_categories。是否可以在不完全覆盖 com_users 的情况下添加类似的功能?如果我进行完全覆盖,某些扩展可能会因依赖用户而无法运行。

如果有任何不合理的地方,我愿意澄清,这个问题更多是为了了解您可以在没有覆盖的情况下“扩展”Joomla 的程度。

更新:

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

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

注意:向用户 View 添加覆盖的问题是它有 5-6 个它依赖的其他 MVC 组件,所以为了使核心 com_users 更新更容易更新,最好避免如果尽一切可能。

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

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

我正在为此悬赏,我觉得我问过的每一个问题都是对社区最有益的问题。所以这是问题的浓缩版。

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

最佳答案

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

com_content submenu

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

您可能已经了解以下内容,但是,如果您想知道如何将侧边栏菜单添加到您的组件管理器 View 中,您可以调用 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 并根据您是否添加子菜单项组件提供了一个合适的参数,比如 extension=com_myextension。这会有点困惑,但它应该可以工作——唯一的事情是你将在分派(dispatch)组件之前添加一个子菜单项你的新子菜单项总是希望是 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 中有更好的方法。也许其他人会插话。

关于php - Joomla com_user 扩展类似于 com_categories 和 com_content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154168/

相关文章:

php - 分页 Wordpress $wpdb 查询?

MySQL 用数据透视表插入两个单独的表

.htaccess - 使用 htaccess 重写删除 URL 的一部分

php - 数组中的复选框没有值

php - Symfony 2 动态路由(例如商店)

php - 如何在php中设置DateInterval?

sql - Joomla 表单字段类型 sql ="....WHERE condition"?

php - 扩展、修改或覆盖 Joomla 的 bootstrap.php?

jquery - 如何将 Jquery 或 Jquery 插件添加到 Joomla 3

php - Joomla 基于微型网站 URL 的不同默认页面