如果我想从带有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
);