2016-09-30 75 views
0

我试图从api的朋友的wordpress中获取CMS页面内容。 这工作得很好,我可以用CSS自定义内容。Prestashop cms页面json内容

,但我知道你不应该插入内部控制HTML,有没有办法做到.tpl文件这里面,然后调用的标题和内容 OR 甚至更​​好,如果你能在某种程度上得到这个内容管理,以及,但我认为这是不可能的?

但是,其他cms页面应该正常工作。

我目前CmsController.php内部功能initContent:

 if($this->cms->meta_title == 'mycmspage') 
     { 
      $ch = curl_init(); 
      $timeout = 5; 
      $url = 'http://friendurl.com/wp-json/wp/v2/pages/xxx'; 
      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
      $data = curl_exec($ch); 
      curl_close($ch); 

      $obj = json_decode($data, TRUE); 
      $this->cms->content = '<h2 class="myheader">'.$obj['title']['rendered'].'</h2><article class="myarticle">'. $obj['content']['rendered'].'</article>'; 
     } 

使用的Prestashop 1.6.1

回答

1

是的,你可以设置智者变量并获得模板内容。

$obj = json_decode($data, TRUE); 
$this->context->smarty->assign(array(
    'mycms_title' => $obj['title']['rendered'], 
    'mycms_content' => $obj['content']['rendered'] 
)); 
$this->cms->content = $this->context->smarty->fetch('path_to_your_tpl_file'); 

这样的事情也可以通过管理员控制器来实现。取决于你所在的管理页面的类型(列表,查看,添加,编辑等),但默认情况下它是一种列表。因此,您可以覆盖renderList()方法来显示它。

AdminYourModController extends ModuleAdminController { 
    public function renderList() { 
     // your curl code 
     $obj = json_decode($data, TRUE); 
     $this->context->smarty->assign(array(
      'mycms_title' => $obj['title']['rendered'], 
      'mycms_content' => $obj['content']['rendered'] 
     )); 

     return $this->context->smarty->fetch('path_to_your_tpl_file'); 
    } 
} 
+0

我曾文件CmsController.php覆盖/控制器/正面/与代码你的建议,'类CmsControllerCoreOverride扩展CmsControllerCore {'但somewhy它只是从控制器文件夹中加载原始CmsController.php刚刚工作正常...?我不确定这是否是覆盖更广泛的问题,但? – Diamonte

+0

有错误PHP致命错误:没有找到'CmsControllerCore'类。 – Diamonte

+0

另外,是否有任何其他“更静态”的方式来识别代码中的cmspage比'if($ this-> cms-> meta_title =='mycmspage') '。 meta_title可以被更改 – Diamonte