ブログ - XCL開発資料カテゴリのエントリ
■XCube_LanguageManager
(core/XCube_LanguageManager.class.php)
●メンバ変数
protected mLanguageName
protected mLocaleName
●メソッド
・prepare()
初期化を行う。
・loadGlobalMessageCatalog()
グローバルメッセージカタログを取得する
・loadModuleMessageCatalog($moduleName)
・loadThemeMessageCatalog($themeName)
???
●アクセサ
・setLocale($locale)
・getLocale()
・setLanguage($language)
・getLanguage()
●protected
・getFallbackLanguage()
フォールバック用言語(英語)を得る
■Legacy_LanguageManager
(modules/legacy/kernel/Legacy_LanguageManager.class.php)
●追加メソッド
・loadPageTypeMessageCatalog($type)
・loadModuleAdminMessageCatalog($moduleName)
・loadBlockMessageCatalog($moduleName)
・loadModinfoMessageCatalog($moduleName)
(core/XCube_LanguageManager.class.php)
●メンバ変数
protected mLanguageName
protected mLocaleName
●メソッド
・prepare()
初期化を行う。
・loadGlobalMessageCatalog()
グローバルメッセージカタログを取得する
・loadModuleMessageCatalog($moduleName)
・loadThemeMessageCatalog($themeName)
???
●アクセサ
・setLocale($locale)
・getLocale()
・setLanguage($language)
・getLanguage()
●protected
・getFallbackLanguage()
フォールバック用言語(英語)を得る
■Legacy_LanguageManager
(modules/legacy/kernel/Legacy_LanguageManager.class.php)
●追加メソッド
・loadPageTypeMessageCatalog($type)
・loadModuleAdminMessageCatalog($moduleName)
・loadBlockMessageCatalog($moduleName)
・loadModinfoMessageCatalog($moduleName)
モジュール開発
モジュールのコンフィグ設定の定数名に長い識別子をつけると正しく認識されない。
これはコンフィグ設定を保持している xoops_config テーブルのスキーマ定義が
conf_name は varchar(25)
conf_title は varchar(30)
になっているためである。
そのため定数名として 30文字以上の名前をつけると、一般設定画面でタイトルが表示されなくなる。
スキーマを無理矢理大きくするのが良いかも?
ALTER TABLE xoops_config MODIFY `conf_title` varchar(255) NOT NULL default ''
モジュールのコンフィグ設定の定数名に長い識別子をつけると正しく認識されない。
これはコンフィグ設定を保持している xoops_config テーブルのスキーマ定義が
conf_name は varchar(25)
conf_title は varchar(30)
になっているためである。
そのため定数名として 30文字以上の名前をつけると、一般設定画面でタイトルが表示されなくなる。
スキーマを無理矢理大きくするのが良いかも?
ALTER TABLE xoops_config MODIFY `conf_title` varchar(255) NOT NULL default ''
XoopsObjectはデータにアクセスする際のデータオブジェクトのインスタンスになるクラス
AbstractXoopsObject -> XoopsObject と継承している
・AbstractXoopsObject(純粋抽象クラス)
setNew()
unsetNew()
isNew()
initVar($key, $data_type, $default, $required, $size)
assignVars($values)
set($key, $value)
get($key)
・XoopsObject
フィールド変数を配列としてメンバ変数 vars に保持する。
フィールド変数は以下のプロパティ(実際には連想配列)を持つ
value
required
data_type
maxlength
changed
options
required や maxlength はDBのスキーマと関連する部分だが、このレベルで保持して管理するのが必須のものとは思わないが...
changed は意味は分かるが、cleanVars() で使うのはちょっと...
options はここにあるべきものではないかも...
getVar('show') や getVar('preview') というのもどうかなぁ...
dohtml,doxcode,dosmiley,... などがあるのはすでにUI部分がここに侵略していると言うことで...楽しくない感じ
フィールド変数の種類は以下の通り
XOBJ_DTYPE_STRING
XOBJ_DTYPE_TXTBOX
XOBJ_DTYPE_TEXT
XOBJ_DTYPE_TXTAREA
XOBJ_DTYPE_INT
XOBJ_DTYPE_URL
XOBJ_DTYPE_EMAIL
XOBJ_DTYPE_ARRAY
XOBJ_DTYPE_OTHER
XOBJ_DTYPE_SOURCE
XOBJ_DTYPE_STIME
XOBJ_DTYPE_MTIME
XOBJ_DTYPE_LTIME
XOBJ_DTYPE_FLOAT
XOBJ_DTYPE_BOOL
設計的にはデータ型なのかUI要素なのか分からないような項目 (TEXTBOX, TEXT, TEXTAREA) や 微妙な項目(URL, EMAIL)などがあるのがしっくり来ないところ。
実装的にはフィールド変数の種類が増やせないような実装(オブジェクトではないから...)になっているのが厳しい。
フィールド変数をオブジェクトではなく連想配列で保持しているのはパフォーマンスを考慮してのことだろうか...(もしくは PHP4の頃のオブジェクトの扱い上の問題からか...)
AbstractXoopsObject -> XoopsObject と継承している
・AbstractXoopsObject(純粋抽象クラス)
setNew()
unsetNew()
isNew()
initVar($key, $data_type, $default, $required, $size)
assignVars($values)
set($key, $value)
get($key)
・XoopsObject
フィールド変数を配列としてメンバ変数 vars に保持する。
フィールド変数は以下のプロパティ(実際には連想配列)を持つ
value
required
data_type
maxlength
changed
options
required や maxlength はDBのスキーマと関連する部分だが、このレベルで保持して管理するのが必須のものとは思わないが...
changed は意味は分かるが、cleanVars() で使うのはちょっと...
options はここにあるべきものではないかも...
getVar('show') や getVar('preview') というのもどうかなぁ...
dohtml,doxcode,dosmiley,... などがあるのはすでにUI部分がここに侵略していると言うことで...楽しくない感じ
フィールド変数の種類は以下の通り
XOBJ_DTYPE_STRING
XOBJ_DTYPE_TXTBOX
XOBJ_DTYPE_TEXT
XOBJ_DTYPE_TXTAREA
XOBJ_DTYPE_INT
XOBJ_DTYPE_URL
XOBJ_DTYPE_EMAIL
XOBJ_DTYPE_ARRAY
XOBJ_DTYPE_OTHER
XOBJ_DTYPE_SOURCE
XOBJ_DTYPE_STIME
XOBJ_DTYPE_MTIME
XOBJ_DTYPE_LTIME
XOBJ_DTYPE_FLOAT
XOBJ_DTYPE_BOOL
設計的にはデータ型なのかUI要素なのか分からないような項目 (TEXTBOX, TEXT, TEXTAREA) や 微妙な項目(URL, EMAIL)などがあるのがしっくり来ないところ。
実装的にはフィールド変数の種類が増やせないような実装(オブジェクトではないから...)になっているのが厳しい。
フィールド変数をオブジェクトではなく連想配列で保持しているのはパフォーマンスを考慮してのことだろうか...(もしくは PHP4の頃のオブジェクトの扱い上の問題からか...)
D3 モジュールによる notificationからの続き
■(1) 通知一覧の名称が表示されない問題
notify_func を使わないやり方はシンプルで良いのだが、唯一問題がある。
それは通知一覧を見たときに、item_nameでコンテンツが特定されるコンテンツの名称欄が「無題」となってしまうことだ。
notifications の仕様では not_itemid にコンテンツを特定する ID を保存しておき、それを notify_func に渡してタイトルを取得するようになっているため、notify_func が存在しないと、「無題」と表示されることになる。
表示が「無題」となるのは良いことではないが、altsys が行ってくれる範囲ではこれで仕方がない。
そのうちに何とかしたいものだ。
■(2) 選択イベント更新後の飛び先が...
これはD3モジュールだからという訳ではないのだが
subscribe_from は ファイル名で指定するため
アクションコントローラタイプのモジュールの場合、index.phpだけになってしまう。
そのため、item_name を指定した場合に意図したページに飛ばすことができなくなる。
たとえば、次のようなモジュールの構成の場合。
モジュールトップ index.php
コンテンツ index.php?action=view&pid=12
というようになっていたとして
index.php?pid=12
などのようにリダイレクトされてしまい、モジュールトップが表示されてしまう。
それだけならまだ良いのだが、モジュールトップにもイベント選択機能が付いていると、pid=12 のイベント選択項目も表示されてしまうのだ。
これはどうしたら良いのだろうね...
■(1) 通知一覧の名称が表示されない問題
notify_func を使わないやり方はシンプルで良いのだが、唯一問題がある。
それは通知一覧を見たときに、item_nameでコンテンツが特定されるコンテンツの名称欄が「無題」となってしまうことだ。
notifications の仕様では not_itemid にコンテンツを特定する ID を保存しておき、それを notify_func に渡してタイトルを取得するようになっているため、notify_func が存在しないと、「無題」と表示されることになる。
表示が「無題」となるのは良いことではないが、altsys が行ってくれる範囲ではこれで仕方がない。
そのうちに何とかしたいものだ。
■(2) 選択イベント更新後の飛び先が...
これはD3モジュールだからという訳ではないのだが
subscribe_from は ファイル名で指定するため
アクションコントローラタイプのモジュールの場合、index.phpだけになってしまう。
そのため、item_name を指定した場合に意図したページに飛ばすことができなくなる。
たとえば、次のようなモジュールの構成の場合。
モジュールトップ index.php
コンテンツ index.php?action=view&pid=12
というようになっていたとして
index.php?pid=12
などのようにリダイレクトされてしまい、モジュールトップが表示されてしまう。
それだけならまだ良いのだが、モジュールトップにもイベント選択機能が付いていると、pid=12 のイベント選択項目も表示されてしまうのだ。
これはどうしたら良いのだろうね...
D3モジュールに notification を実装する際の問題点
標準では mail_template を公開側から取得しようとするため、テンプレートが取得できない...
altsys-0.61以上に追加されている D3NotificationHandler を使えばOK
ただ、lookup_func による以下の変数の埋め込みはサポートされていない。
というか
となっているので敢えてなくしているようだ...
おそらく、triggerEventの第4引数に extra_tag を与えればすむことだからか。
そういう訳で、xoops_version.php の $modversion にも lookup_file, lookup_func は不要である。
しかし、これには少し問題がある...
D3 モジュールによる notification (2)へ続く
標準では mail_template を公開側から取得しようとするため、テンプレートが取得できない...
altsys-0.61以上に追加されている D3NotificationHandler を使えばOK
ただ、lookup_func による以下の変数の埋め込みはサポートされていない。
X_ITEM_NAME
X_ITEM_URL
X_ITEM_TYPE
というか
// Add some tag substitutions here
$tags = array();
// {X_ITEM_NAME} {X_ITEM_URL} {X_ITEM_TYPE} from lookup_func are disabled
となっているので敢えてなくしているようだ...
おそらく、triggerEventの第4引数に extra_tag を与えればすむことだからか。
そういう訳で、xoops_version.php の $modversion にも lookup_file, lookup_func は不要である。
しかし、これには少し問題がある...
D3 モジュールによる notification (2)へ続く
■サイト関連
xoops_sitename
サイト名
xoops_slogan
サイト副題
xoops_pagetitle
ページタイトル
■テーマ関連
xoops_theme
テーマ名
xoops_imageurl
テーマurl
xoops_themecss
テーマCSS url
xoops_modulename
xoops_dirname
xoops_isadmin
xoops_banner
xoops_sitename
サイト名
xoops_slogan
サイト副題
xoops_pagetitle
ページタイトル
■テーマ関連
xoops_theme
テーマ名
xoops_imageurl
テーマurl
xoops_themecss
テーマCSS url
xoops_modulename
xoops_dirname
xoops_isadmin
xoops_banner
XCube_Identity, XCube_Principal はともに抽象クラス?
.NETフレームワークに似ている?
.NETフレームワークのロールベースセキュリティモデルについて
■XCube_Identity
ユーザ名と authenticationType を保持するクラス
・XCube_Identity()
コンストラクタ
・setAuthenticationType()
・getAuthenticationType()
・setName()
・getName()
・isAuthenticated()
■XCube_Principal
Principal は Identity を保持している。
・XCube_Principal(XCube_Identity $identity, String[] $roles)
コンストラクタ
Identity と ロール名文字列配列で初期化される
・getIdentity()
XCube_Identity を得る
・isInRole($rolename)
Principal が ロール名で指定されたロールを持っているか?
------------------------------------------------------------
Legacy_Identity と Legacy_GenericPrincipal は XCLでの実装クラス
■Legacy_Identity extends XCube_Identity
XCLでの ログインユーザの Identity
・Legacy_Identity(&$xoopsUser)
コンストラクタ
・getName()
$xoopsUser->get('uname')
・isAuthenticated()
true
■Legacy_AnonymousIdentity
XCLでの 未ログインユーザの Identity
・isAuthenticated()
false
■Legacy_GenericPrincipal extends XCube_Principal
XCLでの Principal
------------------------------------------------------------
isInRole('Site.Administrator')
isInRole('Site.Owner')
isInRole('Site.RegisteredUser')
isInRole('Module.legacy.Admin')
isInRole('Module.user.Admin')
.NETフレームワークに似ている?
.NETフレームワークのロールベースセキュリティモデルについて
■XCube_Identity
ユーザ名と authenticationType を保持するクラス
・XCube_Identity()
コンストラクタ
・setAuthenticationType()
・getAuthenticationType()
・setName()
・getName()
・isAuthenticated()
■XCube_Principal
Principal は Identity を保持している。
・XCube_Principal(XCube_Identity $identity, String[] $roles)
コンストラクタ
Identity と ロール名文字列配列で初期化される
・getIdentity()
XCube_Identity を得る
・isInRole($rolename)
Principal が ロール名で指定されたロールを持っているか?
------------------------------------------------------------
Legacy_Identity と Legacy_GenericPrincipal は XCLでの実装クラス
■Legacy_Identity extends XCube_Identity
XCLでの ログインユーザの Identity
・Legacy_Identity(&$xoopsUser)
コンストラクタ
・getName()
$xoopsUser->get('uname')
・isAuthenticated()
true
■Legacy_AnonymousIdentity
XCLでの 未ログインユーザの Identity
・isAuthenticated()
false
■Legacy_GenericPrincipal extends XCube_Principal
XCLでの Principal
------------------------------------------------------------
isInRole('Site.Administrator')
isInRole('Site.Owner')
isInRole('Site.RegisteredUser')
isInRole('Module.legacy.Admin')
isInRole('Module.user.Admin')
XCL ではレンダリングエンジンに smarty を使用している。
■RenderSystem
XCubeRoot が保持する RenderSystem によってレンダリングが実行される。
■RenderSystem
XCubeRoot が保持する RenderSystem によってレンダリングが実行される。