tabimoba.net

とあるエンジニアの雑記帳

CodeIgniter3でMODx RevolutionのAPIを利用する

はじめに

CodeIgniter3 からMODx RevolutionのAPIを利用する方法についてまとめました。

実装方法

CodeIgniter側において、以下のライブラリファイルを作成します。 なお、MODx Revolution,CodeIgniter3はいずれもインストールされているものとします。

<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$modx_dir = 'modxのインストールディレクトリ/';

require_once $modx_dir . 'config.core.php';
require_once MODX_CORE_PATH.'model/modx/modx.class.php';



class Lib_modx  {

    var $modx;
    
    public function __construct() {
       $this->modx = new modX();
       $this->modx->initialize('web');
       $this->modx->getService('error','error.modError', '', '');
       
    }
}

APIへのアクセス例

MODx上の特定のリソースのコンテンツ(content)を取得する(以下の場合はID=1のリソースを参照する)

class Example extends CI_Controller {
    
    public function index() {
        $this->load->library('lib_modx');
        
        $page = $this->lib_modx->modx->getObject('modResource', 1);
        
        echo $page->get('content');
    }
    
}

ID=1の子リソースのIDを取得する

class Example extends CI_Controller {
    
    public function index() {
        $this->load->library('lib_modx');
        
        var_dump($this->lib_modx->modx->getChildIds(1));
    }
    
}

ID=1の子リソースのオブジェクトを取得して配列で返す

class Example extends CI_Controller {
    
    public function index() {
        $this->load->library('lib_modx');
        
        $query = $this->lib_modx->modx->newQuery('modResource');
        $query->where(array(
            'published' => true,
            'deleted' => false,
            'id' => 1
        ));
        
        $resources = $this->lib_modx->modx->getCollection('modResource',$query);
        
        foreach ($resources as $resource) {
            $resource_array = $resource->toArray();
            $result[] = $resource_array;
        }
        
        var_dump($result);
    }
    
}

参考サイト