メイン
   XOOPS2テーマ
     Topページで中央ブロックの表示順を変えたい

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ohwada
投稿日時: 2005/1/25 22:58
長老
登録日: 2003/9/12
居住地: 横浜
投稿: 340
Re: Topページで中央ブロックの表示順を変えたい

header.php と テーマ の両方を変更する案を提案しておきます。
weight で上下を分けるので、任意の数を表示できます。

変更したファイルは下記で配布しています。
XOOPS header.php ハック版

header.php を変更する

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// これは残す
$xoopsTpl->append('xoops_ccblocks', array('title' => $block_arr[$i]->getVar('title'), 'content' => $bcontent));
 
// これを追加する
if ( $block_arr[$i]->getVar('weight') < 10)
{
$xoopsTpl->append('xoops_ccblocks_up', array('title' => $block_arr[$i]->getVar('title'), 'content' => $bcontent));
}
else
{
$xoopsTpl->append('xoops_ccblocks_down', array('title' => $block_arr[$i]->getVar('title'), 'content' => $bcontent));
}

テーマ(defualtの例)を変更する

変更前

1
2
3
4
5
6
7
<td id="centerCcolumn" colspan="2">
<!-- Start center-center blocks loop -->
<{foreach item=block from=$xoops_ccblocks}>
<{include file="default/theme_blockcenter_c.html"}>
<{/foreach}>
<!-- End center-center blocks loop -->
</td>

変更後

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<td id="centerCcolumn" colspan="2">
<!-- Start center-center-up blocks loop -->
<{foreach item=block from=$xoops_ccblocks_up}>
<{include file="default/theme_blockcenter_c.html"}>
<{/foreach}>
<!-- End center-center-up blocks loop -->
</td>
 
  :
  :
 
<td id="centerCcolumnDown" colspan="2">
<!-- Start center-center-down blocks loop -->
<{foreach item=block from=$xoops_ccblocks_down}>
<{include file="default/theme_blockcenter_c.html"}>
<{/foreach}>
<!-- End center-center-down blocks loop -->
</td>

style.css に下記を追加する

1
2
3
4
5
6
td#centerCcolumnDown {padding: 0px 3px 1px 3px;}
td#centerCcolumnDown legend.blockTitle {padding: 3px; color: #639ACE; font-weight: bold;
 margin-top: 0px; margin-right: 0px; margin-left: 0px;}
td#centerCcolumnDown div.blockContent {border-left: 1px  solid #cccccc; border-right: 1px solid #cccccc; 
border-bottom: 1px solid #dddddd; padding: 3px; margin-right: 0px; margin-left: 0px; margin-bottom: 2px;
 line-height: 120%;}
ohwada
投稿日時: 2005/6/30 23:35
長老
登録日: 2003/9/12
居住地: 横浜
投稿: 340
2.0.10JPにて、中央ブロックを上・下に割付る

2.0.10JPよりブロックのweight変数が追加になった。
これを利用すると、テーマを変更して、中央ブロックを上・下に割付ることができる。

themes/default/theme.html の変更例

変更前

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<!-- Start center-center blocks loop -->
<{foreach item=block from=$xoops_ccblocks}>
<{include file="default/theme_blockcenter_c.html"}>
<{/foreach}>
<!-- End center-center blocks loop -->
 
  :
  :
 
<!-- End center-right blocks loop -->
</td>
</tr>

変更後

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<!-- Start center-center-up blocks loop -->
<{foreach item=block from=$xoops_ccblocks}>
<{if $block.weight < 10 }>
<{include file="default/theme_blockcenter_c.html"}>
<{/if}>
<{/foreach}>
<!-- End center-center-up blocks loop -->
 
  :
  :
 
<!-- End center-right blocks loop -->
</td>
</tr>
 
<tr>
<td id="centerCcolumnDown" colspan="2">
<!-- Start center-center-down blocks loop -->
<{foreach item=block from=$xoops_ccblocks}>
<{if $block.weight >= 10 }>
<{include file="default/theme_blockcenter_c.html"}>
<{/if}>
<{/foreach}>
<!-- End center-center-down blocks loop -->
 
</td>
</tr>
GIJOE
投稿日時: 2005/8/3 5:46
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: Topページで中央ブロックの表示順を変えたい

一応、このスレッドにもつなげておきます。

onokazuさんにしつこくリクエストしたところ、2.0.10JPでweightをアサインしていただきました。ありがとうございます。
(Mithrandirさんの方はあいにくまだです:-P)
実は、XOOPS 2.2 でも、weightがアサインされていました(訂正)

せっかくweightをアサインしていただいたのですから、上だの下だのといったケチなことは言わず、中央部構成要素4種類を、weightだけで完全に自由にコントロールできるロジックを考えてみました。

そのロジック部分は、こんな感じです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<td id="centercolumn">
 
	<!-- Display center blocks if any -->
	<{if $xoops_showcblock == 1}>
 
	<{php}>
	$prev_htmls = array(
		'bdbd' => '' ,
		'bdcc' => '<table cellspacing="0"><tr><td class="centerCcolumn" colspan="2">' ,
		'bdcl' => '<table cellspacing="0"><tr><td class="centerLcolumn">' ,
		'bdcr' => '<table cellspacing="0"><tr><td class="centerLcolumn"></td><td class="centerRcolumn">' ,
		'ccbd' => '</td></tr></table>' ,
		'cccc' => '' ,
		'cccl' => '</td></tr><tr><td class="centerLcolumn">' ,
		'cccr' => '</td></tr><tr><td class="centerLcolumn"></td><td class="centerRcolumn">' ,
		'clbd' => '</td><td class="centerRcolumn"></td></tr></table>' ,
		'clcc' => '</td><td class="centerRcolumn"></td></tr><tr><td class="centerCcolumn" colspan="2">' ,
		'clcl' => '' ,
		'clcr' => '</td><td class="centerRcolumn">' ,
		'crbd' => '</td></tr></table>' ,
		'crcc' => '</td></tr><tr><td class="centerCcolumn" colspan="2">' ,
		'crcl' => '</td></tr><tr><td class="centerLcolumn">' ,
		'crcr' => '' ,
	) ;
 
 	$i = 0 ;
	$xoops_cblocks = array() ;
	foreach( $this->_tpl_vars['xoops_ccblocks'] as $i => $block ) {
		$weight = $block['weight'] * 65536 + $i ;
		$block['align'] = 'cc' ;
		$xoops_cblocks[ $weight ] =  $block ;
	}
	foreach( $this->_tpl_vars['xoops_clblocks'] as $i => $block ) {
		$weight = $block['weight'] * 65536 + $i + 16384 ;
		$block['align'] = 'cl' ;
		$xoops_cblocks[ $weight ] =  $block ;
	}
	foreach( $this->_tpl_vars['xoops_crblocks'] as $i => $block ) {
		$weight = $block['weight'] * 65536 + $i + 32768 ;
		$block['align'] = 'cr' ;
		$xoops_cblocks[ $weight ] =  $block ;
	}
	// body's weight = 100
	$xoops_cblocks[ 100 * 65536 + 49152 ] = array( 'align' => 'bd' ) ;
	ksort( $xoops_cblocks ) ;
	array_push( $xoops_cblocks , array( 'align' => 'bd' ) ) ;
	
	$prev_align = 'bd' ;
	foreach( $xoops_cblocks as $key => $block ) {
		$xoops_cblocks[$key]['prev_html'] = $prev_htmls[ $prev_align . $block['align'] ] ;
		$prev_align = $block['align'] ;
	}
 
	/* foreach( $xoops_cblocks as $key => $block ) {
		echo htmlspecialchars("$key:{$block['align']}:{$block['prev_html']}")."<br />" ;
	}
	exit ; */
 
	$last = array_pop( $xoops_cblocks ) ;
	$this->_tpl_vars['xoops_cblocks'] = $xoops_cblocks ;
	$this->_tpl_vars['xoops_cblocks_terminator'] = $last['prev_html'] ;
	<{/php}>
 
	<{foreach item=block from=$xoops_cblocks}>
	<{$block.prev_html}>
 
		<{if $block.align == "bd"}>
 
		<div id="content">
		<{$xoops_contents}>
		</div>
 
		<{else}>
 
		<div style="padding: 5px;">
		<{if $block.title|regex_replace:"/.*none/":"none" ne "none"}>
		<div class="blockTitle"><{$block.title}></div>
		<{/if}>
		<div class="blockContent"><{$block.content}></div>
		</div>
 
		<{/if}>
 
	<{/foreach}>
	<{$xoops_cblocks_terminator}>
 
	
	<{else}>
		<div id="content">
		<{$xoops_contents}>
		</div>
	
	<{/if}>
	<!-- End display center blocks -->
 
</td>

テーマ内に<{php}>ブロックが入るのが嫌かも知れませんが、それほど重くなる訳ではありませんし、見ようによっては、むしろ従来よりすっきりした、と言えなくもありません。

このロジックをtheme.htmlに導入することで、
こんな並び順も、weightの数値コントロールだけで可能です。
www.peak.ne.jp_50.gif


ロジック表記にミスがありました。
赤字の部分を追加してください。


XOOPS 2.2についての記述を追加
id ではなく class に変更

matuken
投稿日時: 2005/8/3 20:28
新米
登録日: 2005/7/28
居住地:
投稿: 20
Re: Topページで中央ブロックの表示順を変えたい

何時も大変お世話になっております。
GIJOE様、onokazu様、素晴らしいものを何時も何時も有難うございます。
念願のTOPページの中央ブロックでの自由配置を、ついに実現できるようになり、感動にむせび泣いております。 :lol:
まずは、取り急ぎ御礼まで。

ところで、早速テーマをDLさせていただきTOPページの表示順をご指示とおりに100を基準に設定して上手く機能しております。
ところが、インストールしたモジュールをメニューから選択すると、小生の環境のせいなのか表示されません。白紙状態。
ブラウザのソース表示で確認すると、
<td id="centercolumn">

	<!-- Display center blocks if any -->
		<!-- End display center blocks -->

</td>
と成ってましたので、

<div id="content">

		<{$xoops_contents}>
		</div>

を、<!-- End display center blocks -->以下に強引も持ってくるとメニューのモジュールのページが表示されるようになりました。
この場合の正しい対処法を、ご教授いただければ幸いです。

GIJOE
投稿日時: 2005/8/7 5:20
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: Topページで中央ブロックの表示順を変えたい

matukenさん、こんにちは。

引用:
ところで、早速テーマをDLさせていただきTOPページの表示順をご指示とおりに100を基準に設定して上手く機能しております。
ところが、インストールしたモジュールをメニューから選択すると、小生の環境のせいなのか表示されません。白紙状態。

よくよくtheme.htmlを見たら、<{if $xoops_showcblock == 1}><{/if}> の内側だったんですね(汗
というわけで、中央*ブロックがない時には、コンテンツも表示されない、という間抜けな事になってました。

現在は修正しています。ごめんなさい。

matuken
投稿日時: 2005/8/7 11:17
新米
登録日: 2005/7/28
居住地:
投稿: 20
Re: Topページで中央ブロックの表示順を変えたい

GIJOE様、早速ダウンロードして正本と入れ替えさせていただきました。

お手数お掛けして、すみませんでした。(ペコリ
これからも、宜しくお願い致しますです。

Kaz10
投稿日時: 2005/8/7 18:38
半人前
登録日: 2004/6/1
居住地:
投稿: 28
Re: Topページで中央ブロックの表示順を変えたい

さっそく使わせていただいております。
ありがとうございます :-)

勝手ながら、自サイトの配布テーマでもとり入れさせていただいたのですが、よろしかったでしょうか。
問題がありましたら、お知らせいただければ幸いです。

GIJOE
投稿日時: 2005/8/8 5:45
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: Topページで中央ブロックの表示順を変えたい

Kaz10さん、こんにちは。

引用:
勝手ながら、自サイトの配布テーマでもとり入れさせていただいたのですが、よろしかったでしょうか。
問題がありましたら、お知らせいただければ幸いです。

完全フリーなコードですので、どうぞご利用ください。
私も広まってくれた方が嬉しいですね。

ただ、ここに最初に書いたロジックにはミスがあったので、もしそちらを参考にしていたのだとしたら、赤字の部分の追加もお忘れ無く ;-)

takafuumi
投稿日時: 2005/8/11 5:05
半人前
登録日: 2005/4/16
居住地:
投稿: 32
Re: Topページで中央ブロックの表示順を変えたい

こんばんは。横から失礼します。

2.0.10 JPからこんな機能が加わっていたのですね。weightの図(?)は目にしたことがあったのですが、こういうことできたらいいなー、と指をくわえて見てました。(^^ゞ

ところで、早速利用させていただいたのですが、中央ブロックへスタイルシートがうまく適用されませんでしたのでソースを見てみたところ、一意であるはずのidが複数個所へ割り当てられていました。
そこで td id="center… を td class="center… へ置き換えると意図したとおりにスタイルシートが適用されました。(CSSも変更)
IEでの表示は確認していませんが(Firefoxで確認)少なくとも仕様には合っていませんので変更したほうがいいかと思われます。

GIJOE
投稿日時: 2005/8/11 5:23
長老
登録日: 2003/4/3
居住地:
投稿: 2137
Re: Topページで中央ブロックの表示順を変えたい

takafuumiさん、こんにちは。

引用:
ところで、早速利用させていただいたのですが、中央ブロックへスタイルシートがうまく適用されませんでしたのでソースを見てみたところ、一意であるはずのidが複数個所へ割り当てられていました。
そこで td id="center… を td class="center… へ置き換えると意図したとおりにスタイルシートが適用されました。(CSSも変更)
IEでの表示は確認していませんが(Firefoxで確認)少なくとも仕様には合っていませんので変更したほうがいいかと思われます。

ご指摘ありがとうございます。
仮にも`id`ってことはページ内で一意を意味するだろうし、id指定はまずいよなあ、と思いつつ、CSSまでいじるのが面倒(というか苦手)で、kihon1のままにしてしまいました :-D

CSS側はこんな感じにすればよろしいでしょうか?

1
2
3
4
/*中央-中央ブロックの定義*/
td.centerCcolumn {padding:0px 3px 1px 3px;}
td.centerCcolumn div.blockTitle {padding:3px; color:#639ace; font-weight:bold; margin-top:0px; margin-right:0px; margin-left:0px;}
td.centerCcolumn div.blockContent {border-left:1px solid #cccccc; border-right:1px solid #cccccc; border-bottom:1px solid #dddddd; padding:3px; margin-right:0px; margin-left:0px; margin-bottom:2px; line-height:130%;}

大丈夫なようなので、theme.htmlもstyle.css側も変更しました。

« 1 (2) 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 
To Top