Luca Reghellin
Luca Reghellin

Reputation: 8115

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

If I want to link to a cms page from a template with smarty, I currently use something like this:

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

But that is going to generate a regular url (with query string), so if I activate pretty urls (url rewrite), it won't work. I analized the Link class but I can't find a way to generate a proper rewritten url. In fact, THERE IS a simple way:

{$link->getCMSLink(4)}

BUT, taking a look into Link::getCMSLink notes, I read that using an ID instead of a CMS object is deprecated. But from a template I don't have the cms object available.

Anyone had the same problem?

Upvotes: 0

Views: 7518

Answers (2)

eliastg
eliastg

Reputation: 589

This is my solution. I recently tested it for Prestashop v1.6 and v1.7

This code utilizes the method getCMSLink of the Link class. It is necessary to know the id_cms of the CMS Page, to create the object model.

$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
);

Upvotes: 1

jave.web
jave.web

Reputation: 15052

I found it really by "let's try if this one works".....

In PS1.6 you can get CMS object like:

$myCMS = new CMS( YOUR_CMS_ID );

If you want to use it in tpl, you have to define it in your controller e.g.:

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

Upvotes: 1

Related Questions