2005 07 30_xwj_customizinig
DESCRIPTION
2005年7月30日XWJ (XOOPS West Japan)2005神戸市中小企業支援センター「新・XOOPS実践カスタマイズ」TRANSCRIPT
Malaika System
新・ XOOPS 実践カスタマイズ
Malaika System 早川知道 (Tom_G3X)
2005.7.30
2
Malaika System
カスタマイズ時の注意点
• コア・モジュールファイルに手を加えない– [ まず最初 ] XOOPS やモジュールの管理画面で設定– [ その次 ] テーマ、テンプレートでの編集– [ 最後の手段 ] コア、モジュールをハックSmarty を使いこなす事が、高度なカスタマイズの近道
• サイト運用時も考慮したサイト設計– 可能な限り、管理画面より変更・修正がベター– サイト運用者にやさしくサイト運営が煩雑になっては、逆効果
3
Malaika System
Smarty を使いこなす為には
• Smarty の使い方を理解する– 日本語マニュアル http://sunset.freespace.jp/smarty/
• コア、モジュールの標準の Smarty 変数を知る
– テーマで使えるテンプレート変数 http://xoops.sourceforge.jp/wiki/xoops2/
• 独自の Smarty 変数を追加する
4
Malaika System
Smarty 変数の独自追加方法
• 別ファイル読み込み方式
<{php}>~~ PHP コードを記述~~<{/php}>
<{include_php file="$xoops_rootpath/ex_tpl_assign.php"}>
• テーマに直書き方式
• Smarty プラグイン追加作成
5
Malaika System
実践的なカスタマイズの紹介
• 標準で使える Smarty 変数の使用例– ウエルカムメッセージ– 表示中のモジュール情報を使ってみる (2.0.10-JP の新
機能 )
– 簡易テーマチャンジャー (2.0.10-JP の新機能 )
– 複雑なブロック・レイアウトに挑戦 (2.0.10-JP の新機能 )
• Smarty プラグイン– TinyD プラグインを使ってみる– メインメニューをテーマに取り込む
6
Malaika System
標準の Smarty 変数 ( 一例 )
• ユーザー関係の変数<{$xoops_isadmin}> 訪問者が管理者なら True を返す<{$xoops_isuser}> 訪問者が登録ユーザーなら True を返す<{$xoops_userid}> 登録者のユーザー ID (1, 2, 3, …..)<{$xoops_uname}> 登録者のユーザー名 (admin, Tom, …..)
• URL 関係の変数<{$xoops_url}> XOOPS サイトのURL<{$xoops_imageurl}> 現在のテーマまでのURL<{$xoops_upload_url}> uploads ディレクトリまでのURL
7
Malaika System
ウエルカムメッセージ ( 使用例 )
• 使用例<{if $xoops_isuser }> ユーザーである場合 <a href=“<{$xoops_url}>/userinfo.php?uid=<{$xoops_userid}>”> <{$xoops_uname}></a> さん、こんにちは! <{if $xoops_uname == “kanpei” }> アヘアへ~~ <{/if}><{/if}><{if $xoops_isadmin }> 管理者ユーザーである場合 <a href=“<{$xoops_url}>/admin.php”> 管理画面 </a><{/if}>
• 表示例
kanpei さん、こんにちは! アヘアヘ~~Kanpei さんの表示
管理者の表示 admin さん、こんにちは! 管理画面
8
Malaika System
表示中のモジュール情報を取得する
• 表示中のモジュール名、モジュールディレクトリ名を取得したい– <{$xoops_pagetitle}> は、厳密には表示中のモジュール名では
無い– 表示中のモジュールディレクトリ名は取得出来ない
• 取得出来ればモジュール毎に異なった表現が可能
表示中のモジュール情報を取得して、テーマに活用してみよう!
↓
• XOOPS2.0.10-JPより標準で使えるようになった– <{$xoop_modulename}> アクセス中のモジュール名– <{$xoops_dirname}> アクセス中のモジュールディレクトリ名
9
Malaika System
表示中のモジュールを取得 ( 記述例 )
• 表示例Smarty 変数 表示例1 表示例2<{$xoops_modulename}> ニュース ●○フォーラム <{$xoops_dirname}> news newbb
• 記述例<{if $xoops_dirname }> <img src=“<{$xoops_imageurl}>title_<{$xoops_dirname}>.gif“ alt=“<{$xoops_modulename}>” /> (モジュール毎に異なった画像を表示させる)<{else}> ( index.php など XOOPS ルートファイルでの表示を記述)<{/if}>
/ title_newbb.gif などの画像を用意しておく
10
Malaika System
表示中のモジュール情報を取得 ( 使用例 )
• トップページ (index.php では Flash を表示 )
• ニュース ( モジュール内では、モジュール毎に別々の画像を表示 )
• 使用サイト– 桜ケ丘病院 http://www.sakuragaoka-hp.jp/
– TCP-IP http://yours.tcp-ip.or.jp/
11
Malaika System
簡易テーマチェンジャー
• モジュール毎に CSS を変更する(簡易テーマチェンジャー)<head> : 中略 <{ if $xoops_dirname }> <link rel="stylesheet" type="text/css" media="screen“ href=“<{$xoops_imageurl}><{$xoops_dirname}>.css" /> <{else}> <link rel="stylesheet" type="text/css" media="screen“ href="<{$xoops_themecss}>" /> <{/if}> : 中略</head>
default テーマの場合、 /themes/default/style.css /themes/default/news.css /themes/default/newbb.css
12
Malaika System
複雑なブロックレイアウト
• $block.weight を使って、こんなレイアウトも可能に
左 右
中央 - 中
中央 - 左 中央 - 右
中央 - 中
中央 - 左 中央 - 右
XOOPS 2.0.10-JP より$block に weight がアサインされブロックの多彩なレイアウトが可能になった。
13
Malaika System
複雑なブロックレイアウト($block.weight)
• 記述例 ( theme.html )
<{foreach item=block from=$xoops_ccblocks}> <{if $block.weight < 100 }> <div class=“BlockTitle”><{$block.title}></div> <div class=“BlockContent”><{$block.content}></div> <{/if}><{/foreach}> : 中略 :<{foreach item=block from=$xoops_ccblocks}> <{if $block.weight >= 100 }> <div class=“BlockTitle"><{$block.title}></div> <div class=“BlockContent"><{$block.content}></div> <{/if}><{/foreach}>
14
Malaika System
Smarty プラグインを使う
• テーマとテンプレートの編集方法の違い– テンプレート
• テンプレートマネージャーよりブラウザーで編集可能
– テーマ• FTP などの方法でアップロードする必要がある
– これ、結構、面倒!! (T_T)
これを TinyD で解決しちゃおう!しかも、もっと、多彩に使える!!ワイワイ (^o^) 丿
15
Malaika System
TinyD をテーマに使う (Smarty プラグイン )
• Smarty プラグインを使う– 龍司さんが、「 TinyD 表示プラグイン」を公開されていた。
ところがその後、 TinyD デフォルトのディレクトリ名が変更された為、最新の TinyD に、完全には対応できなくなった。
– 最新の TinyD にも対応出来るように変更してみた。一応、龍司さんのバージョンと互換性あり。Malaika System よりダウンロード出来る。/class/smarty/plugins/ に入れておく。
<{ tinyD dir=“(tinyD ディレクトリ名 )” id=“(tinyD コンテンツ ID)” }>
• 使い方
<{ tinyD dir=“tinyd1” id=“20” }>
• 記述例
16
Malaika System
TinyD をテーマに使う ( 使用例 : テーマ )
• テーマに適用– 更新が楽になる
• ヘッダーのロゴやバナーなどを頻繁に変更したい
• 使用例– TCP-IP http://yours.tcp-ip.or.jp/
17
Malaika System
TinyD をテーマに使う ( 使用例 : テンプレート )
• 使用例– うえこみ春日井小牧 xoopsfaq http://www.kasugai-komaki.jp/modules/xoopsfaq/
• テンプレートに適用– コンテンツ管理が楽になる
• 注意書きなどを表示• 別のコンテンツを割り込ませる
18
Malaika System
メインメニューをテーマに
• 最も利用頻度の高いブロックは、「メインメニュー」か?
• ブロック以外の場所に配置してみたい
メインメニューのブロック関数をテーマに取込んで、多彩な表現をしてみよう!
19
Malaika System
メインメニューをテーマに ( ブロック関数 )
• PHPコードを記述の場合<{php}>global $xoopsModule;require_once XOOPS_ROOT_PATH.“/modules/system/blocks/system_blocks.php“;$MainMenu = b_system_main_show(); ( メインメニューのブロック関数を呼び出し )$this->assign( ”ex_mainmenu“, $MainMenu ); (メインメニューの情報)<{/php}>
• 同様に、モジュールのブロック関数などを呼び出す事で、
応用可能だ。
• Smarty プラグインを使った場合– xoops_block http://malaika.s31.xrea.comより配布中
<{xoops_block mod=“system” func=“b_system_main_show” assign=“ex_mainmenu”}>
20
Malaika System
メインメニューをテーマに ( 使い方 )
• メニュー表示<{foreach item=module from=$ex_mainmenu.modules }> <a href=“<{$xoops_url}>/modules/<{$module.directory}>/”><{$module.name}></a> |<{/foreach}> (各モジュールへのリンクを生成する )
<{if $xoops_dirname }> <{foreach item=module from=$ex_mainmenu.modules }> <{if $module.directory == $xoops_dirname && $module.sublinks }> <div class=“blockTitle”><{$xoops_modulename}> :</div> ( ブロックタイトル ) <div class=“blockContent”> ( ブロックコンテンツ ) <{foreach item=sublink from=$module.sublinks }> <a id=“mainmenu” href=“<{$sublink.url}>”><{$sublink.name}></a> <{/foreach}> ( そのモジュールのサブメニューを表示させる ) </div> <{/if}> <{/foreach}><{/if}>
• サブメニュー表示
21
Malaika System
メインメニューをテーマに ( 使用例)
• Malaika System http://malaika.s31.xrea.com/
• Sereno http://www.edg.jp/