2016-09-30 6 views
0

私は、友人のワードプレスからCMSページコンテンツをapiで取得しようとしています。 これはうまく動作し、私はCSSでコンテンツをカスタマイズすることができます。Prestashop cms page json content

しかし、私はあなたがコントローラ内のhtmlを挿入しないでください知っている、あなたは何とかだけでなく、管理するために、このコンテンツを得ることができるならば、タイトルと内容 OR さらに良くするために呼び出され、このための.tplファイルを実行する方法がありますしかし、私はそれが現在不可能だと思いますか?

しかし、他のcmsページは正常に動作するはずです。

は、私は、関数initContent内CmsController.phpで、現在持っている:

 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>'; 
     } 

はいあなたはSmartyの変数を設定し、テンプレートコンテンツを取得することができます

答えて

1

PrestaShopの1.6.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'); 

adminコントローラでも同様のことが実現できます。管理ページのタイプ(リスト、表示、追加、編集など)によって異なりますが、デフォルトではリストの一種です。したがって、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を{'延びるが、それだけで問題なく動作コントローラフォルダから元CmsController.phpをロードsomewhyをしました...?これがオーバーライドの問題であるかどうかはわかりませんが、 – Diamonte

+0

PHP致命的なエラー:クラス 'CmsControllerCore'が見つかりません.. – Diamonte

+0

また、 'if($ this-> cms-> meta_title == 'mycmspage')よりもコード内のcmspageを識別する他の「より静的な」方法がありますか? '。 meta_titleを変更することができます – Diamonte

関連する問題