Prestashop 快速地址链接到外部 URL
Prestashop Quick Address Links to external URL
我在 prestashop 上将自定义 url 添加到 quick address
时遇到了一个小问题。
prestashop 的当前状态是 1.7.4.2
全新安装。
如上图所述,我想将其重定向到外部 URL http://www.google.com
,创建完成后,它显示在快速地址菜单中,如下所示:
但是当我点击它时,只是重定向到:
http://localhost:8080/prestashop_1.7.4.2/admin067c8ousl/index.php/http://www.google.com
注意我已经删除了令牌,因为它提供了相同的结果
换句话说,令牌是自己生成的,每次都不同
我在 here 中看到了该特定问题的原始文档。
当您在最底部看到时,它显示了我面临的确切问题:
Note that you can create links to other websites, for instance your PayPal account or your webmail. Simply paste the complete URL in the "URL" field, including the http:// prefix.
正如我写的正确url,但它仍然认为它是一个控制器。
我还没有修改任何代码,有没有办法修复它。
谢谢你,祝你有愉快的一天。
那是针对 v1.6 的,v1.7 默认不允许外部 url。我为此提交了改进,希望他们批准合并。同时,如果你想使用它们,你可以修改 classes/QuickAccess.php
或添加到覆盖(更好的选择)并将函数 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;
}
覆盖不是一个干净的解决方案。
您可以使用免费模块将 jquery 添加到您的 "admin header hook" 并通过 jquery 更改新创建的 quickAccess
的 URL
我在 prestashop 上将自定义 url 添加到 quick address
时遇到了一个小问题。
prestashop 的当前状态是 1.7.4.2
全新安装。
如上图所述,我想将其重定向到外部 URL http://www.google.com
,创建完成后,它显示在快速地址菜单中,如下所示:
但是当我点击它时,只是重定向到:
http://localhost:8080/prestashop_1.7.4.2/admin067c8ousl/index.php/http://www.google.com
注意我已经删除了令牌,因为它提供了相同的结果
换句话说,令牌是自己生成的,每次都不同
我在 here 中看到了该特定问题的原始文档。
当您在最底部看到时,它显示了我面临的确切问题:
Note that you can create links to other websites, for instance your PayPal account or your webmail. Simply paste the complete URL in the "URL" field, including the http:// prefix.
正如我写的正确url,但它仍然认为它是一个控制器。
我还没有修改任何代码,有没有办法修复它。
谢谢你,祝你有愉快的一天。
那是针对 v1.6 的,v1.7 默认不允许外部 url。我为此提交了改进,希望他们批准合并。同时,如果你想使用它们,你可以修改 classes/QuickAccess.php
或添加到覆盖(更好的选择)并将函数 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;
}
覆盖不是一个干净的解决方案。
您可以使用免费模块将 jquery 添加到您的 "admin header hook" 并通过 jquery 更改新创建的 quickAccess
的 URL