bit3 / contao-deeplinks
在后台菜单中创建您Contao模块的深链接。
Requires
- php: >=5.3
- bit3/contao-dependency-container: ~1.3
- bit3/contao-event-dispatcher: ~1
- contao-community-alliance/composer-installer: *
- contao/core: >=2.11,<3.2
Requires (Dev)
This package is not auto-updated.
Last update: 2022-02-01 12:27:32 UTC
README
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']
参数的替代。
希望您现在可以明白为什么deeplink
和search
之间有区别。search
通常仅在deeplink
不包含table
参数时才需要。
deepsearch
属性告诉算法从子表搜索到顶级表。这意味着,如果表tl_my_sub_table
是tl_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_deeplink
和my_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
事件之前定义的所有项目,回调函数将动态添加。