bit3/contao-deeplinks

此包已被放弃,不再维护。未建议替代包。

在后台菜单中创建您Contao模块的深链接。

安装: 17

依赖: 0

建议者: 0

安全: 0

星星: 1

关注者: 2

分支: 0

类型:contao-module

1.0.2 2013-10-15 15:16 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:27:32 UTC


README

Build Status mess checked style checked

Contao不支持将特殊功能或特定记录的深链接作为后台菜单项。deeplinks扩展使得定义菜单项成为可能,这些菜单项可以作为深链接,并在链接打开时突出显示。

定义深链接

您可以在全局$GLOBALS['BE_MOD']数组中定义深链接,就像正常菜单项一样。

$GLOBALS['BE_MOD']['my_module']['my_deeplink'] = array(
	'icon'       => 'system/modules/my_module/assets/images/my_deeplink.png',
	'deeplink'   => 'do=my_menu&id=1',
	'search'     => 'do=my_menu&table=tl_my_table&id=1',
	'deepsearch' => true,
	'priority'   => 10,
);

$GLOBALS['BE_MOD']['my_module']['my_menu'] = array(
	'tables'     => array('tl_my_table', 'tl_my_sub_table'),
	'icon'       => 'system/modules/my_module/assets/images/my_menu.png',
);

如您在my_deeplink菜单项中看到的,deeplink属性定义了深链接的查询字符串。如果您点击菜单项,将被重定向到/contao/main.php?<?= $GLOBALS['BE_MOD']['my_module']['my_deeplink']['deeplink']; ?>

search属性是必需的,以便在菜单中找到正确的深链接。如果没有定义search属性,则使用deeplink属性。来自search的参数将与GET参数匹配。如果所有参数都匹配,则深链接应处于活动状态。

提示:在此处,table参数是特殊的,如果没有定义$_GET['table'],算法将搜索匹配$_GET['do']参数的菜单项(在上述示例中,它将是$GLOBALS['BE_MOD']['my_module']['my_menu'])并使用第一个表(tl_my_table)作为$_GET['table']参数的替代。

希望您现在可以明白为什么deeplinksearch之间有区别。search通常仅在deeplink不包含table参数时才需要。

deepsearch属性告诉算法从子表搜索到顶级表。这意味着,如果表tl_my_sub_tabletl_my_table的子表,则算法将遍历父-子表中的记录,直到找到在search中定义的表或没有更多父表定义。深度搜索需要在DCA中正确定义ptable/ctable。目前DC_Table是唯一受支持的数据容器类型。

默认情况下,deepsearch启用的!

priority属性让您在多个竞争的深链接中控制匹配优先级。默认情况下,算法将上下遍历菜单项,并在第一个匹配的菜单项处中断。但是,如果您有两个竞争项,一个“更深”的项位于较浅的项下方,较浅的项可能显示为活动状态,即使较深的项匹配“更好”。

$GLOBALS['BE_MOD']['my_module']['my_deeplink'] = array(
	'icon'       => 'system/modules/my_module/assets/images/my_deeplink.png',
	'deeplink'   => 'do=my_menu&id=1',
	'search'     => 'do=my_menu&table=tl_my_table&id=1',
	'priority'   => 10,
);
$GLOBALS['BE_MOD']['my_module']['my_deeplink_edit'] = array(
	'icon'       => 'system/modules/my_module/assets/images/my_deeplink.png',
	'deeplink'   => 'do=my_menu&act=edit&id=1',
	'search'     => 'do=my_menu&act=edit&table=tl_my_table&id=1',
	'priority'   => 11,
);

在此示例中,my_deeplinkmy_deeplink_edit将在URL main.php?do=my_menu&id=1&act=edit上匹配。但my_deeplink_edit的优先级更高,因此即使my_deeplink匹配搜索并且是第一个匹配项,my_deeplink_edit也将被视为活动状态。

默认情况下,priority设置为10

动态深链接

深链接只有在动态创建时才有意义。为此,您可以使用在早期系统初始化状态中分发的deeplinks-create事件。

要监听此事件,请在您的config.php中添加以下内容:

$GLOBALS['TL_EVENTS']['deeplinks-create'][] = array('MyClass', 'eventShortcutsCreate');

然后创建一个名为MyClass的类

class MyClass
{
	static public function eventShortcutsCreate()
	{
		$database = \Database::getInstance();

		// fetch items from database and create
		// the items in $GLOBALS['BE_MOD'] dynamically
	}
}

提示:无需使用 deeplinks-create。您可以在任何需要的时候定义 $GLOBALS['BE_MOD'] 中的项目。但如果您在 deeplinks-create 事件之后创建项目,则需要自行定义回调函数!

$GLOBALS['BE_MOD']['my_module']['my_deeplink'] = array(
	...
	'callback' => 'Bit3\Contao\Deeplinks\Deeplinks',
);

对于在 deeplinks-create 事件之前定义的所有项目,回调函数将动态添加。