ホーム > フォーラム > 開発 > モジュール開発 > xoopsCube + CakePHP

xoopsCube + CakePHP
投稿者: wf9a5m75 | 投稿日時: 2008/6/8 13:54 | 閲覧: 20492回
wf9a5m75
xoopsCubeのモジュールを開発する際に、もっと楽な方法がないかなということで、PHPフレームワークの「CakePHP」を使ってみました。

都合よく「xoopsCube + CakePHP」の方法がすでに公開されていたので、それをベースに方法を紹介します。

■cakePHP
http://www.cakephp.org/

■CakePHPを使いたくなる5つの特徴
http://gihyo.jp/dev/serial/01/cakephp/0001

CakePHPをダウンロード
 今回利用したのは「1.2.x.x_07.06.2008」です。

▲◆璽イブを解凍後、以下のファイルにそれぞれ修正を加えます。
全角空白でインデントを表現しているので、コピー&ペースト時には気をつけてください

 【.htaccess】
   以下のように書き換えます。
   -------------------------------------------
   
     RewriteEngine on
    
     RewriteCond %{REQUEST_FILENAME} -f
     RewriteRule ^(.*)$ $1 [L]
    
     RewriteCond %{REQUEST_FILENAME} -d
     RewriteRule ^(.*)$ $1 [L]
    
     RewriteRule  ^$ app/webroot/  [L]
     RewriteRule  (.*) app/webroot/$1 [L]
   
   -------------------------------------------

 【app/webroot/index.php】
   PHPコードの最初に以下を追加
   ※if (!defined('DS')) {…}より前
   -------------------------------------------
   $cp_footer=false;
   include_once realpath(dirname(__FILE__).'/../../../../mainfile.php');
   if(strpos($_SERVER['REQUEST_URI'],"xoopsAdmins")){
     $cp_footer=true;
     include_once XOOPS_ROOT_PATH.'/include/cp_header.php';
     include_once XOOPS_ROOT_PATH.'/class/template.php' ;
     xoops_cp_header();
   }else{
     require_once( XOOPS_ROOT_PATH.'/mainfile.php' );
     include XOOPS_ROOT_PATH."/header.php";
   }
   -------------------------------------------

   PHPコードの最後に以下を追加
   -------------------------------------------
   if($cp_footer){
       xoops_cp_footer();
   }else{
     include XOOPS_ROOT_PATH."/footer.php";
   }
   -------------------------------------------

 【app/config/core.php】
   以下の箇所をそれぞれ変更
   Configure::write('App.encoding', 'UTF-8');
    ↓
   Configure::write('App.encoding', 'EUC-JP');

   Cache::config('default', array('engine' => 'File'));
    ↓
   Cache::config('default',array(
   'engine' => 'File',
   'path' => XOOPS_ROOT_PATH . '/cache',
   'prefix' => 'cake_'
   ));

   Configure::write('Security.salt', 'DYhG9…9mi');
    ↓
   Configure::write('Security.salt', XOOPS_SALT);

 【cake/libs/view/layouts/default.ctp】
  ファイル内容を以下に書き換える
   -------------------------------------------
      global $xoopsTpl;
   $xoopsTpl->assign('xoops_module_header', $html->css('cake.generic') . $scripts_for_layout);
   if ($session->check('Message.flash')):
     $session->flash();
   endif;
   echo $content_for_layout;
   echo $cakeDebug;
   ?>
   -------------------------------------------


 【cake/libs/cache/file.php】
  以下をコメントアウト
   $this->settings['path'] = $this->__File->Folder->cd($this->settings['path']);
    ↓
   //$this->settings['path'] = $this->__File->Folder->cd($this->settings['path']);


4浜画面用のMVCを作ります。
 【app/models/】
   ・xoops_admin.phpを作成
   -------------------------------------------
      class XoopsAdmin extends AppModel{
     var $name ="XoopsAdmin";
     var $useTable = false; //don't use DB
   }
   ?>
   -------------------------------------------

 【app/controllers/】
   ・xoops_admins_controller.phpを作成
    コードは以下の通り。
   -------------------------------------------
      class XoopsAdminsController extends AppController{
     var $name="XoopsAdmins";
     function index(){
       $this->set("message", "Hello CakePHP in xoopsCube(CP版)");
     }
   }
   ?>
   -------------------------------------------

 【app/views/】
   ・xoops_admins/index.ctpを作成
    コードは以下の通り。
   -------------------------------------------
   

Hello World!!


   


   -------------------------------------------


xoopsVesion.phpを作成します
  コードは以下の通り。
  --------------------------------------------
      $modversion['name'] = "cakePHP_xoops;
    $modversion['dirname'] = "cakePHP_xoops";
    $modversion['description'] = "cakePHP_xoops description";
    $modversion['version'] = "1.0";
    $modversion['credits'] = "";
    $modversion['author'] = ";
    $modversion['help'] = "";
    $modversion['license'] = "";
    $modversion['official'] = 0;
    $modversion['image'] = "img/logo.gif";
  
    //Admin things
    $modversion['hasAdmin'] = 1;
    $modversion['adminindex'] = "xoopsAdmins/index";
    
    //Main Menu
    $modversion['hasMain'] = 1;
    $modversion['sub'][1]['name'] = "メニュー" ;
    $modversion['sub'][1]['url'] = "index.php";
  ?>
  --------------------------------------------

※img/logo.gifは必要に応じて、適当に用意してください

・〜・〜・〜・〜・〜・〜・〜・〜・〜・〜・〜・〜・〜・〜・

これでxoopsCubeの管理画面からインストールできるはずです。
興味のある方は試してみてください。

コメント(4)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: xoopsCube + CakePHP 
投稿者: tohokuaiki | 投稿日時: 2008/6/8 23:54
tohokuaiki
いいですね。私はXOOPSではEthna使っていますが、F.Wなしだと途端にやる気がそがれますよね。(XOOPSCube Legacyだと、minahitoさんのF.Wも選択肢に入るけど)


ただ、moduleの権限が大きいXOOPSの作りだと、F.Wを持ってしまうと他のアプリに思わぬところで影響が出たりします。私もHDでそれを痛感したりしてます。Ethnaは割とlight-weightというか小さめのF.Wなんで影響は少ないんですが。


このあたりとかでも、cake + XOOPS って挑戦されていますね。

ただ、いまいちXOOPS2時代のコードで、XOOPSCube時代の書き方ではないですね。互換性が高いのはXOOPS2時代のコードの方なのですが、今更XOOPS2時代の遺産を使って・・・と言うものでもない気がします。cakePHP使うっていう方針ならなおさら。

あと、実はF.W使ってて「あー」って思うのはXOOPS検索とブロック表示の処理だったり。この辺で同じmodelを使えないでSQL直が気してるとF.W使う意味なーいって感じになってしまいますので。


あと、この手の話題はXDGJXUGJの方がレスポンスが良いかもしれません。
Re: xoopsCube + CakePHP 
投稿者: onokazu | 投稿日時: 2008/6/9 12:46
onokazu
XOOPS CubeとCakePHPに関してはxoopscube.orgでも挙っていますね。

http://xoopscube.org/modules/xhnewbb/viewtopic.php?topic_id=582&viewmode=flat

Re: xoopsCube + CakePHP 
投稿者: onokazu | 投稿日時: 2008/6/9 13:05
onokazu
引用:

tohokuaikiさんは書きました:

あと、実はF.W使ってて「あー」って思うのはXOOPS検索とブロック表示の処理だったり。


私もフレームワーク使っていますけど、これはあまり感じたことないですね。確かにメイン部分と同じ初期化シーケンスをブロック毎に読み込むことに少し抵抗を感じることはありますが、ブロックや検索部分は独立アプリをXOOPS仕様に合わせるためのものだと思って割り切っています。ブロックや検索部分は一番最後に書くものだと思いますし。。
補足: DB文字化け対策 
投稿者: wf9a5m75 | 投稿日時: 2008/6/11 0:56
wf9a5m75
補足です。

controllerでfindAll() などでDBに接続した際に文字化けする際には、database.phpのDATABASE_CONFIGクラスで、"encoding"=>"UJIS"を指定してあげてください


class DATABASE_CONFIG {
 var $default = array(
  'driver' => XOOPS_DB_TYPE,
  'persistent' => false,
  'host' => XOOPS_DB_HOST,
  'login' => XOOPS_DB_USER,
  'password' => XOOPS_DB_PASS,
  'encoding' => 'UJIS',
  'database' => XOOPS_DB_NAME,
  'prefix' => _XOOPS_DB_PREFIX
 );
}

    投票(0)

    新しいものから | 古いものから | RSS feed
     
    To Top