2016-09-30 76 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