LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

eguide用 d3pipes内部取得ジョイント

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-10 10:07 | 最終変更
dell0619  3rd Class 登録日: 2008-12-2   投稿数: 2
表題の通りです。
ありそうで無かったのと、私の知識では簡単に作れそうになかったので、もしよければ皆さんの技術をお貸しください。

whatsnewモジュールで取得できることは分かっていますが、個人的にd3pipesの方が便利で使いやすいのと、サイト全体の動作に影響を考えてのクレクレです。よろしくお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-11 0:19 | 最終変更
moegiiro  2nd Class 登録日: 2007-2-20   投稿数: 21
dell0619 さん、こんばんは。

現在、某ボランティア団体のHPリニューアルで、XOOPSを利用して作成しています。
私もこのジョイントが必要で格闘しているのですが、まだできていません。。
便乗して、クレクレさせてください。

根本的に間違っているかもしれませんが、自分なりに考えたのは以下のコードです。
しかし (1)〜(5)の部分の指定がわかりません。
お分かりの方、または利用されている方がおられましたら、ご教示いただければ幸いです。
よろしくお願いいたします。

コアバージョン:HD1.0.3RC (現在ローカル環境で作業中ですが本番では1.0.3を利用します)
利用モジュール:eguide-2.51
ファイル名:D3pipesBlockEguidetop.class.php
<?php

require_once dirname(dirname(__FILE__)).'/D3pipesBlockAbstract.class.php' ;

class D3pipesBlockEguidetop extends D3pipesBlockAbstract {

	var $target_dirname = 'eguide' ;

	function init()
	{
		// language files
		$this->includeLanguageBlock() ;

		// configurations (file, name, block_options)
		$this->func_file = XOOPS_ROOT_PATH.'/modules/'.$this->target_dirname.'/blocks/ev_top.php' ;
		$this->func_name = 'b_guide_top_show' ;
		$this->block_options = array(
			0 => '???',// $detail (1) 何を指定すればいいのかわかりません。。
			1 => empty( $params[1] ) ? 10 : intval( $params[1] ) , // $nitem (2)
			2 => 255 , // $nlen   (3)
			3 => 0 ,   // $only   (4)
			4 => 0 ,   // $cat    (5)
		) ;

		return true ;
	}

	function reassign( $data )
	{
		$data = $this->unhtmlspecialchars( $data ) ; // conventional module has a rule assigning escaped variables

		$entries = array() ;
		foreach( $data['eguide'] as $item ) {
			$entry = array(
				'pubtime' => $item['edate'] ,
				'link' => XOOPS_URL.'/modules/'.$this->target_dirname.'/event.php?eid='.$item['id'] ,
				'headline' => $item['title'] ,
				'description' => '', // $item['summary'] ,
			) ;
			$entry['fingerprint'] = $entry['link'] ;
			$entries[] = $entry ;
		}

		return $entries ;
	}

	// returns array of dirnames can be applied the joint
	function getValidDirnames()
	{
		return array( $this->target_dirname ) ;
	}

}

?>

エラー内容は以下のとおりです
array(0) {
}
--- errors ---
array(1) {
  [0]=>
  string(91) "ブロック関数ジョイントで関数名指定にミスがあります
b_guide_top_show (D3pipesBlockEguidetop)"
}
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-11 6:20
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
あれ?
EventGuide用のジョイント作ってませんでしたっけ?
…あ、確かにないですね。

いやまあ、一覧ブロックを用意しているモジュール用のジョイントなら、すぐに出来るとは思いますが。

…と、ささっ作ろうと思ったらうちにあるEventGuideは1.60なんてあまりにも古いバージョンでした

eguideには現在、1.x系と2.x系と両方あるみたいですけど、どちらが主流なんでしょうか?

そのどちらかをターゲットとするかによって、作り方がまったく違ってきますので。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-11 12:19
moegiiro  2nd Class 登録日: 2007-2-20   投稿数: 21
GIJOE さん、こんにちは。
ご本人が作られるのなら、心強いです(^^)

引用:
eguideには現在、1.x系と2.x系と両方あるみたいですけど、どちらが主流なんでしょうか?

MySiteさんのサイトを見てみると
 1.x系 は XOOPS 1.3.x/2.0.x
 2.x系 は XOOPS 2.0 or XOOPS Cube Legacy 2.1
とのことなので、2.x系でよいと思います。
よろしくお願いいたします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-11 18:20 | 最終変更
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
moegiiroさん、こんにちは。

引用:

MySiteさんのサイトを見てみると
 1.x系 は XOOPS 1.3.x/2.0.x
 2.x系 は XOOPS 2.0 or XOOPS Cube Legacy 2.1
とのことなので、2.x系でよいと思います。
実は2.x系、今になって初めて触りました。ごめんなさい>nobuさん
# piCalではプラグインを作ってもらっておきながら…

なるほど、テンプレートを用意することでdirname変更や複数インストールに対応する、という変則的なD2モジュールなんですね。

であれば、dirnameを 'eguide' 決めうち、というのも使えません。
blocks/ev_top.php
があればeguideだろう、という推測にしてます。

moegiiroさんの作りかけジョイントもおかげさまで役立ちました。ちなみに
  [0]=>
  string(91) "ブロック関数ジョイントで関数名指定にミスがあります
b_guide_top_show (D3pipesBlockEguidetop)"
このエラーはメッセージを読んだ通りです。関数名が間違っているだけです。

0.66cで同梱してますので、そちらからコピーしてください。

一応ここにも貼り付けておきます。(Eguide1用のジョイントも考えられるので、一応Eguide2top という名前にしてます)

joints/block/D3pipesBlockEguide2top.class.php
<?php

require_once dirname(dirname(__FILE__)).'/D3pipesBlockAbstract.class.php' ;

class D3pipesBlockEguide2top extends D3pipesBlockAbstract {

	var $target_dirname = '' ;

	function init()
	{
		// parse and check option for this class
		$params = array_map( 'trim' , explode( '|' , $this->option ) ) ;
		if( empty( $params[0] ) ) {
			$this->errors[] = _MD_D3PIPES_ERR_INVALIDDIRNAMEINBLOCK."\n($this->pipe_id)" ;
			return false ;
		}
		$this->target_dirname = preg_replace( '/[^0-9a-zA-Z_-]/' , '' , $params[0] ) ;

		@define( '_BLOCK_DATE_FMT' , _SHORTDATESTRING ) ;

		// configurations ( file, name, block_options )
		$this->func_file = XOOPS_ROOT_PATH.'/modules/'.$this->target_dirname.'/blocks/ev_top.php' ;
		$this->func_name = 'b_'.$this->target_dirname.'_top_show' ;
		$this->block_options = array(
			0 => 1 , // detail
			1 => empty( $params[1] ) ? 10 : intval( $params[1] ) , // nitem
			2 => 0x7fffffff , // nlen
			3 => 1 , // only
			4 => empty( $params[2] ) ? '' : $params[2] , // cat
		) ;

		return true ;
	}

	function reassign( $data )
	{
		$data = $this->unhtmlspecialchars( $data ) ; // conventional module has a rule assigning escaped variables

		$entries = array() ;
		foreach( $data['events'] as $item ) {
			$entry = array(
				'pubtime' => strtotime( $item['_post'] ) ,
				'link' => $data['module_url'].'/event.php?eid='.$item['eid'] ,
				'headline' => $item['title'] ,
				'description' => $item['_date'] . '(' . $item['uname'] . ')' ,
			) ;
			$entry['fingerprint'] = $entry['link'] ;
			$entries[] = $entry ;
		}

		return $entries ;
	}

	// returns array of dirnames can be applied the joint
	function getValidDirnames()
	{
		$ret = array() ;
		$module_handler =& xoops_gethandler( 'module' ) ;
		$modules = $module_handler->getList( null , true ) ;
	
		foreach( array_keys( $modules ) as $mydirname ) {
			$file4judge = XOOPS_ROOT_PATH.'/modules/'.$mydirname.'/blocks/ev_top.php' ;
			if( file_exists( $file4judge ) ) {
				$ret[] = $mydirname ;
			}
		}

		return $ret ;
	}
}


# 今回、久しぶりにブロックジョイントを新作して、ようやく仕様を思い出しました。他のモジュール用のジョイントをリクエストするなら今ですよ
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-2-11 23:00 | 最終変更
moegiiro  2nd Class 登録日: 2007-2-20   投稿数: 21
GIJOE さん、こんばんは。

素早い対応、ありがとうございます!
早速利用させていただきました。
[+]で開催日と投稿者が表示されるんですね。そういう発想すら思いつきませんでした。
'description'ってそういう使い方をするんですね。

(1)〜(5)の部分とエラーは今もよくわかっていませんが、HPを作るのが本来の目的なので、
HPができあがって時間ができたら調べてみようと思います。

本当に、どうもありがとうございました。

dell0619 さん、お互いがんばりましょう(^^)/
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-2-12 4:27
GIJOE  Admiral 登録日: 2006-3-20   投稿数: 3708
moegiiroさん、こんにちは。

引用:

[+]で開催日と投稿者が表示されるんですね。そういう発想すら思いつきませんでした。
'description'ってそういう使い方をするんですね。
いやあ、本当は本文をアサインしたかったんですが、eguideのトップブロックはそういうアサインをまったくしないんです。
ジョイント内部でSQLを取得してもいいんですが、誰かが積極的にメンテをしているモジュールについては、自前のコントローラを持たない、というのがd3pipesのポリシーですから。(モジュールサイドに仕様変更があったときに致命的な障害になり得る)

引用:
(1)~(5)の部分とエラーは今もよくわかっていません
エラーについては、すでに書いた通りです。

(1)~(5)は、そのブロックが必要とするパラメータです。
どういう意味であるかは、ブロック表示関数から判断します。

大抵、$options という仮引数で受けているので、その流れを追えば、どういう意味であるか、どんな値を渡せば良いかは、だいたいわかります。

そして必要に応じて、ジョイントでそのパラメータを指定できるようにしてあげます。

今回のeguideブロック用ジョイントも、3つめのパラメータがeguideのカテゴリー絞り込みに相当するようになっています。
投票数:0 平均点:0.00

  条件検索へ


Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities