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

【xsns】コミュニティ検索で新着順とメンバー数順で初期表示したい

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 | 投稿日時 2014/2/11 17:25
enagii  Petty Officer 居住地: 10ヶ月  投稿数: 74
お世話になります。

【使用環境】
【XOOPSバージョン】XOOPS Cube Legacy 2.2.2(XOOPS X)
【サーバー】Xserver X10
【PHPバージョン】5.3.3
【MySQLのバージョン】5.0.95
【Apache】2.2.23
【やりたいこと】
xsnsボタンを押して出るコミュニティ検索ページで新着順とメンバー順で表示させたい


<{$smarty.const._MD_XSNS_INDEX_SORT_MEMBER}>
とxsns_index.htmlに書いてあったので検索したり探したりしてますが

言語定数にあるのは確認したのですがその先が分からず詰まってます。

誠に恐縮ですが、ご教示願えませんでしょうか。
投票数:3 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/2/12 16:09 | 最終変更
nao-pon  Lieutenant   投稿数: 486
enagii さん、こんにちは。

引用:
【やりたいこと】
xsnsボタンを押して出るコミュニティ検索ページで新着順とメンバー順で表示させたい

この「やりたいこと」が、いまひとつはっきりしないので、お聞かせください。

1. 「xsnsボタン」とは、どのページの、どの部分でしょうか?

2. 「新着順とメンバー順で表示させたい」というのは、表示されている文言を変えたいということでしょうか?それとも、デフォルトの並び順を変更したいということでしょうか?

3. デフォルトの並び順を変更したいということであれば、「新着順でソートして更にメンバー順でソート」するのか、それとも場合によって「新着順」または「メンバー順」でソートしたいということでしょうか?
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014/2/13 7:30 | 最終変更
enagii  Petty Officer 居住地: 10ヶ月  投稿数: 74
nao-ponさん、こんにちは。

1.マルチメニューで作ったxsnsのページに飛ぶボタンです、クリックするとコミュニティ検索ページに飛びます。

2.デフォルトの並び順を変えたいです。

3.新着順でソートしたものとメンバー順でソートしたもの2つを表示したいです。

ソートしたURLがあってこのURLを<{$url.sort_member}>リンクに貼り付けるか絶対パス書き込んでしまうかとも考えたのですがそうすると片方ソートしたものしかできないので悩んでいます。

プログラム追ってってはいるのですがなかなかこのURL等が書いてある場所に辿りつけず。


お手数おかけしますが、宜しくお願い致します。m(_ _)m

【追記】平成26年2月13日8時00分
xoops_trust_path/modules/xsns/act/index
この中のdefaultAction.phpにソートの部分がちょっと書いてありました
投票数:2 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014/2/13 10:28
nao-pon  Lieutenant   投稿数: 486
なるほど、理解できました。

ページャーがあるので、複数のソート結果を表示するのは複雑になりますので、2ページ目以降は単独ソートになりますが、defaultAction.php の function dispatch() をちょっといじってみました。

modules/xsns/?sort=date&sort2=member といったリンクで、最新順の結果が Smarty 変数の $pager, $commu_list に メンバー数順の結果が $pager2, $commu_list2 にアサインされますので、あとはテンプレートでご自由に配置してください。

動作検証はあまりしていないので、なにか問題があるかもしれませんが、プロトタイプということでご了承ください。

function dispatch()
{
	$limit = 10;
	
	$sess_handler =& XsnsSessionHandler::getInstance();
	$sess_handler->clearVars();
	
	$cid = $this->getIntRequest('cid', XSNS_REQUEST_GET);
	
	if($cid > 0){
		$commu_detail = $this->getCommunityDetail($cid);
		$this->context->setAttribute('commu', $commu_detail);
		
		return "detail";
	}
	
	$start = $this->getIntRequest('s', XSNS_REQUEST_GET);
	if(!isset($start) || $start<0){
		$start = 0;
	}
	
	$cat_id = $this->getIntRequest('cat_id', XSNS_REQUEST_GET);
	$keyword = $this->getTextRequest('keyword', XSNS_REQUEST_GET);
	$sort_method = $this->getTextRequest('sort', XSNS_REQUEST_GET);
	$sort_method2 = $this->getTextRequest('sort2', XSNS_REQUEST_GET);
	
	$commu_handler =& XsnsCommunityHandler::getInstance();
	
	foreach(array('', '2') as $_key) {
		
		$_sort = 'sort_method'.$_key;
		if ($_key && !$$_sort) continue;
		
		$criteria = new CriteriaCompo();
		$criteria->setLimit($limit);
		$criteria->setStart($start);
		
		if($cat_id > 0){
			$criteria->add(new Criteria('c_commu_category_id', $cat_id));
		}
		if($keyword != ''){
			$kw_criteria = new CriteriaCompo(new Criteria('name', '%'.$keyword.'%', 'LIKE'));
			$kw_criteria->add(new Criteria('info', '%'.$keyword.'%', 'LIKE'), 'OR');
			$criteria->add($kw_criteria);
		}
		
		switch($$_sort){
			case 'date':
			default:
				$criteria->setSort('cc.r_datetime');
				$criteria->setOrder('DESC');
				break;
			
			case 'member':
				$criteria->setSort('member_count');
				$criteria->setOrder('DESC');
				break;
			
			case 'pop':
				$criteria->setSort('cc.popularity');
				$criteria->setOrder('DESC');
				break;
			
			case 'up':
				$criteria->setSort('cc.update_freq');
				$criteria->setOrder('DESC');
				break;
		}
		
		$_list = 'commu_list'.$_key;
		$_total = 'commu_total'.$_key;
		$$_list =& $commu_handler->getList($criteria);
		$$_total = $commu_handler->getCount($criteria);
		
		$base_url = XSNS_URL_COMMU.'?';
		if($cat_id > 0){
			$base_url .= "&cat_id=".$cat_id;
		}
		if($keyword != ''){
			$base_url .= "&keyword=".rawurlencode($keyword);
		}
		
		if($$_sort=='member' || $$_sort=='date' || $$_sort=='pop' || $$_sort=='up'){
			$base_url .= '&sort='.$$_sort;
		}
		
		$_pager = 'pager'.$_key;
		$$_pager = $this->getPageSelector($base_url, 
					$start, $limit, count($$_list), $$_total);
	
	}
	
	$category_handler =& XsnsCategoryHandler::getInstance();
	$category_parent_handler =& XsnsCategoryParentHandler::getInstance();
	$category_selector = $category_handler->getSelectorHtml('cat_id', 0, _MD_XSNS_INDEX_CATEGORY_NO);
	$category_list =& $category_parent_handler->getList();

	if(count($commu_list)==0){
		$pager['description'] = _MD_XSNS_INDEX_COMMU_COUNT0;
	}
	
	$keyword_option = empty($keyword)? '' : '&keyword='.rawurlencode($keyword);
	$cat_id_option = empty($cat_id)? '' : '&cat_id='.$cat_id;
	
	$url = array(
		'sort_member' => XSNS_URL_COMMU.'?sort=member'. $keyword_option. $cat_id_option,
		'sort_date' => XSNS_URL_COMMU.'?sort=date'. $keyword_option. $cat_id_option,
		'sort_pop' => XSNS_URL_COMMU.'?sort=pop'. $keyword_option. $cat_id_option,
		'sort_up' => XSNS_URL_COMMU.'?sort=up'. $keyword_option. $cat_id_option,
	);
	
	$this->context->setAttribute('is_guest', $this->isGuest());
	$this->context->setAttribute('keyword', $keyword);
	$this->context->setAttribute('url', $url);
	$this->context->setAttribute('category_selector', $category_selector);
	$this->context->setAttribute('category_list', $category_list);
	$this->context->setAttribute('pager', $pager);
	$this->context->setAttribute('commu_list', $commu_list);
	if (isset($commu_list2)) {
		$this->context->setAttribute('pager2', $pager2);
		$this->context->setAttribute('commu_list2', $commu_list2);
	}
}
投票数:4 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2014/2/13 15:54
enagii  Petty Officer 居住地: 10ヶ月  投稿数: 74
nao-ponさんありがとうございます。

defaultAction.phpに先ほどのコードを追加し、FTPソフトでアップロード。

次に
マルチメニューのリンクを
サイトURL/modules/xsns/?sort=date&sort2=member
こちらに変更しました。

次にxsnsのテンプレートを編集しました

xsns_index.htmlを
<div id="mainFrame">

<!-- Community Search -->
<table class="outer commuSearch">

<tr class="even"><th colspan="2"><{$smarty.const._MD_XSNS_INDEX_SEARCH}></th></tr>

<{$form_search}>

<tr class="even">
<td colspan="2">
<{$smarty.const._MD_XSNS_INDEX_KEYWORD}>
<input type="text" name="keyword" value="<{$keyword}>">&nbsp;
<{$smarty.const._MD_XSNS_CATEGORY}>

<{$category_selector}>

&nbsp;
<input type="submit" class="submit" value="<{$smarty.const._MD_XSNS_BTN_SEARCH}>">
</td>
</tr>

</form>

<{if !$is_guest}>
<tr class="even">
<td colspan="2" style="text-align:right;">
<a href="<{$xoops_url}>/modules/<{$mydirname}>/?act=add"><{$smarty.const._MD_XSNS_INDEX_ADD}></a>&nbsp;<{$smarty.const._MD_XSNS_INDEX_ADD_DESC}>
</td>
</tr>
<{/if}>

<tr class="even">
<td colspan="2">
<{$smarty.const._MD_XSNS_INDEX_SORT}>&nbsp;
<a href="<{$url.sort_member}>"><{$smarty.const._MD_XSNS_INDEX_SORT_MEMBER}></a>&nbsp;|
<a href="<{$url.sort_date}>"><{$smarty.const._MD_XSNS_INDEX_SORT_DATE}></a>&nbsp;|
<a href="<{$url.sort_pop}>"><{$smarty.const._MD_XSNS_INDEX_SORT_POP}></a>&nbsp;|
<a href="<{$url.sort_up}>"><{$smarty.const._MD_XSNS_INDEX_SORT_UP}></a>
</td>
</tr>

<{foreach item=category from=$category_list}>
<tr class="even">
<td class="parentCategory"><{$category.name}></td>
<td class="childCategory"><{$category.selector}></td>
</tr>
<{/foreach}>

</table>
<br>

<!-- Community List -->
<table class="outer commuList">

<tr><th><{$smarty.const._MD_XSNS_INDEX_LIST}></th></tr>

<{if $commu_list|@count > 0}>
<tr><td class="odd centerH"><{$pager.selector}></td></tr>
<{/if}>
<tr><td class="odd" style="text-align:right;"><{$pager.description}></td></tr>

<{if $commu_list|@count > 0}>
<tr><td class="odd blankRow"></td></tr>
<{/if}>

<{foreach item=commu from=$commu_list}>

<tr><td>
<table class="outer" style="width:100%;">

	<tr class="even">
	<td rowspan="4" class="image">
	<a href="<{$commu.page_url}>"><img src="<{$commu.image.url_src|default:"images/cm_commu_default1.gif"}>" alt=""></a>
	</td>
	<td class="itemTitle"><{$smarty.const._MD_XSNS_COMMU_NAME}></td>
	<td colspan="2" class="centerV"><{$commu.name}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_MEMBER_COUNT}></td>
	<td colspan="2"><{$commu.member_count}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_INDEX_DETAIL_DESC}></td>
	<td colspan="2" class="centerV"><{$commu.info|mb_truncate:200}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_CATEGORY}></td>
	<td class="category"><{$commu.category_name}></td>
	<td class="detail"><a href="<{$commu.page_url}>"><{$smarty.const._MD_XSNS_INDEX_DETAIL}></a></td>
	</tr>
</table>
</td></tr>

<tr><td class="odd blankRow"></td></tr>

<{/foreach}>

<{if $commu_list|@count > 0}>
<tr><td class="odd centerH"><{$pager.selector}></td></tr>
<tr><td class="odd" style="text-align:right;"><{$pager.description}></td></tr>
<{/if}>
</table>

<!-- メンバー順で表示 -->
<table class="outer commuList">

<tr><th><{$smarty.const._MD_XSNS_INDEX_LIST}></th></tr>

<{if $commu_list2|@count > 0}>
<tr><td class="odd centerH"><{$pager2.selector}></td></tr>
<{/if}>
<tr><td class="odd" style="text-align:right;"><{$pager2.description}></td></tr>

<{if $commu_list2|@count > 0}>
<tr><td class="odd blankRow"></td></tr>
<{/if}>

<{foreach item=commu from=$commu_list2}>

<tr><td>
<table class="outer" style="width:100%;">

	<tr class="even">
	<td rowspan="4" class="image">
	<a href="<{$commu.page_url}>"><img src="<{$commu.image.url_src|default:"images/cm_commu_default1.gif"}>" alt=""></a>
	</td>
	<td class="itemTitle"><{$smarty.const._MD_XSNS_COMMU_NAME}></td>
	<td colspan="2" class="centerV"><{$commu.name}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_MEMBER_COUNT}></td>
	<td colspan="2"><{$commu.member_count}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_INDEX_DETAIL_DESC}></td>
	<td colspan="2" class="centerV"><{$commu.info|mb_truncate:200}></td>
	</tr>

	<tr class="even">
	<td class="itemTitle"><{$smarty.const._MD_XSNS_CATEGORY}></td>
	<td class="category"><{$commu.category_name}></td>
	<td class="detail"><a href="<{$commu.page_url}>"><{$smarty.const._MD_XSNS_INDEX_DETAIL}></a></td>
	</tr>
	

</table>
</td></tr>

<tr><td class="odd blankRow"></td></tr>

<{/foreach}>

<{if $commu_list2|@count > 0}>
<tr><td class="odd centerH"><{$pager2.selector}></td></tr>
<tr><td class="odd" style="text-align:right;"><{$pager2.description}></td></tr>
<{/if}>
</table>

</div>

これで表示することが出来ました!

本当にありがとうございます。

不具合がありましたらここに報告します。

それとnao-ponさんのコードを見て勉強します。

自分でモジュールでも作らないとこういうのを作るのは難しいですね

投票数:2 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/2/13 19:17
nao-pon  Lieutenant   投稿数: 486
無事に思い通りにできてよかったです。

思いついて、突貫でいじったのであのような形になってますが、本当は foreach で回している中身は別メソッド(関数)にして外に出した方がわかりやすくていいと思いました。

また、今回はテンプレート編集だけでは目的が果たせず、PHP を触っているので、本流がアップデートした場合に、上書きされて変更分が失われてしまうことがあるので、変更分はバックアップをとっておき、本流のバージョンアップ時にマージする必要がありますので、その点はお気をつけください。

あと、別にモジュールを自分で作らなくても、まずは自分の好みに改造して、それをこんな改造をしましたと開発元に知らせると、それがいい提案だと思えば本流に取り入れられて、バージョンアップ時にも無駄な手間を省くことができ、お互いに幸せになれると思います。

原状は、開発は GitHub で行われていることが多いので、今回を契機に GitHub のアカウントを作って、気になるリポジトリをフォークして、自分なりにいじってみると楽しいと思います。

GitHub には PullRequest という仕組みがあり、自分の改造分を簡単に提案できるので、とてもたのしいですよ。

ということで、今後ともよろしくお願いします。
投票数:3 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2014/2/13 23:53
enagii  Petty Officer 居住地: 10ヶ月  投稿数: 74
バックアップはローカルとサーバーに分けて取ってるので大丈夫です。

GitHub利用したこと無いので色々試してみます。

こちらこそ宜しくお願い致します。
投票数:3 平均点:10.00
  条件検索へ

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