我创建了3个自定义页面(控制器,php和tpl文件),并为SEO和&创建了条目。网址。 所有自定义页面目前都是重复的,并显示相同的内容。
我在blocktopmenu.php中创建了自定义页面的链接:
$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('bHome.php').'">Home</a></li>'.PHP_EOL;
$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('bSamples.php').'">Samples</a></li>'.PHP_EOL;
$this->_menu .= '<li><a href="'.$this->context->link->getPageLink('start.php').'">Test</a></li>'.PHP_EOL;
链接正常,网站显示正确。
我的问题是,只显示了一个页面友好的URL,我不知道问题可能是什么。
正常工作的网址翻译如下:
http://localhost/Shop/index.php?controller=start -> http://localhost/Shop/Test
我的其他两页未翻译:
http://localhost/Shop/index.php?controller=bHome
http://localhost/Shop/index.php?controller=bSamples
有人知道问题可能是什么吗?
答案 0 :(得分:0)
好吧,让我们来看看函数getPageLink:
public function getPageLink($controller, $ssl = false, $id_lang = null, $request = null, $request_url_encode = false)
{
$controller = Tools::strReplaceFirst('.php', '', $controller);
if (!$id_lang)
$id_lang = (int)Context::getContext()->language->id;
if (!is_array($request))
{
// @FIXME html_entity_decode has been added due to '&' => '%3B' ...
$request = html_entity_decode($request);
if ($request_url_encode)
$request = urlencode($request);
parse_str($request, $request);
}
$uri_path = Dispatcher::getInstance()->createUrl($controller, $id_lang, $request);
$url = ($ssl && $this->ssl_enable) ? Tools::getShopDomainSsl(true) : Tools::getShopDomain(true);
$url .= __PS_BASE_URI__.$this->getLangLink($id_lang).ltrim($uri_path, '/');
return $url;
}
它会删除.php
,因为@romainberger建议。但在你的情况下情况并非如此。
接下来,我们将深入研究Dispatcher类中的createUrl。我不打算把它全部粘贴在这里,你也可以自己挖掘,但是:
public function createUrl($route_id, $id_lang = null, array $params = array(), $force_routes = false, $anchor = '')
{
if (!$id_lang)
$id_lang = Context::getContext()->language->id;
if (!isset($this->routes[$id_lang][$route_id]))
{
$query = http_build_query($params, '', '&');
$index_link = $this->use_routes ? '' : 'index.php';
return ($route_id == 'index') ? $index_link.(($query) ? '?'.$query : '') : 'index.php?controller='.$route_id.(($query) ? '&'.$query : '').$anchor;
}
我很确定这是这种情况,这意味着当前语言中的路由配置不正确。