如何在prestashop中从smarty获得正确的cms链接(带有漂亮的url)


How to get a proper cms link (with pretty url) from smarty in prestashop?

如果我想从带有smarty的模板链接到cms页面,我目前使用这样的东西:

{$link->getPageLink('cms',null,null,'id_cms=4')}

但这会生成一个常规 url(带有查询字符串),所以如果我激活漂亮的 url(url 重写),它将无法工作。我分析了 Link 类,但找不到生成正确重写 url 的方法。事实上,有一个简单的方法:

{$link->getCMSLink(4)}

但是,看看Link::getCMSLink笔记,我读到使用ID而不是CMS对象是弃用的。但是从模板中我没有可用的 cms 对象。

有人有同样的问题吗?

我真的是通过"让我们试试这个是否有效"来发现它......

在PS1.6中,您可以获得CMS对象,例如:

$myCMS = new CMS( YOUR_CMS_ID );

如果你想在 tpl 中使用它,你必须在你的控制器中定义它,例如:

$this->context->smarty->assign( "myCMS", $myCMS );
这是我

的解决方案。我最近针对Prestashop v1.6和v1.7对其进行了测试

此代码使用 Link 类的方法 getCMSLink。必须知道 CMS 页面的id_cms,才能创建对象模型。

$link = new Link();
$cmsPageObject = new CMS(
  $id_cms,
  $id_lang
);
// $cmsLink has the URL string.
$cmsLink = $link->getCMSLink(
  $cmsPageObject, 
  null,
  Configuration::get("PS_SSL_ENABLED") === "1", 
  $id_lang,
  null,
  null
);