トップページ > オープンソース アーカイブ
オープンソース アーカイブ
Zen Cart 管理者機能の設定内容
- 2010-03-31 (水)
- Zen Cart
管理者機能の管理者機能の設定内容は、TABLE_CONFIGURATION で定義されたテーブルに格納されます。
1. 例えば、配送方法に関するモジュールをインストールした場合には、
configuration_key = ‘MODULE_SHIPPING_INSTALLED’
のレコードにモジュールファイル名がセミコロン区切りで設定されています。
2. モジュール固有の設定項目も同じテーブルに追加されます。各モジュールが持つ設定項目のキーは、モジュールクラスの keys メソッドで取得することができます。
- コメント (Close): 0
- トラックバック(Close): 0
Zen Cart 管理者機能の追加
- 2010-03-31 (水)
- Zen Cart
Zen Cart に管理者機能を追加する際のファイルの配置は以下の通りです。以下は、ext_customers での例になります。
1. 機能の本体(リクエストされるファイル)
admin/ext_customers.php
2. プログラム本体から直接 include するPHPファイル、及び css、js、画像
admin/ext_customers/
PHP ファイルは、外部から参照されては困るため、ディレクトリ内に次の内容で .htaccess を配置します。
<Files *.php> Order Deny,Allow Deny from all Allow from localhost </Files>
3. プログラムが利用する関数の定義
admin/include/functions/extra_functions/ext_customers.php
- コメント (Close): 0
- トラックバック(Close): 0
Zen Cart 管理者サブメニュー追加
- 2010-03-31 (水)
- Zen Cart
Zen Cartのカスタマイズ案件を引き受けた際に、ファイル配置について意外と悩みましたので、今後のためにメモしておきます。
拡張のサブメニューを作成するなら、
admin/includes/boxes/extra_boxes/
にファイルを追加します。
ファイル名の規則は次の通り。
(機能名)_(メインメニュー名)_dhtml.php
メインメニュー名のところに指定したメニューのサブメニューとして自動で追加されます。
ファイルに記載する内容は、同一ディレクトリ内の
product_music_extras_dhtml.php
が参考になります。
ファイル内に記載する文字列定義は、
admin/includes/languages/(言語)/extra_definitions/
の下に言語ごとに作成することが推奨されます。ファイル名は、機能名と一致させておくと良いです。
言語ごとに定義の必要のない項目(ファイル名など)は、
admin/includes/extra_definitions/
の下に作成することが推奨されます。やはり、ファイル名は、機能名と一致させておくと良いです。
- コメント (Close): 0
- トラックバック(Close): 0
WordPress 2.9.2アップデート
- 2010-03-24 (水)
- WordPress
しばらくホームページのメンテを怠っており、その間にWordPressも随分とバージョンが新しくなっていました。という訳で、本サイトもWordPress 2.9.2日本語版にアップデートしてみました。プラグインのアップデートも合わせて行いました。
見た目上、特に何も変わっていないので、問題なくアップデートが行えたようです。
- コメント (Close): 0
- トラックバック(Close): 0
お知らせをプラグイン化
- 2009-06-09 (火)
- WordPress
WordPress2.7.1のアップデートによって、サイドバーのお知らせの日付表示が機能しなくなっていました。この機能はWordPress本体を修正して実現していたため、アップデートで該当ファイルが上書きされたことが原因でした。
毎回アップデート後にWordPress本体に修正を加えるのは面倒なため、この機能を「最近の投稿(日時あり)」ウィジェットプラグインとして実現することにしました。基本的な機能は、既存の「最近の投稿」ウィジェットと同じで、加えて「日付フォーマット」と「タイトルの前に表示する文字」をウィジェットの管理から設定可能としています。
ダウンロードしたファイルを展開して出来たディレクトリ(widget-recent-entries-with-date)をプラグインディレクトリにコピーし、プラグイン管理から「Recent entries with date widget」を「使用する」で利用可能です。
※本プログラムは、WordPressのウィジェット、プラグインの開発方法の学習用に作成したものです。ご利用時のトラブルの責任は負いかねますので、その点はご了承ください。
- コメント (Close): 0
- トラックバック(Close): 0
WordPress 2.7.1アップデート
- 2009-05-18 (月)
- WordPress
WordPress 2.7.1日本語版がいつの間にかリリースされていましたので、本サイトもアップデートしてみました。とりあえず問題は発生していないようです。
- コメント (Close): 0
- トラックバック(Close): 0
CakePHP 10.2 ACL 開発例の補足
- 2009-02-12 (木)
- CakePHP
CakePHPのオンラインドキュメントには、親切な開発例が2つ掲載されており、基本的な開発手順を学ぶ助けとなります。
しかし、「10.2 ACL を制御するシンプルなアプリケーション」では、手順が若干省略されているために分かりにくい個所がいくつかあります。
ここでは、学習の手助けとなる補足情報を記載しておきます。
10.2.1 アプリケーションの準備
この章では、bakeを利用した各テーブルに対するモデル、コントローラ、ビューの作成手順が省略されています。
以下に、bakeを利用したモデル、コントローラ、ビューの作成手順を記載します。(bakeでappディレクトリの初期設定が行われている事が前提)
1. bakeを起動すると、コマンドの一覧が表示されます。
$ cd (appディレクトリ) $ cake bake Welcome to CakePHP v1.2.1.8004 Console --------------------------------------------------------------- App : (app名) Path: (appディレクトリ) --------------------------------------------------------------- Interactive Bake Shell --------------------------------------------------------------- [ D]atabase Configuration [ M]odel [ V]iew [ C]ontroller [ P]roject [ Q]uit What would you like to Bake? (D/M/V/C/P/Q)
2. モデルを作成するためMを選択すると、データベースの一覧が表示されます。最初にGroupのモデルを作成するために1を選択し、対話形式で設定を行います。
Would you like to supply validation criteria for the fields in your model? (y/n)
でyを選択すると、一部のフィールドでvalidation optionsの選択を要求されますが、全て初期設定のままリターンキーで問題ありません。
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)
はnを選択し、
Cake test suite not installed. Do you want to bake unit test files anyway? (y/n)
はyを選択します。
一通り設定が終わると初期画面に戻りますので、Groupと同様の手順でPost、User、Widgetのモデルを作成していきます。
> M
---------------------------------------------------------------
Bake Model
Path: (appディレクトリ)/models/
---------------------------------------------------------------
Possible Models based on your current database:
1. Group
2. Post
3. User
4. Widget
Enter a number from the list above, type in the name of another model, or 'q' to exit
[q] > 1
Would you like to supply validation criteria for the fields in your model? (y/n)
[y] >
Field: id
Type: integer
---------------------------------------------------------------
Please select one of the following validation options:
---------------------------------------------------------------
1 - alphaNumeric
2 - between
3 - blank
.
.
27 - url
28 - userDefined
29 - Do not do any validation on this field.
... or enter in a valid regex validation string.
[29] >
.
.
Would you like to define model associations (hasMany, hasOne, belongsTo, etc.)? (y/n)
[y] > n
---------------------------------------------------------------
The following Model will be created:
---------------------------------------------------------------
Name: Group
Validation: Array
(
[name] => notempty
)
Associations:
---------------------------------------------------------------
Look okay? (y/n)
[y] > y
Baking model class for Group...
Creating file (appディレクトリ)/models/group.php
Wrote (appディレクトリ)/models/group.php
Cake test suite not installed. Do you want to bake unit test files anyway? (y/n)
[y] >
You can download the Cake test suite from http://cakeforge.org/projects/testsuite/
Baking test fixture for Group...
Creating file (appディレクトリ)/tests/fixtures/group_fixture.php
Wrote (appディレクトリ)/tests/fixtures/group_fixture.php
Baking unit test for Group...
Creating file (appディレクトリ)/tests/cases/models/group.test.php
Wrote (appディレクトリ)/tests/cases/models/group.test.php
3. 次にコントローラを作成するためCを選択します。モデルと同様に、Group、Post、User、Widgetに対して処理を行います。
ほとんどは初期設定のままリターンキーで問題ありませんが、
Would you like to use scaffolding? (y/n)
はnを、
Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n)
はyを選択します。
> C --------------------------------------------------------------- Bake Controller Path: (appディレクトリ)/controllers/ --------------------------------------------------------------- Possible Controllers based on your current database: 1. Groups 2. Posts 3. Users 4. Widgets Enter a number from the list above, type in the name of another controller, or 'q' to exit [q] > 1 --------------------------------------------------------------- Baking GroupsController --------------------------------------------------------------- Would you like to build your controller interactively? (y/n) [y] > Would you like to use scaffolding? (y/n) [n] > n Would you like to include some basic class methods (index(), add(), view(), edit())? (y/n) [n] > y Would you like to create the methods for admin routing? (y/n) [n] > Would you like this controller to use other helpers besides HtmlHelper and FormHelper? (y/n) [n] > Would you like this controller to use any components? (y/n) [n] > Would you like to use Sessions? (y/n) [y] > --------------------------------------------------------------- The following controller will be created: --------------------------------------------------------------- Controller Name: Groups --------------------------------------------------------------- Look okay? (y/n) [y] > Creating file (appディレクトリ)/controllers/groups_controller.php Wrote (appディレクトリ)/controllers/groups_controller.php Cake test suite not installed. Do you want to bake unit test files anyway? (y/n) [y] > You can download the Cake test suite from http://cakeforge.org/projects/testsuite/ Baking unit test for Groups... Creating file (appディレクトリ)/tests/cases/controllers/groups_controller.test.php Wrote (appディレクトリ)/tests/cases/controllers/groups_controller.test.php
4. 最後にビューを作成するためVを選択します。他と同様に、Group、Post、User、Widgetに対して処理を行います。
Would you like to create some scaffolded views (index, add, view, edit) for this controller?
NOTE: Before doing so, you’ll need to create your controller and model classes (including associated models). (y/n)
はyを
Would you like to create the views for admin routing? (y/n)
はnを選択します。
> V --------------------------------------------------------------- Bake View Path: (appディレクトリ)/views/ --------------------------------------------------------------- Possible Controllers based on your current database: 1. Groups 2. Posts 3. Users 4. Widgets Enter a number from the list above, type in the name of another controller, or 'q' to exit [q] > 1 Would you like to create some scaffolded views (index, add, view, edit) for this controller? NOTE: Before doing so, you'll need to create your controller and model classes (including associated models). (y/n) [n] > y Would you like to create the views for admin routing? (y/n) [y] > n Creating file (appディレクトリ)/views/groups/index.ctp Wrote (appディレクトリ)/views/groups/index.ctp Creating file (appディレクトリ)/views/groups/view.ctp Wrote (appディレクトリ)/views/groups/view.ctp Creating file (appディレクトリ)/views/groups/add.ctp Wrote (appディレクトリ)/views/groups/add.ctp Creating file (appディレクトリ)/views/groups/edit.ctp Wrote (appディレクトリ)/views/groups/edit.ctp --------------------------------------------------------------- View Scaffolding Complete.
10.2.4 リクエスタとして振舞う
後半にグループの追加について記載がありますが、こちらはWebブラウザで
http://(アプリケーションURL)/groups/add
にアクセスし、グループを作成することを指しています。
ユーザの追加についても同様で、
http://(アプリケーションURL)/users/add
でユーザを作成することを指しています。Groupの欄には、グループのidを指定します。
10.2.5 ACO の作成
ここでは、controllersという名のトップレベルのACOの作成手順が解説してありますが、作成方法として
・コマンドラインから作成する方法
・プログラムの中にACL作成用のコードを一時的に作成し、一度だけ実行後にコードを削除する方法
の2種類が解説されています。前者の方法を選ぶのが素直に思います。
尚、AuthComponent に根ノードの存在を教えるコードは、AppControllerクラスのbeforeFilter()メソッドの最後に追加します。
function beforeFilter() {
// AuthComponent のコンフィギュレーション
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
$this->Auth->actionPath = 'controllers/';
}
10.2.6 ACO の作成を自動化するツール
ここでは、前ページで作成した controllers ACOの下に、app/controllers ディレクトリ内に準備した全てのコントローラ、及びアクションのACOを自動作成する手順が記載されています。
AppControllerクラスに、buildAcl()メソッドを作成し、beforeFilter()メソッドの最後にbuildAcl()を呼び出すコードを記述するのが素直かと思います。
function beforeFilter() {
// AuthComponent のコンフィギュレーション
$this->Auth->authorize = 'actions';
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'posts', 'action' => 'add');
$this->Auth->actionPath = 'controllers/';
$this->buildAcl();
}
ブラウザで、
http://(アプリケーションURL)/users
等に一回アクセスしACOの作成が確認できたら、AppControllerクラスからbuildAcl()メソッドと、beforeFilter()メソッド内のbuildAcl()の呼び出し行を削除します。
最後にAuthComponentを無効化するコードの除去の記述がありますが、これは、GroupsController、UsersControllerクラスとに追加したbeforeFilter()メソッド内の
$this->Auth->allowedActions = array(‘*’);
の行の削除を指しますが、これは後で行います。
10.2.7 パーミッションの設定
最初にコマンドラインからパーミッションを設定する方法が記載されていますが、これはコマンド利用方法の解説であり、そのまま実行しても機能しません。
ここでも、やはり一時的なコードを使ってパーミッションを設定します。UsersControllerクラスにinitDB()メソッドを追加し、beforeFilter()メソッドの最後にinitDB()の呼び出し行を追加します。
function beforeFilter() {
parent::beforeFilter();
$this->Auth->allowedActions = array('*');
$this->initDB();
}
尚、initDB()メソッドですが、次のように修正しておく必要があります。
function initDB() {
//$group =& $this->User->Group;
App::import('Model', 'Group');
$group = new Group();
// 管理者グループには全てを許可する
$group->id = 1;
$this->Acl->allow($group, 'controllers');
// マネージャグループには posts と widgets に対するアクセスを許可する
$group->id = 2;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Posts');
$this->Acl->allow($group, 'controllers/Widgets');
$this->Acl->allow($group, 'controllers/Users/logout');
// ユーザグループには posts と widgets に対する追加と編集を許可する
$group->id = 3;
$this->Acl->deny($group, 'controllers');
$this->Acl->allow($group, 'controllers/Posts/add');
$this->Acl->allow($group, 'controllers/Posts/edit');
$this->Acl->allow($group, 'controllers/Widgets/add');
$this->Acl->allow($group, 'controllers/Widgets/edit');
$this->Acl->allow($group, 'controllers/Users/logout');
}
先頭部分は、$this->User->GroupがNULLであるためにエラーが発生する問題の対応です。
あと、マネージャグループ、ユーザグループのユーザでログインするとログアウトできない問題があったため、それぞれallowパーミッションを追加しています。
ブラウザで、
http://(アプリケーションURL)/users
等に一回アクセスしパーミッションの作成が確認できたら、UsersControllerクラスからinitDB()メソッドと、beforeFilter()メソッド内のinitDB()の呼び出し行を削除します。併せて、GroupsController、UsersControllerクラスのbeforeFilter()メソッドから
$this->Auth->allowedActions = array(‘*’);
の行を削除します。
function beforeFilter() {
parent::beforeFilter();
//$this->Auth->allowedActions = array('*');
//$this->initDB();
}
- コメント (Close): 0
- トラックバック(Close): 0
MT4のPHPプラグイン
- 2009-01-28 (水)
- MovableType
MT4のプラグイン作成に関する情報は意外と少ないようです。
とりあえず、本家の技術情報提供ブログにMT3.3用のサンプルがありましたので、一通り動作チェックとソースコードの確認をしてみました。
残念なことに、サンプルプログラムには、ダイナミックパブリッシング用のPHPプラグインは含まれていません。こちらの作成方法については、こちらに記載があります。この情報を参考に、ローカライズ技術の解説のサンプルのPHP版を作成してみました。
圧縮ファイルを展開するとMyPlugin03ディレクトリが作成されますので、このディレクトリをpluginsディレクトリの下にコピーします。
後は、公開をダイナミックに設定してあるテンプレートの中で、<$MTWelcome$>を記述すると動作が確認できます。
機能は元のサンプルプラグインと同一となっていますので、ローカライズ技術の解説の方を参照ください。
MT4のPHPプラグインは、smartyのプラグイン機能を利用しているため、smartyに強い方は習得が早そうです。
- コメント (Close): 0
- トラックバック(Close): 0
MT4のカテゴリの一括変更
- 2009-01-21 (水)
- MovableType
身内のブログを移転する際に、MovableTypeを3.35から4.23にバージョンアップしました。
その際に、これまでに別のカテゴリとして登録していた記事を一つに纏めたいという要望があり、その対応を行いました。
各カテゴリに属する記事が少ない場合は、[ブログ記事の管理]で記事の絞り込みを行い、全て選択した上での一括編集ということになるのでしょうが、件数が多い場合にはこの手順ではとてもやってられません。そこで、MovableTypeが利用しているPostgreSQLのデータベースを直接変更することにしました。
事前準備として、ブログIDと変更前、変更後のカテゴリIDを調べておきます。これらの値は、[カテゴリの編集]画面のURLから容易に知ることができます。
例えば、変更前カテゴリのURLが、
http://dummy/mt.cgi?__mode=view&_type=category&blog_id=1&id=10
変更後カテゴリのURLが、
http://dummy/mt.cgi?__mode=view&_type=category&blog_id=1&id=24
の場合、それぞれの値は次の通りとなります。
ブログID:1
変更前カテゴリID:10
変更後カテゴリID:24
後は、psqlやphpPgAdminでデータベースに接続した上で、次のSQLを実行するだけとなります。
UPDATE mt_placement SET placement_category_id = 24 WHERE placement_blog_id = 1 AND placement_category_id = 10;
一度変更してしまったものは容易には元に戻せないため、事前にバックアップを取ったり、ブログIDやカテゴリIDを十分に確認した上で作業を行うことをお勧めします。
- コメント (Close): 0
- トラックバック(Close): 0
psqlとmysql(対話型ターミナル)
- 2009-01-16 (金)
- MySQL | PostgreSQL
これまでは、PostgreSQLを扱う案件が主体でしたが、今後はMySQL案件も増やしていきたいところです。
現状、唐突にMySQLでテーブル定義が見たいと思っても、すぐには手が動かない状態です。これでは困るので、PostgreSQLとMySQLのそれぞれの対話型ターミナルのコマンド対応表を作成しておきます。
対話型ターミナル起動
ユーザ名:www データベース名:dbName ホスト名:hostName
| 起動方法 | PostgreSQL(psql) | MySQL(mysql) |
|---|---|---|
| ユーザ指定のみ | $ psql -U www | $ mysql5 -u www -p Enter password: |
| ユーザとデータベースを指定 | $ psql -U www dbname | $ mysql -u www -p dbname Enter password: |
| ホスト名を指定 | $ psql -h hostname -U www dbname | $ mysql -u www@hostname -p dbname Enter password: |
| ポート番号を指定 | $ psql -p 5432 -U www dbname | $ mysql -P 3306 -u www -p dbname Enter password: |
基本的なコマンド
データベース名:dbName テーブル名:tableName シーケンス名:sequenceName
| 機能 | PostgreSQL(psql) | MySQL(mysql) |
|---|---|---|
| ターミナル終了 | \q | \q |
| ヘルプ表示(コマンド) | \? | \? |
| ヘルプ表示(SQL) | \h | (なし) |
| データベース一覧 | \l | show databases; |
| データベース選択 | \c dbName | use dbName; |
| テーブル一覧 | \dt | show tables; |
| テーブル定義内容表示 | \d tableName インデックス情報もまとめて表示される |
describe tableName; インデックス情報の表示は show index tableName; |
| シーケンス一覧 | \ds | (シーケンスの概念なし) |
| シーケンス定義表示 | \d sequenceName | (シーケンスの概念なし) |
- コメント (Close): 0
- トラックバック(Close): 0
トップページ > オープンソース アーカイブ
-
- 2010年03月31日
・Zen Cart 管理者機能の設定内容 - 2010年03月31日
・Zen Cart 管理者機能の追加 - 2010年03月31日
・Zen Cart 管理者サブメニュー追加 - 2010年03月24日
・WordPress 2.9.2アップデート
- 2010年03月31日
