好的,这只是我觉得我应该问的问题,因为我在任何文档中找不到任何对此的参考,并通过实际代码阅读以找出实现这一目标的最佳方法需要更长的时间然后希望花。
当您进入文章管理器时,您有一个指向类别管理器的导航链接,反之亦然。我想用我的组件和默认的用户管理器做类似的事情。
我已经有一个配置文件插件来扩展用户以满足我的需求,但我希望它的配置无缝,因此调整com_user组件以更好地与我的组件集成是我正在寻找的。 p>
所以我的问题是com_content和com_categories他们使用“extension”参数。是否可以在没有完全核心覆盖com_users的情况下添加类似的功能?如果我完全覆盖,则由于依赖用户,某些扩展可能无法正常工作。
我愿意澄清一下是否有任何意义,这个问题更多的是看你能在没有覆盖的情况下“扩展”Joomla。
更新:
我找到了一种很酷的技术,但不是一个很好的答案。 您可以仅覆盖组件中的列表控制器/模型/视图,如果您将其基于当前的com_users组件,则可以使其看起来像直接集成。 您需要进行的唯一编辑是确保将任何到用户视图的路径传递给您的组件。
然而,这有一个问题,当您添加新用户或编辑新用户时,一旦完成,它将引导您进入主用户管理器。系统插件可能对此有所帮助,但前提是有一种可靠的方法可以检测用户是通过组件编辑的,而不是用户管理器。
注意:向用户视图添加覆盖的问题在于它依赖于5-6个其他MVC组件,因此为了便于使用核心com_users更新进行更新,最好避免使用尽可能。
需要做的另一件事是确保找到com_users的语言文件并将所有条目添加到组件中。
我觉得可能仍然有更好的答案,但这样做并不会对核心造成太大影响,并且可以通过更新com_users轻松更新。
我正在为此开启一个赏金,我觉得我曾经问过的每一个问题都是对社区最有利的一个问题。所以这是问题的简要版本。
将核心组件集成到自定义组件中并让它通过对核心组件的编辑最少的无缝路由,这将是一种简单的方法。
答案 0 :(得分:1)
我不清楚你想要什么,但如果你在com_content
谈论工具栏子菜单是这样的话:
您提供的类别(例如com_categories
)的示例是添加的特定支持,您可以使用您的扩展程序标识符(com_catgories
)传递指向extension=com_mycomponent
的链接,它将加载扩展程序的侧边栏菜单。这样就可以在各个组件 [see Add Categories]之间共享核心类别。
您可能已经了解以下内容,但是,如果您想知道如何将侧边栏菜单添加到组件管理器视图,可以致电JHtmlSidebar::addEntry($title, $link, $active);
通常,这会在名为addSubmenu($vName)
的函数中放入您的扩展主辅助文件中(这是com_categories
将查找以显示工具栏子菜单的内容。 它被称为addSubmenu()
因为sidebar
变形为以前版本的Joomla中的工具栏子菜单。
e.g。这是addSubmenu()
ContentHelper
类中的administrator/com_content/helpers/content.php
方法
/**
* 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()
方法,它查找调用扩展核心帮助程序类(如果找不到它,则默认为{{1} }})。
在com_content
中没有类似的支持,因此您可能需要创建一个系统插件来触发com_users
并根据您的组件是否提供了合适的参数来添加子菜单项,就像onAfterRoute
一样。这将是一个混乱,但它应该工作 - 唯一的事情是,你会在调度组件之前添加一个子菜单项,你的新子菜单项将永远是extension=com_myextension
子菜单中的第一个项目。它不会像com_users
支持那样完全替代。
不幸的是,com_categories
中没有任何触发器可以帮助您调整整个侧边栏菜单。
下一个选项是通过创建自己的替换版本来使用Donald Gilbert's gist to create a system plugin that allows you to override any core class之类的东西 - 显然这会产生任何重大更新的问题,但如果您小心,可以将覆盖限制在您的特定情况。
如果这还不够/过度你可能想尝试一个响应com_users
的系统插件,此时你会在返回浏览器之前拥有该页面而你可以破解HTML,但这非常难看如果用户更改管理模板,则容易破裂。
当然,我可能完全错了,并且在3.x中有更好的方法。也许别人会插话。