メモ r1190 MYNETS_url_helper.php

MyNETS2

MYNETS_url_helper.phpをr1190へ更新。
ちょいエラーが出るので、331行目を修正

function auto_link_callback($matches)

↓TRUEでも良かったとは思うんだけど、全部ポップアップはめんどくさいので。

function auto_link_callback($matches,$popup=FALSE)

追記:2009.08.22

http://usagi-project.org/redmine/repositories/diff/mynets2?rev=1195

preg_replace_callback でコールバック関数に $popup を渡せないのでということで、Class化されたらしい。
class Auto_link になってた。
後でファイルを入れ替えておこう。
・・・・テスト書かないとだめだなぁやっぱり(><)

メモ MyNETS2 モジュールの情報を取得

MyNETS2

とりあえずメモ。
モジュール名とか、知りたい時は$this->matchbox;をつつくと良い気がする。

var_dump($this->matchbox);

モジュール名htmlの場合での結果。

object(CI_Matchbox)[6]
  public '_callers' => 
    array
      0 => string 'Loader' (length=6)
      1 => string 'Matchbox' (length=8)
      2 => string 'MY_Config' (length=9)
      3 => string 'MY_Language' (length=11)
      4 => string 'Parser' (length=6)
  public '_directories' => 
    array
      0 => string 'modules' (length=7)
  public '_directory' => string 'modules/' (length=8)
  public '_module' => string 'html/' (length=5)

追記2009.09.10
__FUNCTION__ で現在実行しているメソッド名を取得できる・・・・メモ〆(。。)

[メモ]MyNETS2で開発。

MyNETS2

まずはSKINまわりから。

今搭載されてる構造を変更。
ベースとなるCSSファイル+画像ファイルをdefaultとして設置する。
モジュールごとにCSSファイルを設置

モジュールのCSSファイルに、ベースとなるCSSを読み込ませて基本となるCSSの設定にする。
テーマごとに、フォルダを切り替えたりなんてことも考えたんだけど、
ZIPファイルでテーマファイルを別の場所に保存しておいて、/theme/になるように展開したり、
管理機能からCSSを編集したり、フォルダごとzipに固めてバックアップをとったりできるとよさげだなと思ったので、/theme/以下に1テーマってことにしてみる。

基本SKIN

/theme/default/main.css
/theme/default/css/xxxx.css
/theme/default/images/xxxxx.jpg

モジュール別のスキン

/theme/{モジュール名}/css/main.css
/theme/{モジュール名}/css/xxx.css
/theme/{モジュール名}/images/xxxx.jpg

/theme/{モジュール名}/css/main.cssの中身はこんな感じ

@charset "utf-8";
/* CSS Document */

/*基本CSSを取得
--------------------------------*/
@import url("../default/main.css");

…以下cssフォルダの中のパーツ分けしたCSSファイルを順次import
1モジュール毎にCSSを設定。
基本となるSKINの情報はdefaultから取得する

共通部品のjavascript、javascriptライブラリ等

/shared/js/xxxx.js等
/shared/js/{ライブラリ名}/パーツ

ざっくりとしたCSS用の図
css1.jpg

testing

ヘッダフッタおよび基本的な部分の設定をして、とりあえずの作業を終了。
kunitsujiさんからコーディング規約の資料を教えていただいたので、コーディング規約に沿うように、コードを整頓。
そろそろ個人用のナンデモSVNからMyNETS2用のSVNに独立させるべきかな・・・・・

メモ:

  • MyNETS2 r766がベース。
  • 一応3カラムの構造も用意したが、2カラムが良さそう。
  • bbsとdiaryはまだ入れ物だけのようなので削除
  • 携帯ページと同時にすすめていきたいので、Viewの書き方、controllerの書き方を模索
  • 会員の新規登録あたりを充実させる
  • どの程度の粒度でモジュールにするか、コントローラで分けるかを考える

[メモ]今日のMyNETS2でCIUnit

MyNETS2

modules以下のmodel,library,helperのテストが、CIUnitでできるようになりました。
modules以下のControllerとviewはまだphpunitが実行できる状態にまで辿りつけていません。

adminモジュールのModel_adminで、少しはまりました。

$this->_user_id = $this->CI->session->userdata('user_id');

の処理を通過させるために、setUp()の中で、次のコードの記入が必要でした。

adminモジュールのModel_adminの31行目
$this->CI->session->userdata(‘user_id’);で、user_idを渡している箇所のために、記載。
ひょっとしたらsessionではなく違うカタチでuser_idを渡せれば、もっと良いのかも。

$this->CI->load->file(APPPATH.'libraries/session/MYNETS_Session.php');
$this->CI->session = new MYNETS_Session;

実行をすると次のように表示されます。
Warningは出ますが、テストは実行できます。

$ phpunit testSomeModel.php 

PHPUnit 3.3.16 by Sebastian Bergmann.

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  Cannot modify header information - headers already sent by (output started at /usr/share/pear/PHPUnit/Util/Printer.php:168)</p>
<p>Filename: libraries/Session.php</p>
<p>Line Number: 663</p>

</div>.

Time: 0 seconds

OK (1 test, 0 assertions)

追記:2009.06.12 3:19
modules以下のcontrollerはとりあえず諦めようかなという気分です。
APPPATH.controller/以下のcontrotterもOUTPUTがあるかどうかのテストだけみたいだし・・・(言い訳)

modulesのmodelのテストで、

$this->_user_id = $this->CI->session->userdata('user_id');

が使われている場合の処理について、前回のやり方だと、AllTests.phpの実行時にエラーが発生するので、次のように修正。

if(!isset($this->CI->session)){
    $this->CI->load->file(APPPATH.'libraries/session/MYNETS_Session.php');
    $this->CI->session = new MYNETS_Session;
}
$this->CI->session->userdata('1');

なんだかもう少しな気がしてきたよ。

現状のMyNETS2でCIUnit

MyNETS2

今現在の状況で言えば、
modules以下の本当にテストをしたい箇所がテストが出来ませんが、
動くところまでもっていくことができました。

ただ、MyNETS2のコードを書き換えての対応なので、
あまりよくない対応です。

Loader.phpのモバイルかどうかを判定して、
モバイル用のviewファイルがあれば、
そっちをとりにいく処理を
コメントアウトして動かしてます・・・・orz

あきらめずにコードを追いたいと思います。

追記:2009.06.07
CodeIgniterの話題とMyNETS2(アプリケーションプラットフォーム)との話題の差がわかりにくいので画像を作成してみました。MyNETS2の話題に関してはしばらくこれを使おうかなと思います。

さらに追記:2009.06.07 17:36
コメントアウトした部分は、携帯からのアクセスの場合、携帯用のviewフォルダにファイルがあればそっちを読むべし的な処理部分でした。1つのコントローラが、件数の表示を切り替えるにしても同じコントローラを使う場合使わない場合もありそうなので、コメントアウトのままでもいいかもしれないと思い始めています。・・・・でもやっぱりあったほうがいいのかなぁ・・・・(汗)

メモ

MyNETS2
管理者のログインとか認証関連
元のがよくわからなかったので、作っちゃう事に。

管理用テーブルを作成

 

CREATE TABLE <code>admin</code> (
<code>id</code> INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
<code>user_id</code> INT( 11 ) NOT NULL ,
<code>level</code> INT( 1 ) NOT NULL ,
<code>create</code> TIMESTAMP NOT NULL ,
<code>update</code> TIMESTAMP NOT NULL
) TYPE = MYISAM ;

levelは権限レベル 1はALL 0は無効
数字が増えて行くにつれて、アクセスできる箇所を減らして見ようかなと思ってる。
とりあえずは有効無効設定的に使用

こんな感じでjoinさせて検索しちゃえばいいかなと。
管理ユーザ専用のID,PASSを保存するテーブルをとも思ったけども
モジュール別に管理権限とかつけたくなるかもしれないし。
管理者名は別にあってもいいかもしれない。
後からカラムを追加してみよう・・・・〆(。。)

joinだとこんな感じになるかな・・・・〆(。。)

$this->db->select('*');
$this->db->from('user');
$this->db->join('admin', 'admin.user_id = user.user_id);
$this->db->where('user_id, $user_id); 
$this->db->where('level', 1); 
$query = $this->db->get();

1.6.3のユーザーガイド(MyNETS2は1.7ベースらしい)
http://codeigniter.jp/user_guide_ja/database/active_record.html

whereの指定は、「4. 自由に指定できる文字列を使用する方法」の書き方の方が好みなので、こっち採用〆(。。)

4. 自由に指定できる文字列を使用する方法:

WHERE句の中身を自分で書くこともできます:
$where = “name=’Joe’ AND status=’boss’ OR status=’active'”;

$this->db->where($where);

adminモジュールを書き換えちゃうのもあれなので、
nekogetモジュールを作成
主な役割は会員管理
ここでは、adminテーブルは使わない、会員(user)の管理を行う
機能はきっとこれぐらいあればきっと大丈夫・・・・〆(。。)

  • 会員一覧(新着)
  • 会員一覧(登録順)
  • 会員検索(簡易検索)
  • 会員検索(詳細検索)
  • 会員情報の詳細表示
  • 会員情報の修正
  • 会員情報の削除
  • 会員プロフィール情報の項目管理(登録、修正、削除)

スキン関連のフォルダ構成の変更

  • /theme/default/cssファイル
  • /theme/default/image/imageファイル
  • /theme/nekoget/cssファイル
  • /theme/nekoget/image/imageファイル

モジュール名/main.css の頭で、default/main.cssを読み込む。
モジュール名/main.cssはdefault/main.cssでたりない設定を追記していく
もしくはdefaultの設定を読み込まず、単独の設定を作るベースのCSSファイル
フォルダもしくはファイルで分けて、表示画面別のCSS、Controllerが制御するもの別のCSSファイルを個別に呼び出せるようにする。
この部分はControllerでの制御は避けて、View側で対応させたいな
・・・・〆(。。)備忘録的にメモ

  • View側の開発担当者とロジック(Controllerとかmodelとか)の開発担当者で、見るべき触るべきファイルを分けたい
  • 機能ごとをモジュールで分ける事で、分業を簡単に&設置、除去を簡単にする
  • CSSファイルを表示画面別に後から追記できるようにしておけば、急なデザイン変更にも対応しやすいし、単独のページでしか使わない設定を全ページで読み込ませる必要が無くなる
  • モジュール別のスキンテーマをさくさく変更できると嬉しい・・・デェフォルトとモジュール別のCSSの着脱や入れ替えを簡単にしたい

モジュールの中に、MyNETS2のバージョンとベースのCodeigniterのバージョン番号の情報をどこかに保存しておかないと、
モジュールだけを作ったり、設置したり、外したり、配ったりするのに困りそうだ。
どこかに情報を書き込んでおこう〆(。。)

続きはまた夜にでも勉強しつつやってみる予定。

〆(。。)トランザクション処理
http://codeigniter.jp/user_guide_ja/database/transactions.html