特定のモジュールページにxpressMEのブロックを表示させる方法
永らくありがとうございました › フォーラム › 使い方全般 › 特定のモジュールページにxpressMEのブロックを表示させる方法
- このトピックには3件の返信、2人の参加者があり、最後に
匿名により12年前に更新されました。
-
投稿者投稿
-
2010 年 9 月 13 日 1:35 AM #2661
匿名
ゲストtoemon 様
こんにちは。
いつもお世話になります。
ただいま、picoとxpressMEを使ってサイトを構築しています。
picoで特定ページを表示した際のみ、
xpressMEのタグクラウドブロックを表示できないかと
考えております。
(イメージ)サイト中央
※特定のコンテンツページ
・picoコンテンツ
・xpressMEのタグクラウド
いろいろ調べましたところ、
http://www.xugj.org/modules/xpwiki/?Smarty%E5%B0%8F%E3%83%8D%E3%82%BF
こちらのSmarty小ネタに特定のページかどうか?を判断する例がありました。
<code><{if $xoops_requesturi == '/modules/(modulename)/index.php'}><br /> <{/if}></code>
まず試しに、タグクラウドブロックのテンプレートを以下のようにしてみました。
<code><{if $xoops_requesturi == '/modules/pico/001.html'}><br /> <div class="xpress_block"><br /> <{$block.err_message}><br /> <div class="xpress_tag_cloud_block"><br /> <{$block.tag_cloud}><br /> </div><br /> </div><br /> <{/if}></code>
タグクラウドブロックをインストールしてみたところ、
特定のページではなくpicoページ全てに反映されました。
次に、直接サイトテーマファイルに埋め込んで見ました。
以下のようにサイトテーマをモジュールごとに振り分けて
<code><{if $xoops_modulename == "pico"}><br /> <{include file="<code>$xoops_theme</code>/pico.html"}><br /> <{else}><br /> <{include file="<code>$xoops_theme</code>/other.html"}><br /> <{/if}></code>
pico.html内の中央ブロックにタグクラウドのテンプレタグを挿入。
<code><{if $xoops_requesturi == '/modules/pico/001.html'}><br /> <div class="xpress_block"><br /> <{$block.err_message}><br /> <div class="xpress_tag_cloud_block"><br /> <{$block.tag_cloud}><br /> </div><br /> </div><br /> <{/if}></code>
この場合はまったく表示されませんでしたorz
そもそもこのようなブロック表示には無理があるのでしょうか。
解決策等あればご教授いただきたく、宜しくお願いいたします。
2010 年 9 月 15 日 1:47 AM #3191toemon
キーマスターお問い合わせの内容を実現する上で下記2点の問題があります。
- ブロックテンプレート内では$xoops_requesturiなどのXOOPS Smarty変数が利用出来ない。
- ブロックの内容が空であってもブロックが表示される。
1番目の問題に対処するには、$_SERVERをブロック内で利用出来るSmarty変数にassignしておき、それを判定に利用する必要があります。
include/xpress_block_render.phpの168行眼あたり
<code>$temp_option = explode(':' , $options[1]);</code>
に$block = $_SERVER;を追加する。
<code>$block['request_uri'] = $_SERVER['REQUEST_URI'];<br /> $temp_option = explode(':' , $options[1]);</code>
2番目の問題に対処するには、
include/xpress_block_render.phpの184,5行眼あたり
<code>return $ret ;</code>
を
<code>if(preg_match('/S/',$ret['content'])){<br /> return $ret ;<br /> }else {<br /> return null;<br /> }</code>
に変更する。
上記の変更を行った上で (Ver2.3.4で変更いたします。)
ブロックテンプレート側で
<code><{if $block.request_uri == '/cube/modules/pico/index.php?content_id=3'}><br /> <div class="xpress_block"><br /> <{$block.err_message}><br /> <div class="xpress_tag_cloud_block"><br /> <{$block.tag_cloud}><br /> </div><br /> </div><br /> <{/if}></code>
のようにすれば実現できると思います。
2010 年 9 月 15 日 1:50 AM #3192toemon
キーマスターky982339さん、こんにちは
お問い合わせの内容を実現する上で下記2点の問題があります。
- ブロックテンプレート内では$xoops_requesturiなどのXOOPS Smarty変数が利用出来ない。
- ブロックの内容が空(含む空白行)であってもブロックが表示される。
1番目の問題に対処するには、$_SERVERをブロック内で利用出来るSmarty変数にassignしておき、それを判定に利用する必要があります。
include/xpress_block_render.phpの168行目あたり
<code>$temp_option = explode(':' , $options[1]);</code>
に$block = $_SERVER;を追加する。
<code>$block['request_uri'] = $_SERVER['REQUEST_URI'];<br /> $temp_option = explode(':' , $options[1]);</code>
2番目の問題に対処するには、
include/xpress_block_render.phpの184,5行目あたり
<code>return $ret ;</code>
を
<code>if(preg_match('/S/',$ret['content'])){<br /> return $ret ;<br /> }else {<br /> return null;<br /> }</code>
に変更する。
(これらは、チケット #372に登録し チェンジセット 656にて変更させていただきました) Ver2.3.4にて対応済みです。
上記の変更を行った上で
ブロックテンプレート側で
<code><{if $block.request_uri == '/cube/modules/pico/index.php?content_id=3'}><br /> <div class="xpress_block"><br /> <{$block.err_message}><br /> <div class="xpress_tag_cloud_block"><br /> <{$block.tag_cloud}><br /> </div><br /> </div><br /> <{/if}></code>
みたいな感じで、$block.request_uriで判定するようにすれば実現できると思います。(タグクラウドブロックの表示先にpicoモジュールを設定することをお忘れ無く)
/cube/modules/pico/index.php?content_id=3の部分は実際に表示したいページのrequest_uriに読み替えてください。
また、
直接サイトテーマファイルに埋め込んで
の方法は、$block smarty変数はブロックをレンダリングする際に利用するもので、テーマテンプレート内では利用出来ないため無理があります。
備考、現在テーマテンプレート内でご利用いただけるXPressMEのsmarty変数は
「XOOPS smartyテンプレート変数」にリストされたものだけです。
2011 年 1 月 24 日 3:30 PM #3193匿名
ゲストtoemon様
こちら、再現できた旨のお返事をしたつもりでおりました。
無事にpicoの特定ページにタグクラウドを表示させることができました。
誠にありがとうございます!
-
投稿者投稿
- フォーラム「使い方全般」には新規投稿および返信を追加できません。