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

picoのsmartyプラグイン 「タグに一致したコンテンツ一覧」プラグイン

投稿ツリー

  • なし picoのsmartyプラグイン 「タグに一致したコンテンツ一覧」プラグイン (tes, 2009/12/29 17:41)

このトピックの投稿一覧へ

tes

なし picoのsmartyプラグイン 「タグに一致したコンテンツ一覧」プラグイン

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/12/29 17:41 | 最終変更
tes  2nd Class   投稿数: 6
phpの習作として、picoのsmartyプラグイン「function.pico_list.php」を参考に、
タグに一致したコンテンツを一覧表示するsmartyプラグイン「function.pico_tags_list.php」を作ってみました。

picoのソースをあまり細かく読み込めてないので、見当違いな処理があるかもしれません。
詳しい皆様方、添削いただけたら幸いです。(とりあえずmodifierにしたほうがよかったのかなあ。)
特にGIJOE様、タグに一致したコンテンツをsmartyで一覧表示したいという需要は結構あるのではと思います。
また、picoは今のxoops界を支える重要なモジュールであると思いますので、お手数で申し訳ありませんが、まずい所は適当に直していただいて取り込んでいただくことはできませんでしょうか。何卒よろしくお願いいたします。

【使い方 その1】
<{pico_tags_list dir="pico1" cat_id="1" limit="5" label="test"}>
と記述することで、「pico1」モジュールのカテゴリID「1」内から「5」件を上限として、タグ「test」に一致するコンテンツを一覧表示します。

【使い方 その2】
<{pico_tags_list dir="pico1" cat_id="1" limit="5" label="test" item="block"}>

<{foreach from=$block item=foo}>
 <{$foo.subject}>
 <{$foo.body}>
<{/foreach}>
また、パラメータに「item」を指定することで、変数「block」にアサインすることも可能です。

【ソース】
function.pico_tags_list.php

<?php
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoModelTag.class.php' ;
require_once XOOPS_TRUST_PATH.'/modules/pico/class/PicoModelContent.class.php' ;

function smarty_function_pico_tags_list( $params , &$smarty )
{
	$mydirname = @$params['dir'] . @$params['dirname'] ;
	$cat_ids = @$params['id'] . @$params['cat_id'] ;
	$categories = trim( @$cat_ids ) === '' ? array() : array_map( 'intval' , explode( ',' , $cat_ids ) ) ;
	$label = @$params['label'] . @$params['tag'] ;
	$selected_order = empty( $params['order'] ) ? 'o.created_time DESC' : $params['order'] ;
	$limit_params = @$params['limit'] ;
	$limit_offset = empty( $limit_params ) ? '10' : preg_replace( '/[^0-9,]/' , '' , $limit_params ) ;
	if( strstr( $limit_offset , ',' ) ) {
		list( $offset , $limit ) = array_map( 'intval' , explode( ',' , $limit_offset ) ) ;
	} else {
		$offset = 0 ;
		$limit = intval( $limit_offset ) ;
	}
	$template = @$params['template'] ;
	$var_name = @$params['item'] . @$params['assign'] ;
	if( empty( $mydirname ) ) $mydirname = $smarty->get_template_vars( 'mydirname' ) ;
	if( empty( $mydirname ) ) {
		echo 'error '.__FUNCTION__.' [specify dirname]';
		return ;
	}
	if( empty( $template ) ) $template = 'db:'.$mydirname.'_block_list.html';

	// query type "tag"
	$whr = '1' ;
	$tag_handler =& new PicoTagHandler( $mydirname ) ;
	$content_ids_sc = $tag_handler -> getContentIdsCS( $label );
	if( $content_ids_sc ) $whr .= " AND (`content_id` IN (".$content_ids_sc."))" ;
	else $whr .= " AND 0" ;

	// content handler
	$content_handler =& new PicoContentHandler( $mydirname ) ;

	if( sizeof( $categories ) == 0 ) {
		// no category specified
		$contents4assign = $content_handler->getContents4assign( $whr , $selected_order , $offset , $limit , false ) ;
	} else if( sizeof( $categories) == 1 ) {
		// single category
		$contents4assign = $content_handler->getContents4assign( $whr.' AND o.cat_id='.$categories[0] , $selected_order , $offset , $limit , false ) ;
	} else {
		// multi category
		$contents4assign = $content_handler->getContents4assign( $whr.' AND o.cat_id IN ('.implode(',',$categories).')' , $selected_order , $offset , $limit , false ) ;
	}

	// contents (order by modified_time DESC)
	$assign['contents'] = array() ;
	foreach( $contents4assign as $content4assign ) {
		$assign['contents'][] = $content4assign ;
	}

	if( $var_name ) {
		// just assign
		$smarty->assign( $var_name , $contents4assign ) ;
	} else {
		// display
		require_once XOOPS_ROOT_PATH.'/class/template.php' ;
		$tpl =& new XoopsTpl() ;
		$assign['mod_url'] = XOOPS_URL.'/modules/'.$mydirname;
		$tpl->assign( 'block' , $assign ) ;
		$ret['content'] = $tpl->fetch( $template ) ;
		echo @$ret['content'] ;
	}
}

?>
投票数:1 平均点:10.00

  条件検索へ


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