【问题标题】:Prestashop cms page json contentPrestashop cms 页面 json 内容
【发布时间】:2017-02-08 20:02:36
【问题描述】:

我正在尝试使用 api 从我朋友的 wordpress 中获取 CMS 页面内容。 这很好用,我可以使用 css 自定义内容。

但我知道你不应该在控制器中插入 html,有没有办法为此执行 .tpl 文件,然后调用该文件作为标题和内容 要么 如果您也能以某种方式将此内容提交给管理员,那就更好了,但我认为目前不可能?

但是,其他 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

【问题讨论】:

    标签: json content-management-system prestashop


    【解决方案1】:

    是的,您可以设置 smarty 变量并获取模板内容。

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

    【讨论】:

    • 我已经使用您建议的代码 class CmsControllerCoreOverride extends CmsControllerCore { 制作了文件 CmsController.php 以覆盖/controllers/front/ 但不知何故它只是从控制器文件夹中加载原始 CmsController.php ,它工作正常。 . ?我不确定这是否是覆盖更广泛的问题,但是?
    • 另外,除了if($this-&gt;cms-&gt;meta_title == 'mycmspage'),还有没有其他“更静态”的方式来识别代码中的 cmspage。 meta_title 可以更改
    • 如果您希望覆盖核心 cms 控制器,您需要声明 CmsController extends CmsControllerCore。要唯一标识cms页面,只能通过ID来实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    相关资源
    最近更新 更多