Php Prestashop指向外部URL的快速地址链接

Php Prestashop指向外部URL的快速地址链接,php,hyperlink,prestashop,prestashop-1.7,Php,Hyperlink,Prestashop,Prestashop 1.7,我在将自定义url添加到快速地址时遇到了一个小问题 prestashop的当前状态为1.7.4.2新安装 如上图所述,我想将其重定向到外部URLhttp://www.google.com,创建完成后,它将显示在快速地址菜单中,如下所示: 但当我点击它时,只需重定向到: http://localhost:8080/prestashop_1.7.4.2/admin067c8ousl/index.php/http://www.google.com 注意我已经删除了令牌,因为它提供了相同的结果 换句话说

我在将自定义url添加到快速地址时遇到了一个小问题

prestashop的当前状态为1.7.4.2新安装

如上图所述,我想将其重定向到外部URLhttp://www.google.com,创建完成后,它将显示在快速地址菜单中,如下所示:

但当我点击它时,只需重定向到: http://localhost:8080/prestashop_1.7.4.2/admin067c8ousl/index.php/http://www.google.com

注意我已经删除了令牌,因为它提供了相同的结果

换句话说,令牌是自生成的,每次都不同

我在中看到了该特定问题的原始文档

当你看到最底部时,它显示了我面临的确切问题:

请注意,您可以创建指向其他网站的链接,例如您的PayPal帐户或您的webmail。只需在URL字段中粘贴完整的URL,包括http://前缀

正如我写的正确的url,但它仍然认为它是一个控制器

我还没有修改任何代码,有没有办法修复它


谢谢您,祝您度过愉快的一天。

这是v1.6版,v1.7版默认不允许使用外部URL。我为此提交了一个改进,希望他们批准合并。同时,如果您想使用它们,可以修改class/QuickAccess.php或添加到override better选项,并将函数getQuickAccessesWithToken更改为以下内容:

public static function getQuickAccessesWithToken($idLang, $idEmployee)
{
    $quickAccess = self::getQuickAccesses($idLang);

    if (empty($quickAccess)) {
        return false;
    }

    $baselink = Context::getContext()->link->getBaseLink();
    foreach ($quickAccess as $index => $quick) {
        if(strpos($quickAccess[$index]['link'], 'http') !== 0 or strpos($quickAccess[$index]['link'], $baselink) === 0){
            if ('../' === $quick['link'] && Shop::getContext() == Shop::CONTEXT_SHOP) {
                $url = Context::getContext()->shop->getBaseURL();
                if (!$url) {
                    unset($quickAccess[$index]);
                    continue;
                }
                $quickAccess[$index]['link'] = $url;
            } else{
                // first, clean url to have a real quickLink
                $quick['link'] = Context::getContext()->link->getQuickLink($quick['link']);
                $tokenString = $idEmployee;

                preg_match('/controller=(.+)(&.+)?$/', $quick['link'], $admin_tab);
                if (isset($admin_tab[1])) {
                    if (strpos($admin_tab[1], '&')) {
                        $admin_tab[1] = substr($admin_tab[1], 0, strpos($admin_tab[1], '&'));
                    }
                    $quick_access[$index]['target'] = $admin_tab[1];

                    $tokenString = $admin_tab[1].(int)Tab::getIdFromClassName($admin_tab[1]).$idEmployee;
                }
                $quickAccess[$index]['link'] = $baselink.basename(_PS_ADMIN_DIR_).'/'.$quick['link'];
                if (false === strpos($quickAccess[$index]['link'], 'token')) {
                    $separator = strpos($quickAccess[$index]['link'], '?') ? '&' : '?';
                    $quickAccess[$index]['link'] .= $separator.'token='.Tools::getAdminToken($tokenString);
                }

            }
        }
    }

    return $quickAccess;
}

覆盖不是一个干净的解决方案


您可以使用free模块将jquery添加到您的管理头钩子中,并通过jquery来更改新创建的quickAccess的URL

是的,最后,询问他们更改它的原因,并且没有为它更新文档。我现在可以访问外部url了,谢谢。