<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE feed [
      <!ENTITY lt "&#38;#60;">
      <!ENTITY gt "&#62;">
      <!ENTITY amp "&#38;#38;">
      <!ENTITY apos "&#39;">
      <!ENTITY quot "&#34;">
      <!ENTITY nbsp "&#160;">
      <!ENTITY copy "&#169;">
]>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title type="text">ブログ</title>
    <subtitle type="text">XCL Labo-XCL の利用とカスタマイズに関する備忘録</subtitle>
    <updated>2026-05-05T15:26:13+09:00</updated>
    <id>https://xcl.masa-lab.net/modules/d3blog/index.php</id>
    <link rel="alternate" type="text/xhtml" hreflang="ja" href="https://xcl.masa-lab.net/" />
    <link rel="self" type="application/atom+xml" href="https://xcl.masa-lab.net/modules/d3blog/index.php?page=atom" />
    <rights>Copyright &copy; 2008-2018 by MASA Lab.</rights>
    <generator uri="https://xcl.masa-lab.net/">D3BLOG - XOOPS BLOG MODULE</generator>
    <entry>
        <title>LanguageManager</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=146" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=146</id>
        <published>2010-05-18T15:44:24+09:00</published>
        <updated>2010-05-18T15:44:24+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">■XCube_LanguageManager(core/XCube_LanguageManager.class.php)●メンバ変数protected mLanguageNameprotected mLocaleName●メソッド・prepare()初期化を行う。・loadGlobalMessageCatalog()グローバルメッセージカタログを取得...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>■XCube_LanguageManager<br />(core/XCube_LanguageManager.class.php)<br /><br />●メンバ変数<br />protected mLanguageName<br />protected mLocaleName<br /><br />●メソッド<br />・prepare()<br />初期化を行う。<br /><br />・loadGlobalMessageCatalog()<br />グローバルメッセージカタログを取得する<br /><br />・loadModuleMessageCatalog($moduleName)<br /><br />・loadThemeMessageCatalog($themeName)<br />???<br /><br /><br />●アクセサ<br />・setLocale($locale)<br />・getLocale()<br />・setLanguage($language)<br />・getLanguage()<br /><br />●protected<br />・getFallbackLanguage()<br />フォールバック用言語(英語)を得る<br /><br /><br />■Legacy_LanguageManager<br />(modules/legacy/kernel/Legacy_LanguageManager.class.php)<br /><br />●追加メソッド<br /><br />・loadPageTypeMessageCatalog($type)<br /><br />・loadModuleAdminMessageCatalog($moduleName)<br />・loadBlockMessageCatalog($moduleName)<br />・loadModinfoMessageCatalog($moduleName)</div>]]>
       </content>
    </entry>
    <entry>
        <title>定数名に長い識別子をつけると正しく認識されない</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=151" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=151</id>
        <published>2010-05-16T23:10:00+09:00</published>
        <updated>2010-06-16T20:20:05+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">モジュール開発モジュールのコンフィグ設定の定数名に長い識別子をつけると正しく認識されない。これはコンフィグ設定を保持している xoops_config テーブルのスキーマ定義がconf_name は va...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>モジュール開発<br />モジュールのコンフィグ設定の定数名に長い識別子をつけると正しく認識されない。<br /><br />これはコンフィグ設定を保持している xoops_config テーブルのスキーマ定義が<br />conf_name は varchar(25)<br />conf_title は varchar(30)<br />になっているためである。<br /><br />そのため定数名として 30文字以上の名前をつけると、一般設定画面でタイトルが表示されなくなる。<br /><br />スキーマを無理矢理大きくするのが良いかも？<br /><br />ALTER TABLE xoops_config MODIFY `conf_title` varchar(255) NOT NULL default ''</div>]]>
       </content>
    </entry>
    <entry>
        <title>XoopsObject</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=150" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=150</id>
        <published>2010-05-16T22:50:00+09:00</published>
        <updated>2010-06-16T17:32:08+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">XoopsObjectはデータにアクセスする際のデータオブジェクトのインスタンスになるクラスAbstractXoopsObject -> XoopsObject と継承している・AbstractXoopsObject(純粋抽象クラス)setNew()unsetNew()isNew()initVar($k...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>XoopsObjectはデータにアクセスする際のデータオブジェクトのインスタンスになるクラス<br /><br />AbstractXoopsObject -> XoopsObject と継承している<br /><br />・AbstractXoopsObject(純粋抽象クラス)<br />setNew()<br />unsetNew()<br />isNew()<br />initVar($key, $data_type, $default, $required, $size)<br />assignVars($values)<br />set($key, $value)<br />get($key)<br /><br />・XoopsObject<br />フィールド変数を配列としてメンバ変数 vars に保持する。<br />フィールド変数は以下のプロパティ(実際には連想配列)を持つ<br />value<br />required<br />data_type<br />maxlength<br />changed<br />options<br /><br />required や maxlength はDBのスキーマと関連する部分だが、このレベルで保持して管理するのが必須のものとは思わないが...<br />changed は意味は分かるが、cleanVars() で使うのはちょっと...<br />options はここにあるべきものではないかも...<br />getVar('show') や getVar('preview') というのもどうかなぁ...<br />dohtml,doxcode,dosmiley,... などがあるのはすでにUI部分がここに侵略していると言うことで...楽しくない感じ<br /><br />フィールド変数の種類は以下の通り<br />XOBJ_DTYPE_STRING<br />XOBJ_DTYPE_TXTBOX<br />XOBJ_DTYPE_TEXT<br />XOBJ_DTYPE_TXTAREA<br />XOBJ_DTYPE_INT<br />XOBJ_DTYPE_URL<br />XOBJ_DTYPE_EMAIL<br />XOBJ_DTYPE_ARRAY<br />XOBJ_DTYPE_OTHER<br />XOBJ_DTYPE_SOURCE<br />XOBJ_DTYPE_STIME<br />XOBJ_DTYPE_MTIME<br />XOBJ_DTYPE_LTIME<br />XOBJ_DTYPE_FLOAT<br />XOBJ_DTYPE_BOOL<br /><br />設計的にはデータ型なのかUI要素なのか分からないような項目 (TEXTBOX, TEXT, TEXTAREA) や 微妙な項目(URL, EMAIL)などがあるのがしっくり来ないところ。<br />実装的にはフィールド変数の種類が増やせないような実装(オブジェクトではないから...)になっているのが厳しい。<br /><br />フィールド変数をオブジェクトではなく連想配列で保持しているのはパフォーマンスを考慮してのことだろうか...(もしくは PHP4の頃のオブジェクトの扱い上の問題からか...)</div>]]>
       </content>
    </entry>
    <entry>
        <title>D3 モジュールによる notification (2)</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=138" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=138</id>
        <published>2009-05-30T22:50:00+09:00</published>
        <updated>2010-05-19T15:57:08+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">D3 モジュールによる notificationからの続き■(1) 通知一覧の名称が表示されない問題notify_func を使わないやり方はシンプルで良いのだが、唯一問題がある。それは通知一覧を見たときに、item...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div><a href="http://xcl.masa-lab.net/modules/d3blog/details.php?bid=136" target="_blank">D3 モジュールによる notification</a>からの続き<br /><br />■(1) 通知一覧の名称が表示されない問題<br />notify_func を使わないやり方はシンプルで良いのだが、唯一問題がある。<br /><br />それは通知一覧を見たときに、item_nameでコンテンツが特定されるコンテンツの名称欄が「無題」となってしまうことだ。<br /><br />notifications の仕様では not_itemid にコンテンツを特定する ID を保存しておき、それを notify_func に渡してタイトルを取得するようになっているため、notify_func が存在しないと、「無題」と表示されることになる。<br /><br />表示が「無題」となるのは良いことではないが、altsys が行ってくれる範囲ではこれで仕方がない。<br /><br />そのうちに何とかしたいものだ。<br /><br />■(2) 選択イベント更新後の飛び先が...<br />これはD3モジュールだからという訳ではないのだが<br />subscribe_from は ファイル名で指定するため<br />アクションコントローラタイプのモジュールの場合、index.phpだけになってしまう。<br />そのため、item_name を指定した場合に意図したページに飛ばすことができなくなる。<br /><br />たとえば、次のようなモジュールの構成の場合。<br />モジュールトップ index.php<br />コンテンツ index.php?action=view&amp;pid=12<br />というようになっていたとして<br />index.php?pid=12<br />などのようにリダイレクトされてしまい、モジュールトップが表示されてしまう。<br />それだけならまだ良いのだが、モジュールトップにもイベント選択機能が付いていると、pid=12 のイベント選択項目も表示されてしまうのだ。<br /><br />これはどうしたら良いのだろうね...</div>]]>
       </content>
    </entry>
    <entry>
        <title>D3 モジュールによる notification</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=136" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=136</id>
        <published>2009-05-25T16:50:00+09:00</published>
        <updated>2010-05-19T15:47:08+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">D3モジュールに notification を実装する際の問題点標準では mail_template を公開側から取得しようとするため、テンプレートが取得できない...altsys-0.61以上に追加されている D3NotificationHandler を...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>D3モジュールに notification を実装する際の問題点<br /><br />標準では mail_template を公開側から取得しようとするため、テンプレートが取得できない...<br /><br />altsys-0.61以上に追加されている D3NotificationHandler を使えばOK<br /><br />ただ、lookup_func による以下の変数の埋め込みはサポートされていない。<br /><pre class="blogCode"><code>
X_ITEM_NAME
X_ITEM_URL
X_ITEM_TYPE
</code></pre><br />というか<br /><pre class="blogCode"><code>
// Add some tag substitutions here
$tags = array();
// {X_ITEM_NAME} {X_ITEM_URL} {X_ITEM_TYPE} from lookup_func are disabled
</code></pre><br />となっているので敢えてなくしているようだ...<br /><br />おそらく、triggerEventの第４引数に extra_tag を与えればすむことだからか。<br /><br />そういう訳で、xoops_version.php の $modversion にも lookup_file, lookup_func は不要である。<br /><br />しかし、これには少し問題がある...<br /><br /><a href="http://xcl.masa-lab.net/modules/d3blog/details.php?bid=138" target="_blank">D3 モジュールによる notification (2)</a>へ続く</div>]]>
       </content>
    </entry>
    <entry>
        <title>テンプレート変数</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=114" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=114</id>
        <published>2008-11-29T23:40:00+09:00</published>
        <updated>2010-04-15T14:12:28+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">■サイト関連xoops_sitename  サイト名xoops_slogan  サイト副題xoops_pagetitle  ページタイトル■テーマ関連xoops_theme  テーマ名xoops_imageurl  テーマurlxoops_themecss  テーマCSS urlxoops_modulenamexoops_dirnamexoops_i...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>■サイト関連<br />xoops_sitename<br />  サイト名<br />xoops_slogan<br />  サイト副題<br />xoops_pagetitle<br />  ページタイトル<br /><br /><br />■テーマ関連<br />xoops_theme<br />  テーマ名<br />xoops_imageurl<br />  テーマurl<br />xoops_themecss<br />  テーマCSS url<br /><br />xoops_modulename<br /><br />xoops_dirname<br /><br />xoops_isadmin<br /><br />xoops_banner</div>]]>
       </content>
    </entry>
    <entry>
        <title>XCube_Identity, XCube_Principal  と XoopsUser</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=108" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=108</id>
        <published>2008-09-27T22:20:00+09:00</published>
        <updated>2011-02-04T18:03:18+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">XCube_Identity, XCube_Principal はともに抽象クラス?.NETフレームワークに似ている？.NETフレームワークのロールベースセキュリティモデルについて■XCube_Identityユーザ名と authenticationType を保持す...</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>XCube_Identity, XCube_Principal はともに抽象クラス?<br />.NETフレームワークに似ている？<br /><br /><a href="http://www.atmarkit.co.jp/fdotnet/technology/idnfw11_10/idnfw11_10_01.html" target="_blank">.NETフレームワークのロールベースセキュリティモデルについて</a><br /><br />■XCube_Identity<br />ユーザ名と authenticationType を保持するクラス<br />・XCube_Identity()<br />  コンストラクタ<br />・setAuthenticationType()<br />・getAuthenticationType()<br />・setName()<br />・getName()<br />・isAuthenticated()<br /><br /><br />■XCube_Principal<br />Principal は Identity を保持している。<br />・XCube_Principal(XCube_Identity $identity, String[] $roles)<br />  コンストラクタ<br />  Identity と ロール名文字列配列で初期化される<br />・getIdentity()<br />  XCube_Identity を得る<br />・isInRole($rolename)<br />  Principal が ロール名で指定されたロールを持っているか？<br /><br />------------------------------------------------------------<br />Legacy_Identity と Legacy_GenericPrincipal は XCLでの実装クラス<br /><br />■Legacy_Identity extends XCube_Identity<br />XCLでの ログインユーザの Identity<br />・Legacy_Identity(&amp;$xoopsUser)<br />  コンストラクタ<br />・getName()<br />  $xoopsUser-&gt;get(&#039;uname&#039;)<br />・isAuthenticated()<br />  true<br /><br />■Legacy_AnonymousIdentity<br />XCLでの 未ログインユーザの Identity<br />・isAuthenticated()<br />  false<br /><br />■Legacy_GenericPrincipal extends XCube_Principal<br />XCLでの Principal<br /><br />------------------------------------------------------------<br /><br /><br />isInRole(&#039;Site.Administrator&#039;)<br />isInRole(&#039;Site.Owner&#039;)<br />isInRole(&#039;Site.RegisteredUser&#039;)<br /><br />isInRole(&#039;Module.legacy.Admin&#039;)<br />isInRole(&#039;Module.user.Admin&#039;)</div>]]>
       </content>
    </entry>
    <entry>
        <title>XCL [2.1.5] のレンダリング</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=106" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=106</id>
        <published>2008-09-20T23:00:00+09:00</published>
        <updated>2008-09-19T19:51:50+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">XCL ではレンダリングエンジンに smarty を使用している。■RenderSystemXCubeRoot が保持する RenderSystem によってレンダリングが実行される。</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>XCL ではレンダリングエンジンに smarty を使用している。<br /><br />■RenderSystem<br />XCubeRoot が保持する RenderSystem によってレンダリングが実行される。<br />RenderSystem は公開側と管理側で分かれており、settings/site_default.ini に定義されている。<br /><pre class="blogCode"><code>
[RnderSystem]
Legacy_RenderSystem
Legacy_AdminRenderSystem
</code></pre><br />がそれぞれ使われる<br /><br />RenderSystem は<br />XCube_Root::getRenderSystem($name)<br />で取得できる。<br />XCube_Root は 指定された RenderSystem がまだ存在しなければ、siteConfig の情報を使って作成する。<br /><br />■Legacy_XoopsTpl extends XoopsTpl<br />Smarty を継承したテンプレートエンジン<br />RenderSystem に保持されている。<br />RenderSystemは、レンダリングを XoopsTpl に依頼する。<br /><br />■RenderTarget<br />レンダリングする対象<br />レンダリング結果を保持する？<br />俗に言う(？) $render がこれである。<br /><br /><pre class="blogCode"><code>
XCUBE_RENDER_TARGET_TYPE_BLOCK
XCUBE_RENDER_TARGET_TYPE_MAIN
XCUBE_RENDER_TARGET_TYPE_THEME
XCUBE_RENDER_TARGET_TYPE_BUFFER
</code></pre><br />$render->getAttribute('legacy_buffertype')<br /><br />といった種類がある。<br /><br />RenderTarget は <br />Legacy_RenderSystem::createRenderTarget($type, $option)<br />で作成される。<br /><br /><pre class="blogCode"><code>
XCUBE_RENDER_TARGET_TYPE_BLOCK
 =&gt; XCube_RenderTarget
XCUBE_RENDER_TARGET_TYPE_MAIN
 =&gt; Legacy_RenderTargetMain
XCUBE_RENDER_TARGET_TYPE_THEME,XCUBE_RENDER_TARGET_TYPE_BUFFER
 =&gt; XCube_RenderTarget
</code></pre></div>]]>
       </content>
    </entry>
    <entry>
        <title>XCL User 関連</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=105" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=105</id>
        <published>2008-09-17T23:40:00+09:00</published>
        <updated>2008-09-16T13:56:04+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja"></summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div><img src="http://xcl.masa-lab.net/uploads/img95f2c6430393c7c2d55bf.png" align="left" alt="" /></div>]]>
       </content>
    </entry>
    <entry>
        <title>XCL [2.1.5] ${Dirname}_Module に関する考察 (その２)</title>
        <link rel="alternate" type="text/xhtml" href="https://xcl.masa-lab.net/modules/d3blog/details.php?bid=103" />
        <id>https://xcl.masa-lab.net/modules/d3blog/details.php?bid=103</id>
        <published>2008-09-14T23:50:00+09:00</published>
        <updated>2008-09-12T11:57:32+09:00</updated>
        <category term="XCL開発資料" label="XCL開発資料" />
        <author>
            <name>masa</name>
        </author>
        <summary type="html" xml:base="https://xcl.masa-lab.net/" xml:lang="ja">というわけで、mModuleConfig の取得をオンデマンドに行う実験をしてみた。■config 取得を遅らせる実験</summary>
       <content type="html" xml:lang="ja" xml:base="https://xcl.masa-lab.net/">
<![CDATA[<div>というわけで、mModuleConfig の取得をオンデマンドに行う実験をしてみた。<br /><br />■config 取得を遅らせる実験<br />まずは Legacy_AbstractModule の mModuleConfig を private に変更する。<br />コンストラクタでの mModuleConfig 取得をやめる。<br />getModuleConfig() を修正し、mModuleConfig を取得していなくてconfig が存在すれば、mModuleConfig を取得するようにする。<br />setModuleConfig() はprivate にする。<br /><br />■結果<br />一応それなりに動いているようだ。<br />カレントモジュールについては、互換性の関係 ($GLOBALS[&#039;xoopsModuleConfig&#039;])ですぐに取得してしまうから、動作に支障はないと思う。<br />カレントでないモジュール（管理側だけということだが）では明らかに getModuleConfig の呼び出しはほとんどなく、事実 config へのSQLが激減した。<br /><br />■結論<br />この程度のオーバーヘッドであれば、公開側でも ${Dirname}_Module をそれぞれのモジュールについてインスタンス化してもかまわないのではないだろうか。<br /><br />もちろんパフォーマンスの問題はSQL問い合わせの量だけの話ではないが...<br /><br />■宿題<br />個人的には modules への度重なる問い合わせが気になる...<br />これは局所的な話では改善できないが、モジュールマネジャーの導入で解決が図れるように思う...<br />でもちょっと手を入れる範囲が大きすぎるね....</div>]]>
       </content>
    </entry>
</feed>