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)"
}
あれ?
EventGuide用のジョイント作ってませんでしたっけ?
…あ、確かにないですね。
いやまあ、一覧ブロックを用意しているモジュール用のジョイントなら、すぐに出来るとは思いますが。
…と、ささっ作ろうと思ったらうちにあるEventGuideは1.60なんてあまりにも古いバージョンでした

eguideには現在、1.x系と2.x系と両方あるみたいですけど、どちらが主流なんでしょうか?
そのどちらかをターゲットとするかによって、作り方がまったく違ってきますので。
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系でよいと思います。
よろしくお願いいたします。
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 ;
}
}
# 今回、久しぶりにブロックジョイントを新作して、ようやく仕様を思い出しました。他のモジュール用のジョイントをリクエストするなら今ですよ
moegiiroさん、こんにちは。
引用:
[+]で開催日と投稿者が表示されるんですね。そういう発想すら思いつきませんでした。
'description'ってそういう使い方をするんですね。
いやあ、本当は本文をアサインしたかったんですが、eguideのトップブロックはそういうアサインをまったくしないんです。
ジョイント内部でSQLを取得してもいいんですが、誰かが積極的にメンテをしているモジュールについては、自前のコントローラを持たない、というのがd3pipesのポリシーですから。(モジュールサイドに仕様変更があったときに致命的な障害になり得る)
引用:
(1)~(5)の部分とエラーは今もよくわかっていません
エラーについては、すでに書いた通りです。
(1)~(5)は、そのブロックが必要とするパラメータです。
どういう意味であるかは、ブロック表示関数から判断します。
大抵、$options という仮引数で受けているので、その流れを追えば、どういう意味であるか、どんな値を渡せば良いかは、だいたいわかります。
そして必要に応じて、ジョイントでそのパラメータを指定できるようにしてあげます。
今回のeguideブロック用ジョイントも、3つめのパラメータがeguideのカテゴリー絞り込みに相当するようになっています。