0

我创建了 3 个自定义页面(控制器、php 和 tpl 文件)并为 SEO 和 URL 创建了条目。目前所有自定义页面都是重复的,并显示相同的内容。

我在 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,我根本不知道问题可能是什么。

正常工作的 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

有谁知道问题可能是什么?

4

1 回答 1

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 '&amp;' => '%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;
    }

我很确定这里就是这种情况,这意味着当前语言的路由配置不正确。

于 2013-01-16T22:37:15.227 回答