XOOPS3

http://sourceforge.net/apps/phpbb/xoopscube/viewtopic.php?f=5&t=242

xoops.org の開発陣のひとり、Mambaさんから、XOOPS Cube と XOOPS のプロジェクト・コミュニティを統一しないかというオファーがありました。

xoops.org は現在 XOOPS3 を開発中(このまえアルファがリリースされた)で、今までのコードをレガシーとし、新たに ZendFramework を全面的に採用したものになっているようです。XOOPS Cube Legacy は、古いモジュールの互換性を極力保つようにしていますが、XOOPS3 ではなるべく早くに新システムに移行を済ませて将来的にレガシーコードは切りたいという考えみたいです。

http://xoops.org/modules/news/article.php?storyid=5675
アルファ版をダウンロードして10分ほど見ただけですが、新コードの部分はきれいに書けているように見えます。時間をとってもうちょっと真面目に評価してみてもいいかもしれません。ZendFramework は機能豊富なので、うまく組み込めているのであれば魅力的です。

XOOPS Cube も開発陣がもっと充実していればいいのですが、寂しい限りですし、XOOPS3の出来がよければXCL3はやめて Mamba さんの提案どおり一緒にやっていくのもありかなあと思います。

XCL2.2 Beta2 リリース

XOOPS Cube Legacy 2.2 Beta2 をリリースしました。Beta1からはバグフィクスがメインで、新機能はありません。

XCL2.1からのアップグレードは、難しくはありませんが多少手順が多くて面倒なため、アップグレードチェッカを作りました。先週の新幹線の中でこちょこちょ作って、昨日いくつかチェックを増やして、extras/utility_tools/legacy22_check.php として同梱しています。
「何かうまくいかないな」というところがありましたら、これを動かしてアップグレード作業の忘れがないかチェックしてみてください。
XOOPS_ROOT_PATH に置いて、ブラウザでアクセスするだけです。
もちろん完璧にチェックするわけではないので、100%問題点がわかるわけではありませんが。

XOOPS Cube Legacy 2.2 の jQuery 対応

10/23 サタデーラボで XOOPS Cube Legacy 2.2 の jQuery 対応についてお話させていただきました。機会を設けてくださった RYUS さんに感謝。

当日の資料を以下に置いてありますので、興味のある方はどうぞ。
また、資料内にも書いてありますが、サンプルのコードもアップしてあります。

DefaultInputText

もうひとつ。10 Useful jQuery Snippets より。
フォームのテキスト欄にデフォルトのテキストを表示し、クリックするとそれが消える、という最近良く見かける仕掛けです。
こちらは input に title を指定しないといけないので(ふつうtitleなんて指定してないでしょう。さらにそれが value の値と一致していないとダメ)、入れてすぐどうなるわけではありませんが。

<input type="text" name="search" class="search" value="Keywords" title="Keywords" />

ダウンロード(仮置きなので、そのうち無くなるかも ^^;;

Uniform --- XCL2.2のjQuery利用サンプル

とりあえず、ひとつ作ってみました。
元にしたのは、Uniform というフォームのスタイルを格好良くするライブラリです。

例えば、こんなフォームが、

こんな風に。

使い方

以下のファイルを XCL2.2のhtml以下にコピーしてください。
ダウンロード(仮置きなので、そのうち無くなるかも ^^;;

第11回XOOPS Cubeサタデーラボ

Ryus さんが毎月開いているXOOPS Cubeサタデーラボ、今月は23日(土)に開催されますが、ここで XOOPS Cube Legacy 2.2 についてお話させていただくことになりました。
比較的初心者な方が多いということですので、新機能のうち JavascriptjQuery)の利用について紹介しようかと思っています。

XCL2.2では、jQueryjQuery UI を自動的に読み込むようにしています。
さらに、javascript, ライブラリファイル、CSSファイルをプリロードファイルで追加できるようになっていますので、サイト管理者は Javascript の様々な効果を簡単に追加できます。
例えば、角丸にする、Lightbox の効果を適用する、Twitter の投稿を表示したり、投稿フォームを表示したり、といったことがプリロードファイルを使って出来るようになります。

当日は、機能の紹介と共にすぐに使えるプリロードファイルを用意していく予定なのでお楽しみに!!

xoops_view プラグイン

xoops_view プラグインは、強力ですがあまりお行儀がよろしくない Smarty プラグインです。
このプラグインと、プリロードファイル、カスタムテンプレートを組み合わせることで、他のモジュールの好きなデータをとってきて任意のテンプレートの任意の場所に表示することができます。

試してみる

(0)Smarty プラグインディレクトリ(html/class/smarty/plugins または xoops_trust_path/libs/smarty/plugins …XCL2.2の場合)に、以下のコードを function.xoops_view.php という名前で保存する

(1)表示したいテンプレートに <{xoops_view template=user_custom.html delegate=Module.user.GetCustomData options=1}> を記述する。

(2)以下のコードを html/user/preload/ に CustomDataPreload.class.php という名前で保存する。

(3)Altsys > テンプレート で、カスタムテンプレートを追加する。名前は (1)の template= で指定した名前(user_custom.html)。テンプレートの中身は、例えば

<{$data->get('uname')}>

※uid=1 の人の uname を表示

このサンプルではユーザ名を表示しているだけで、あまり有難味はありませんが、デリゲートで取得するデータと、追加したカスタムテンプレートの中身を変えることで、好きなモジュールのデータを好きに表示することができます。
デザイナの方にとってはデリゲートのコードはちょっと難易度が高いので、プログラマの人にお願いして、カスタムテンプレートを頑張るという分担もできるかと思います。

(0) function.xoops_view.php

<?php
function smarty_function_xoops_view($params, &$smarty)
{
	$delegate = $params['delegate'];
	$template = $params['template'];
	$dirname = $params['dirname'];
	$options = explode('|', $params['options']);

	//check required parameter
	if(! $delegate) return;

	//get data
	$result = null;
	XCube_DelegateUtils::call($delegate, new XCube_Ref($result), $dirname, $options);
	if($result===false){
		return;
	}
	
	//render template
	if(isset($template)){
		$render = new XCube_RenderTarget();
		$render->setTemplateName($template);
		$render->setAttribute('legacy_buffertype',XCUBE_RENDER_TARGET_TYPE_MAIN);
		$render->setAttribute('data', $result);
		XCube_Root::getSingleton()->getRenderSystem('Legacy_RenderSystem')->render($render);

		echo $render->getResult();
	}
	else{
		echo $result;
	}
}
?>

(2) CustomDataPreload.class.php

<?php
if(!defined('XOOPS_ROOT_PATH')){
	exit;
}

class User_CustomDataPreload extends XCube_ActionFilter
{
	public function preBlockFilter()
	{
		$this->mRoot->mDelegateManager->add('Module.user.GetCustomData','User_CustomDataPreload::show');
	}

	public static function show(/*** mixed ***/ $result,/*** string ***/ $dirname, /*** mixed ***/ $options)
	{
		$id = intval($options[0]);
		$handler = xoops_gethandler('user');
		if($id>0){
			$result = $handler->get($id);
		}
	}
}
?>