2009/11/18 水曜日

NetCommons2 モジュールをモバイル対応にする

カテゴリー: — kurowanko @ 18:23:52

NetCommons2をインストールしたままの状態では携帯画面で利用できるモジュールは下記の12個です。
    ・ログイン         ・メニュー
    ・新着情報        ・カレンダー
    ・お知らせ         ・アンケート
    ・Todo           ・掲示板
    ・小テスト         ・日誌
    ・汎用データベース   ・登録フォーム

これら以外のモジュール、またはオリジナルで作成したモジュールを携帯でも使用するためにはモジュールをカスタマイズする必要があります。
ここではオンライン状況モジュールを例にします。
 
 
install.iniに下記を追加。

[Mobile]
mobile_action_name = "online_view_mobile_init"

 
 
viewフォルダにmobileフォルダを作成し、さらにその中にinitフォルダを作成します。
initフォルダ内に3つのファイル(dicon.ini、maple.ini、Init.class.php)を作成。
dicon.iniの作成

[DIContainer]
onlineView = "modules://online.components.view"

 
 
maple.iniの作成

[DIContainer]
filename = dicon.ini

[SmartyAssign]
config = main.ini

[AllowIdList]
room_id  = "TARGET_ROOM_ID"
module_id = "TARGET_MODULE_ID"
block_id_arr = "ALLOW_BLOCK_ID"

[ValidateDef]
block_id_arr.online.mobileBlock = "1:lang._mobile_error_noblock"

[MobileView]
define:theme = 1
success = "online_mobile_init.html"

 
 
Init.class.phpの作成

<?php
	class Online_View_Mobile_Init extends Action
	{
		// 値をセットするため
		var $onlines = null;

		/**
		* execute実行
		*
		* @access  public
		*/
		function execute()
		{
			return 'success';
		}
	}
?>

 
 
view/main/init/maple.iniに下記を追加

[MobileView]
define:theme = 1
success = "online_mobile_details.html"
nonexistent = "online_nonexistent.html"

 
 
components/View.class.phpに下記を追加

/**
 * 携帯用ブロックデータを取得
 *
 * @access	public
 */
function getBlocksForMobile($block_id_arr)
{
	$params = array("block_id IN (".implode(",",$block_id_arr).")" => null);
	$order_params = array("insert_time" => "DESC");
	return $this->_db->selectExecute("online", $params, $order_params, null, null, array($this, "_getBlocksForMobile"));
}

/**
* 携帯用ブロックデータを取得
*
* @access	public
*/
function &_getBlocksForMobile(&$recordSet)
{
	$commonMain =& $this->_container->getComponent("commonMain");
		$convertHtml =& $commonMain->registerClass(WEBAPP_DIR.'/components/convert/Html.class.php', "Convert_Html", "convertHtml");

	$result = array();
	while ($row = $recordSet->fetchRow()) {
   		$content = $convertHtml->convertHtmlToText($row["content"]);
	    	$content = trim(preg_replace("/\\\n/", " ", $content));
	    	$row["title"] = mb_substr($content, 0, ONLINE_LENGTH + 1, INTERNAL_CODE);
	    	$result[] = $row;
	}
	return $result;
}

 
 
configフォルダを作成(install.iniがある階層)し、configフォルダ内にmain.iniを作成

[Online_View_Mobile]
define:ONLINE_LENGTH = 16

 
 
templates/default/にモバイル用のhtmlを作成
online_mobile_init.htmlの作成

<{strip}>
	<h3>
	</h3>
	<ul>
		<{section name=i loop=$action.onlines}>
			<li>
				<a href="?action=online_view_main_init&amp;block_id=<{$action.onlines[i].block_id}><{$session_param}>">
					<{if ($action.onlines[i].title != "") }>
						<{$action.onlines[i].title|truncate:$smarty.const.ONLINE_LENGTH:$smarty.const._SEARCH_MORE:true}>
					<{else}>
						<{$smarty.const._SEARCH_SUBJECT_NONEXISTS}>
					<{/if}>
				</a>
			</li>
		<{/section}>
	</ul>

	<div align="right">
		<a href="?action=menu_view_mobile_init<{$session_param}>">
			<{$lang._btn_prev_arrow|smarty:nodefaults}>
		</a>
	</div>
<{/strip}>

 
 
online_mobile_details.htmlの作成

<{strip}>
	<{if ($block_obj.block_name != "") }>
		<h3><{$block_obj.block_name}></h3>
	<{/if}>

	<table class="outer" summary="">
		<{if $action.user_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_user|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.userCount}>
				</td>
			</tr>
		<{/if}>
		<{if $action.member_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_member|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.memberCount}>
				</td>
			</tr>
		<{/if}>
		<{if $action.total_member_flag}>
			<tr>
				<th class="online_title" scope="row">
					<{$lang.online_total_merber|smarty:nodefaults}>
				</th>
				<td class="online_count">
					<{$lang.online_count|smarty:nodefaults|sprintf:$action.totalMemberCount}>
				</td>
			</tr>
		<{/if}>
	</table>

	<div align="right">
		<{if ($action.block_num == 1 ) }>
			<a href="?action=menu_view_mobile_init<{$session_param}>">
		<{else}>
			<a href="?action=menu_view_mobile_detail<{$session_param}>">
		<{/if}>
			<{$lang._btn_prev_arrow|smarty:nodefaults}>
		</a>
	</div>
<{/strip}>

 
 
以上でモジュールのカスタマイズは終了です。
install.iniを編集しているので、インストールをし直す必要があります。

NetCommons2のコントロールパネル開き、モジュール管理からモジュールのアンインストールとインストールをします。
インストールが完了したらコントロールパネルの携帯管理で「携帯からのアクセス許可モジュールの設定」がONになっていることを確認してください。

簡単な作りのモジュールであればこの方法でモバイルに対応させることができそうです。
複雑な作りのモジュールの場合には、これら以外にもいくつかのファイルが必要になると思います。

2009/11/4 水曜日

PHPでqmailに接続するAPIの開発

カテゴリー: — gabon @ 17:59:26

PHPでqmailに接続し、アカウントを作成したり、変更したりするAPIの開発をさせていだきました。

*Pearのnet_vpopmaildを利用

*net_vpopmaildの場合、
.qmailファイル(.qmail_アカウント名のテキストファイル)はdomains/ドメイン名の直下に作成されます。
 qmailAdminの場合と置き場所がことなるので、混在は事実上無理かもしれません。
(qmailAdminとapiでいじりあうととんでもないことに!)

* .qmailファイルには、転送アドレス、保存ディレクトリをかきます。このファイルを消してメーラでアクセスするとログイン失敗するので、消さないように! また、vpop/bin/vuserinfoで保存先が取得できても、.qmailファイルに同じ情報が書かれていないと、結局保存ができません。

* gidフラグをいじると、一見保存はできなくなりますが、メーラでのログインに失敗するので禁じ手です。

以上短いながらも濃い情報でした。開発サポートのみなさま、おつかれさまでした!

2009/11/2 月曜日

NetCommons2 モジュール作成、メイン表示カスタマイズ方法

カテゴリー: — kurowanko @ 17:18:58

○モジュールを新規作成するには
/NetCommons2/webapp/modules/にモジュールのフォルダを作成します。
既存のモジュールをコピーし、全てのファイルに含まれるモジュール名(onlineモジュールなら[online])を置換えることでモジュールを作成することもできます。
モジュールを作成したら、コントロールパネルのモジュール管理からインストールします。
モジュール用のテーブルが作成されればインストール完了です。
リストに表示される名前を変更する場合は、/language/japanese/modinfo.ini(以下、モジュール配下のディレクトリを表します)を書き換えます。
   module_name = "表示するモジュール名"
 
 
○作成されるテーブルの内容を編集するには
テーブルはインストールの際、/sql/mysql/table.sqlが読み込まれて作成されます。
このファイルを編集することで作成されるテーブルのカラムなどを変えることができます。
複数のテーブルを作成したい場合には、/sql/mysql/table.sqlに作成するテーブルを追加すれば複数のテーブルが作成できます。
 

○モジュールのメイン表示を変更するには
メイン表示の変更は、/templates/default/main.htmlやmain_init.htmlを編集します。
templates内のファイルを書き換えた場合には、モジュール管理からアップデートしなければ変更が適応されません。

templatesは基本的にhtmlで記述しますが、他のファイルから受け取った値などはSmartyで記述します。
$lang.で始まる変数は/language/japanese/main.ini内の値が呼び出され、
$action.で始まる変数は/view/main/init/Init.class.php内の値が呼び出されます。

<{$lang.online_count|smarty:nodefaults|sprintf:$action.userCount}>

/view/main/init/Init.class.phpでは、/components/View.class.php内のfunctionを呼び出してデータを取得し、templatesで使える形に格納しています。

   $user = $this->mydataView->getUserMember();
   $this->memberCount = $user["member"];

/components/View.class.phpでは、sql文を記述し、NetCommons2本体に送ってデータを取得しています。

   $date = date("YmdHis", time() - $mydataTime);
   $params = array(
   $date,
   $baseSessionID,
   _OFF
   );
   $sql = "SELECT base_sess_id, sess_data ".
   "FROM {session} ".
   "WHERE sess_updated > ? ".
   "AND base_sess_id != ? ".
   "AND old_flag = ?";
   $result = $this->_db->execute($sql, $params);

 

○データベースからデータを取得するには

上記に書いた/components/View.class.phpでsql文を用意し、本体に送ります。
この際、$paramsが未定義の状態ではエラーになってしまうので、$paramsが必要ないときは中身を空で用意します。
テーブル[netcommons2_users]からhandleの値を取得するには、

   $params = array();
   $sql = "SELECT handle FROM netcommons2_users";
   $result = $this->_db->execute($sql, $params);

と記述します。
データベースへの接続設定はNetCommons2本体で行われるので、最低上記の3行だけでデータを取得することができます。

2009/10/12 月曜日

Nagios カスタム変数

カテゴリー: — penguin @ 16:02:09

バージョン3以上では、ホストやコンタクト情報で使う変数を自分で追加出来る。簡単にメモ。

参考
Custom Object Variables
Nagios: External Command List

決まりごと
・変数名はアンダースコア(_)から始まる
・大文字小文字の区別はされない
・カスタム変数はテンプレから継承される(通常の変数と同様)
・スクリプトからマクロや環境変数で変数の値は参照できる

define host{
host_name    medeta
_custom_variable    0123456789
}

コマンドの定義箇所など、スクリプト中で値を取得するには

$_HOSTCUSTOM_VARIABLE$

と書く。頭に_HOSTや_CONTACTをつけるようだ。

外部コマンドでカスタム変数の値は変更できる。
たとえば

echo "[$now] CHANGE_CUSTOM_HOST_VAR;medeta;CUSTOM_VARIABLE;
changed value" > $commandfile

といった具合。↑は2行に分かれているが1行で書く。

Nagios内で直接カスタム変数の値を確認することは、出来ないのだろうか??
未確認。

2009/9/28 月曜日

コードの表示テスト

カテゴリー: — penguin @ 14:17:26

SyntaxHighlighter Evolved

<?php
    phpinfo();
?>

<pre>と<code>


<?php
    phpinfo();
?>

2009/9/25 金曜日

nagios メモ2

カテゴリー: — penguin @ 17:08:36

nagios(3.1.2) メモ2

○ホストやサービスの詳細ページに、コメントを追加
参考:http://www.itmedia.co.jp/enterprise/articles/0901/06/news023.html

echo "[$NOW] ADD_HOST_COMMENT;medeta;1;test;comment">/usr/local/nagios/var/rw/nagios.cmd

nagios.cmdの位置が上のページと違うのでメモ。
$NOWはタイムスタンプ。
コマンドは目的に応じていろいろある。

○プラグインを実行するときのディレクトリ
プラグイン本体は/usr/local/nagios/libexec/にあるけれども、プラグインとして実行したときの場所は

/

となる。
プラグインの中でファイルを読み込むときはうっかりしそうなのでメモ。

2009/9/17 木曜日

さくらサーバにsubversionインストール

カテゴリー: — benton @ 17:33:47

さくらサーバにsubversionをインストールしてみる。

wget http://subversion.tigris.org/downloads/subversion-1.6.5.tar.gz
tar vxfz subversion-1.6.5.tar.gz
cd subversion-1.6.5
とりあえず
./configure –prefix=$HOME/local
止まる。

apr1.2.xとapr-util1.2.xが必要といわれて止まっているようなので入れてみる。
1.3.xでいいのかなあ。
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.3.8.tar.gz
tar zxvf apr-1.3.8.tar.gz
wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.3.9.tar.gz
tar vxzf apr-util-1.3.9.tar.gz

subversionの下に入れておくだけでいいらしい。
cp -rf apr-1.3.8 subversion-1.6.5/apr
cp -rf apr-util-1.3.9 subversion-1.6.5/apr-util

再チャレンジ
cd subversion-1.6.5
./configure –prefix=$HOME/local
make
make install
できた。

nagios ファイルの場所メモ

カテゴリー: — penguin @ 14:04:47

デフォルト設定を使ってるけれども、ネットで検索した結果と微妙にファイルの置き場所とかが違うのでメモ
バージョンは3.1.2

インストールディレクトリ(他の人と一緒)
/usr/local/nagios/

コマンドの定義
/usr/local/nagios/etc/objects/commands.cfg

ホストの追加
/usr/local/nagios/etc/nagios.cfg のはじめのほう、cfg_file=という行が並んでるあたり
# Definitions for monitoring the local (Linux) host
と書いてある行の下とかに、
cfg_file=/usr/local/nagios/etc/objects/xxx.cfg (xxxは自分で決める)
を追加
xxx.cfgの中身の書き換えは
/usr/local/nagios/etc/objects/localhost.cfg を参考に

2009/9/3 木曜日

HTMLで表の横幅を揃える

カテゴリー: — kurowanko @ 14:22:41

tableタグはtable-layoutの値がデフォルトで”auto”になっています。その場合、内容にあわせて表の大きさが変わりますが、大きさをそろえたい場合、”fixed”にすれば指定した横幅に合わせてくれるようになります。
ただこの際、セルでword-wrapを指定していないとセルの枠を超えて文字が表示されますので気を付けて下さい。

☆セルに入る文字列が表全体の横幅を越えないのであれば、table-layoutは”auto”でも問題ありません。

table-layoutの値を”auto”にした場合、セルの幅は値が、
・全角文字列の場合
→指定したセルの幅に合わせて自動改行してくれる
・半角文字列の場合
→自動改行してくれず、文字列の長さにあわせてセルの幅が広がってしまう
自動改行して欲しい時は、word-wrapを指定します(IEで対応、FireFoxは3.1から)が、指定しても半角は改行されません。

table-layoutを”fixed”にした場合、セルの幅は以下の
1. col要素, colgroup要素に指定した横幅。
2. col要素, colgroup要素に横幅を明示していない場合は1行目の表のセル要素に指定した横幅。
3. 表のセル要素にも横幅を明示していない場合は表の横幅を表示域の左右いっぱいにまで広げ、列の数に応じて等分割した横幅。
の方法で指定します。

参考URL:
http://w3g.jp/css/table/table-layout
http://w3g.jp/xhtml/dic/col
http://w3g.jp/xhtml/dic/colgroup
http://www.htmq.com/html/col.shtml

2009/8/26 水曜日

NetBeans6.5+xampp windows 1.7.0であっさりPHPのソースコードデバッグができました

カテゴリー: — gabon @ 18:09:49

以前Eclipse+全部入りやphpのプラグインをいれて、PHPのソースコードデバッグ環境の構築に挫折したのですが、

netBeansのPHP用パッケージ
xamppの組み合わせでおどろくほど簡単にソースコードデバッグができました。

mk18のプログラミング日記さん
のブログの記事を参考にさせていただきましたが、この記事にもあります、
http://www.netbeans.org/kb/docs/php/debugging_ja.html
の記事だけでうまく動きました(先のmk18さんのブログではこの記事に加えてさらに設定が必要なのですが)、バージョンも上がったので、洗練させているのでしょうかね。

NetBeansプロジェクトの方々、mk18さんに感謝です!

« 前ページへ次ページへ »

HTML convert time: 0.929 sec. Powered by WordPress ME