XPressME Integration Kit

フォーラム

特定のモジュールページにxpressMEのブロックを表示させる方法

永らくありがとうございました フォーラム 使い方全般 特定のモジュールページにxpressMEのブロックを表示させる方法

このトピックには3件の返信が含まれ、2人の参加者がいます。8 年、 10 ヶ月前 匿名 さんが最後の更新を行いました。

4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #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

    そもそもこのようなブロック表示には無理があるのでしょうか。

    解決策等あればご教授いただきたく、宜しくお願いいたします。

    #3191

    toemon
    キーマスター

    お問い合わせの内容を実現する上で下記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>

    のようにすれば実現できると思います。

    #3192

    toemon
    キーマスター

    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テンプレート変数」にリストされたものだけです。

    #3193

    匿名

    toemon様

    こちら、再現できた旨のお返事をしたつもりでおりました。

    無事にpicoの特定ページにタグクラウドを表示させることができました。

    誠にありがとうございます!

4件の投稿を表示中 - 1 - 4件目 (全4件中)

このトピックに返信するにはログインが必要です。