XPressME Integration Kit

フォーラム

人気記事リスト(***_popular_posts_block.html)の表示について

ようこそ フォーラム 使い方全般 人気記事リスト(***_popular_posts_block.html)の表示について

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

15件の投稿を表示中 - 1 - 15件目 (全23件中)
  • 投稿者
    投稿
  • #2620

    匿名

    toemon様

    いつもお世話になります。

    xpressMEは順調に動いております。

    まだ以前の挙動の再現には至っておりませんが、

    見られ次第ご報告させていただきます。

    今回、xoops側のブロック表示についてご相談がございます。

    xoopsブロック表示で、人気記事リスト(***_popular_posts_block.html)を表示させると、

    箇条書きで記事タイトルが表示されると思います。

    こちらを順位表示のように見せることは可能でしょうか。

    1位 記事タイトル

    2位 記事タイトル

    3位 記事タイトル

    というように表示させることが出来ないかと思いまして。

    テキストか、出来れば画像で表示するなどは可能でしょうか。

    ご教授いただければい幸いです。

    どうぞよろしくお願いいたします。

    #2959

    toemon
    キーマスター

    テンプレート **_popular_posts_block.html

    <br />
    <div class="xpress_block"><br />
    <{$block.err_message}><br />
    <div class="xpress_popular_post_block"><br />
    <ul><br />
    <{foreach from=$block.contents item=content}><br />
    <li><br />
    <{$content.post_title}> (<{$content.post_views}>)<br />
    </li><br />
    <br />
    <{/foreach}><br />
    </ul><br />
    <br />
    </div><br />
    </div><br />
    

    <br />
    <div class="xpress_block"><br />
    <{$block.err_message}><br />
    <div class="xpress_popular_post_block"><br />
    <{php}> $ranking = 1;<{/php}><br />
    <{foreach from=$block.contents item=content}><br />
    <div class="populor_ranking"><br />
    <{php}><br />
    $ranking_text = $ranking . '位';<br />
    $image_url = 'http://www.exsample.com/uploads/ranking_' . $ranking . '.gif';<br />
    if (@fclose(@fopen($image_url, "r"))){<br />
    echo '<img src="' . $image_url . '" alt="' . $ranking_text . '"/>';<br />
    }else{<br />
    echo $ranking_text . '' ;<br />
    }<br />
    <{/php}><br />
    <{$content.post_title}> (<{$content.post_views}>)<br />
    </div><br />
    <{php}> $ranking++;<{/php}><br />
    <{/foreach}><br />
    <br />
    </div><br />
    </div><br />
    

    みたいな感じにすれば出来るかも・・・

    画像はranking_1.gif,ranking_2.gif・・・なければ、文字(1位,2位・・・)を表示

    #2960

    匿名

    toemon様

    画像、テキストどちらの表示も出来ました。

    ありがとうございます!

    ちなみに、この人気記事リストブロックですが、月単位での表示ではなく、

    今日の人気記事リストを表示させることは可能でしょうか。

    度重なる要望で誠に恐縮ですが、

    ご教授いただければ幸いです。

    あと、非常に初歩的な質問なのですが、

    xpressMEのxoopsブロック表示には無い機能(WPプラグイン)を使って

    xoopsブロック表示させる場合、wp側でウィジェット(サイドバー)表示させたものを、

    xpessMEのサイドバーブロックで表示させるという方法のみでしょうか。

    サイトのサイドバーに、各記事のサムネイル画像+タイトルを

    ブロック表示で並べられないかと考えています。

    その場合、サムネイルを引っぱってくるプラグインを使用して、

    wpウィジェットのサイドバーに適用し、それをxpressMEのサイドバーブロックで

    表示させるという流れは適当でしょうか。

    よくプラグインを適用させるために、

    「このコードを表示させたい場所に貼ってください」

    という場合があると思います。

    私の場合、サイトのテーマはxoopsなので、

    wp側のテーマに貼り付けてしまうと、

    xoops特有のブロックでの表示が出来ないのではないか

    とやや迷走しております。

    最近の記事内容ブロックで、サムネイル+タイトル表示のみ表示する

    みたいな機能があればいいのですが・・・。

    #2961

    toemon
    キーマスター

    ky982339さんこんにちは、

    ちなみに、この人気記事リストブロックですが、月単位での表示ではなく、

    今日の人気記事リストを表示させることは可能でしょうか。

    人気記事リストブロックは閲覧数をもとに作成されていますが、閲覧数は、日付ごとの集計をとれるようなデータ構成になっていないため、無理です。

    アクセスログを取るプラグインを使用し、プラグインが作成するデータベースをクエリーして目的のデータを取得するというのが一番近道かと思います。

    xpressMEのxoopsブロック表示には無い機能(WPプラグイン)を使って

    xoopsブロック表示させる場合、wp側でウィジェット(サイドバー)表示させたものを、

    xpessMEのサイドバーブロックで表示させるという方法のみでしょうか。

    サイドバーのウィジェットとして表示されるものであれば、ウィジェットブロックより目的のウィジェットを選択して表示することができます。

    私の場合、サイトのテーマはxoopsなので、

    wp側のテーマに貼り付けてしまうと、

    xoops特有のブロックでの表示が出来ないのではないか

    とやや迷走しております。

    サイトのテーマ(表示モード)がxoopsであってもレンダリングについてはWordPressのテーマを使用していますので、特に問題はないと思います。

    例えばWordPress側で選択できるテーマとしてxpress_defaultテーマがありますが、これを他のテーマにしてみると、多少レイアウトは崩れますが、それなりに表示されることが分かると思います。

    つまりXPressME IntegRation Kit ではレンダリング様にWordPress テーマを使用しており、XPressME Ver1.X と同じような見栄えのxpress_defaultテーマを準備しデフォルトテーマとしているだけなのです。

    デフォルトのテーマを自分なりに修正するのであれば、自分なりのテーマを作成してしまうのが、一番手っ取り早いと思います。

    テーマをカスタマイズ(自分のテーマを作成)するには

    テーマのカスタマイズ」を参照ください。

    またブロックについては選択したテーマのblocksディレクトリ内の各phpファイル(もし選択しているテーマ内に該当ディレクトリやファイルがない場合は、xpress_defaultテーマにあるphpファイルが使われます。)によりsmarty変数にアサインする配列データを作成しています。

    #2962

    toemon
    キーマスター

    最近の記事内容ブロックで、サムネイル+タイトル表示のみ表示する

    みたいな機能があればいいのですが・・・。

    ブロックで使われるsmarty変数用のデータもテーマ内のblocksにあるファイルから作成されますので、カスタマイズすることにより、必要なsmarty変数を追加したりすることができます。

    例えばQF-GetThumbプラグインで取得した記事内の画像サムネイルを最近の記事内容ブロックのsmarty変数に追加したい場合、テーマ内のblocksにあるrecent_posts_content_block_theme.phpを変更することで実現されます。

    以下のコード例では177~180行の部分と200行の部分を追加しています。

    <br />
    $post_viwes = xpress_post_views_count('post_id=' . $post_id . '&format=' . __('Views :%d', 'xpress'). '&echo=0');<br />
    <br />
    if (function_exists('the_qf_get_thumb_one'))<br />
    $thumb = the_qf_get_thumb_one("num=0&width=100");<br />
    else<br />
    $thumb = '';<br />
    <br />
    //			if (empty($tags)) $tags = __('Not Tag');<br />
    <br />
    $row_data = array(<br />
    'post_id'		=> $post_id ,<br />
    'post_title'	=> $post_title ,<br />
    'post_content' 		=> $post_content ,<br />
    'post_date' => $post_date ,<br />
    'post_time' => $post_time ,<br />
    'post_date_time' => $post_date_time ,<br />
    'post_modified_date' => $post_modified_date ,<br />
    'post_modified_time' => $post_modified_time ,<br />
    'post_modified_date_time' => $post_modified_date_time ,<br />
    'post_author' 	=> $author ,<br />
    'post_category' 	=> $category ,<br />
    'post_tags' 		=> $tags,<br />
    'post_views' 		=> $post_viwes,<br />
    'comment_link' 	=> $comments_popup_link ,<br />
    'trackback_url' => $trackback_url ,<br />
    'thumb' => $thumb ,<br />
    'all_in_one' => $all_in_one<br />
    );<br />
    

    これで、ブロックのテンプレート側からsmarty変数thumbを使えるようになります。

    あとは、ブロックテンプレート側で

    <br />
    <div class="xpress_block"><br />
    <{$block.err_message}><br />
    <div class="xpress_recent_post_content_block"><br />
    <ul><br />
    <{foreach from=$block.contents item=content}><br />
    <{$content.all_in_one}><br />
    <{/foreach}><br />
    </ul><br />
    <br />
    </div><br />
    </div><br />
    

    の部分を

    <br />
    <div class="xpress_block"><br />
    <{$block.err_message}><br />
    <div class="xpress_recent_post_content_block"><br />
    <ul><br />
    <{foreach from=$block.contents item=content}><br />
    <{$content.post_title}><br />
    <{$content.thumb}><br />
    <{/foreach}><br />
    </ul><br />
    <br />
    </div><br />
    </div><br />
    

    とかやれば、最近の記事内容ブロックでタイトルとサムネイルだけを表示することができます。

    #2963

    匿名

    toemon様

    いくつか解決策をいただきありがとうございます。

    人気記事リストブロックは閲覧数をもとに作成されていますが、閲覧数は、日付ごとの集計をとれるようなデータ構成になっていないため、無理です。

    なるほど。そのような理由があるのですね。

    サイドバーのウィジェットとして表示されるものであれば、ウィジェットブロックより目的のウィジェットを選択して表示することができます。

    すいません。見逃しておりました。

    最新バージョンではウィジェットブロックが追加されたんですね。

    ウィジェット表示が可能なプラグインがあれば可能なのですね。

    例えばQF-GetThumbプラグインで取得した記事内の画像サムネイルを最近の記事内容ブロックのsmarty変数に追加したい場合、テーマ内のblocksにあるrecent_posts_content_block_theme.phpを変更することで実現されます。

    以前、あるフォーラムで質問した際に知ったのですが、

    モジュールによってはテンプレートファイルを複製することが

    可能だということで、実際に再現することができました。

    たとえば、xpressmeの場合、

    以下のテンプレートが関連付けされていると思います。

    (wp側)recent_posts_content_block_theme.php

    (xoopsブロック側)recent_posts_content_block_theme.html

    xoopsブロック表示で、最近の記事内容を複製して

    センターとサイドに表示させたいとします。

    センターではデフォルトの表示。

    サイドでは、記事のサムネイル+記事タイトルのみを表示させたい場合、

    recent_posts_content_block_theme.phpおよび

    recent_posts_content_block_theme.htmlを編集してしまうと、

    両方(センターブロック・サイドブロック)に反映させれてしまうと思います。

    例えば、

    recent_posts_content_block_theme2.php

    recent_posts_content_block_theme2.html

    というようにテンプレートファイル自体を複製すれば

    それぞれ独立させるということは可能なのでしょうか。

    #2964

    toemon
    キーマスター

    xoopsブロック表示で、最近の記事内容を複製して

    センターとサイドに表示させたいとします。

    センターではデフォルトの表示。

    サイドでは、記事のサムネイル+記事タイトルのみを表示させたい場合、

    recent_posts_content_block_theme.phpおよび

    recent_posts_content_block_theme.htmlを編集してしまうと、

    両方(センターブロック・サイドブロック)に反映させれてしまうと思います。

    なるほど、複製での使用での話ですね、ページ全体の構成がよくわかっていないものですから、とんちんかんな回答をしてしまいました。 orz

    結論をのべさせてもらうと、現状では無理です。(Ver2.3.Xあたりで挑戦してみます)

    後は、テンプレート側でのデザインは出来ませんが、

    拡張ブロックを使用して、拡張ブロック用のファイル側でレンダリングするしかなさそうです。

    [拡張ブロック用のファイルのコード例]

    <br />
    <?php<br />
    global $wpdb;<br />
    $show_posts =5;<br />
    if (!is_null($wpdb)){<br />
    $wp_query->in_the_loop = true;<br />
    $r = new WP_Query("showposts=$show_posts&what_to_show=posts&nopaging=0&post_status=publish");<br />
    while($r->have_posts()){<br />
    $r->the_post();<br />
    if(function_exists('the_qf_get_thumb_one')){<br />
    echo the_qf_get_thumb_one("num=0&width=100");<br />
    }<br />
    echo '<a href="'. get_permalink() . '">' . the_title('<h2>','</h2>',false) . '</a>';<br />
    }<br />
    }<br />
    ?><br />
    

    #2965

    toemon
    キーマスター

    ちなみに、この人気記事リストブロックですが、月単位での表示ではなく、

    今日の人気記事リストを表示させることは可能でしょうか。

    人気記事リストブロックは閲覧数をもとに作成されていますが、閲覧数は、日付ごとの集計をとれるようなデータ構成になっていないため、無理です。

    アクセスログを取るプラグインを使用し、プラグインが作成するデータベースをクエリーして目的のデータを取得するというのが一番近道かと思います。

    <設置例>

    アクセスログのプラグインでCounterize IIを使う場合

    拡張ブロックを利用して、

    以下のようなコードを置けば、過去24時間以内のログからアクセスの多い記事を取得できると思います。

    <br />
    <?php<br />
    if (function_exists('counterize_renderstats_vertical')){<br />
    $number = 3;<br />
    $onedayago = date("Y-m-d", time()-86400);<br />
    $wpdb =& $GLOBALS;<br />
    $sql = "SELECT p.count as amount, p.url as url, p.url as label, p.postID as post_id , COUNT(m.id) as  day_count"<br />
    . " FROM " .counterize_logTable(). " m, " . counterize_pageTable(). " p "<br />
    . " WHERE m.pageID = p.pageID and p.postID IS NOT NULL and "<br />
    . " m.timestamp >= '$onedayago'"<br />
    . " GROUP BY p.url "<br />
    . " ORDER BY day_count DESC LIMIT $number";<br />
    $rows = $wpdb->get_results($sql);<br />
    foreach($rows as $row){<br />
    $postid = $row->post_id;<br />
    $post_data = get_post($postid);<br />
    $title = $post_data->post_title;<br />
    echo '<a href="' . $url . '" title="'. $title . '">'. $title . '</a>';<br />
    echo ' today(' . $row->day_count .')';<br />
    echo ' total(' . $row->amount . ')';<br />
    }<br />
    } else {<br />
    echo 'not installd Counterize II plugin';<br />
    }<br />
    ?><br />
    

    #2966

    匿名

    toemon様

    ありがとうございます。

    なるほど、複製での使用での話ですね、ページ全体の構成がよくわかっていないものですから、とんちんかんな回答をしてしまいました。 orz

    大変申し訳ありません。

    当方のご説明が不十分でした。

    この度、ご教授いただきました2つの件、

    ・サムネイル+記事タイトルの表示

    ・過去24時間以内のログからアクセスの多い記事を取得

    これらを拡張ブロックで表示させるというお話ですが、

    この拡張ブロックのファイル自体を複製してそれぞれを

    独立させることは可能なのでしょうか。

    ブロックのインストール画面には、

    カスタムブロックを表示するファイル名を入力してください。:

     ファイル名: my__block.php

     ここで指定したファイルをテーマ内のブロックディレクトリーに作成してください。

    もし複数設定できる場合、

    ドメイン/info/wp-content/themes/xpress_default/blocks/

    以下のようにファイルを作成するということでよろしいでしょうか。

    ・my_適当なネーム1_block.php

    ・my_適当なネーム2_block.php

    #2967

    toemon
    キーマスター

    もし複数設定できる場合、

    ドメイン/info/wp-content/themes/xpress_default/blocks/

    以下のようにファイルを作成するということでよろしいでしょうか。

    ・my_適当なネーム1_block.php

    ・my_適当なネーム2_block.php

    はい、その通りです。

    #2968

    匿名

    toemon様

    ありがとうございます。

    追加後、ブロックを設定しましたが、

    ファイルが認識されないようです。

    ドメイン/info/wp-content/themes/xpress_default/blocks/以下に

    ファイルを追加した後、モジュールのアップデートは必要でしょうか。

    #2969

    toemon
    キーマスター

    モジュールのアップデートは必要ありませんが

    追加後、ブロックを設定しましたが、

    ファイルが認識されないようです。

    とは具体的にどのような症状でしょうか?

    #2970

    匿名

    toemon様

    たびたび恐れ入ります。

    拡張ブロックの根本的な使い方が間違っていたら

    申しわけございません。

    ただいま設定しようとしているサイトでは、

    xpressMEをnewsとしております。

    まず、当スレッドでご教授いただいております以下の2点について、

    • 「人気記事リスト」ブロックを今日(過去24時間)のランキング順にできないだろうか
    • 各記事のサムネイル画像+タイトルをブロック表示できないだろうか

    拡張ブロックの設定を行ってみました。

    まず、ご紹介いただたプラグインを導入して有効化しました。

    • Counterize II
    • QF-GetThumbプラグイン

    次に、拡張ブロックに指定するファイルを生成しました。

    /modules/news/wp-content/themes/xpress_default/blocks/my_rank_block.php

    <code><?php<br />
    global $wpdb;<br />
    $show_posts =5;<br />
    if (!is_null($wpdb)){<br />
    $wp_query->in_the_loop = true;<br />
    $r = new WP_Query("showposts=$show_posts&what_to_show=posts&nopaging=0&post_status=publish");<br />
    while($r->have_posts()){<br />
    $r->the_post();<br />
    if(function_exists('the_qf_get_thumb_one')){<br />
    echo the_qf_get_thumb_one("num=0&width=100");<br />
    }<br />
    echo '<a href="'. get_permalink() . '">' . the_title('<h2>','</h2>',false) . '</a>';<br />
    }<br />
    }<br />
    ?></code>

    次に、サムネイル+記事タイトルを表示させるために、

    以下を設定。

    /modules/news/wp-content/themes/xpress_default/blocks/my_thumb_block.php

    <code><?php<br />
    if (function_exists('counterize_renderstats_vertical')){<br />
    $number = 3;<br />
    $onedayago = date("Y-m-d", time()-86400);<br />
    $wpdb =& $GLOBALS['wpdb'];<br />
    $sql = "SELECT p.count as amount, p.url as url, p.url as label, p.postID as post_id , COUNT(m.id) as  day_count"<br />
    . " FROM " .counterize_logTable(). " m, " . counterize_pageTable(). " p "<br />
    . " WHERE m.pageID = p.pageID and p.postID IS NOT NULL and "<br />
    . " m.timestamp >= '$onedayago'"<br />
    . " GROUP BY p.url "<br />
    . " ORDER BY day_count DESC LIMIT $number";<br />
    $rows = $wpdb->get_results($sql);<br />
    foreach($rows as $row){<br />
    $postid = $row->post_id;<br />
    $post_data = get_post($postid);<br />
    $title = $post_data->post_title;<br />
    echo '<a>url . '" title="'. $title . '">'. $title . '</a>';<br />
    echo ' today(' . $row->day_count .')';<br />
    echo ' total(' . $row->amount . ')';<br />
    }<br />
    } else {<br />
    echo 'not installd Counterize II plugin';<br />
    }<br />
    ?></code>

    拡張ブロックのインストール(複製)でそれぞれのファイルを指定しました。

    結果、xoopsトップページでの表示ですが、

    my_rank_block.phpを指定したブロックには、

    ***/modules/news/wp-content/themes/xpress_default/blocks/my_rank_block.php が見つかりません。

    my_thumb_block.phpを指定したブロックには、

    キャッシュが存在しません。

    最初にnewsモジュールにアクセスしてください。

    という表示がされております。

    ちなみに、my_thumb_block.phpを指定したブロックの方は、

    モジュールにアクセスしてキャッシュさせているのですが、

    表示は変わりません。

    モジュールにアクセスすると、画面が真っ白になってしまいます。

    と、いったんこのような状況でございます。

    #2971

    toemon
    キーマスター

    ちなみに、my_thumb_block.phpを指定したブロックの方は、

    モジュールにアクセスしてキャッシュさせているのですが、

    表示は変わりません。

    のほうは

    XOOPS側でのRewriteRule適応時のブロック更新が行われないバグがありますので、そのせいでブロック更新していないのだと思います。

    #XOOPS側でのRewriteRule適応への対応はまだ未知数なところがありますね。

    #2972

    toemon
    キーマスター

    上記のバグは

    include/xpress_block_render.phpの162行目あたりからの

    <br />
    global $wpdb;<br />
    $func_file = $block_function_name;<br />
    $call_theme_function_name = str_replace(".php", "", $block_function_name);<br />
    $inc_theme_file_name = $call_theme_function_name . '_theme.php';<br />
    $cache_title = str_replace(".php", "", $block_function_name);<br />
    $blockID =get_block_id($mydirname,$func_file,$options);<br />
    <br />
    $this_url = '/modules/'. $mydirname;<br />
    $call_url = $_SERVER;<br />
    <br />
    xpress_block_css_set($mydirname);<br />
    if (strstr($call_url,$this_url)){<br />
    

    の部分を

    <br />
    global $wpdb,$xoops_config;<br />
    $func_file = $block_function_name;<br />
    $call_theme_function_name = str_replace(".php", "", $block_function_name);<br />
    $inc_theme_file_name = $call_theme_function_name . '_theme.php';<br />
    $cache_title = str_replace(".php", "", $block_function_name);<br />
    $blockID =get_block_id($mydirname,$func_file,$options);<br />
    <br />
    if (function_exists('get_option'))<br />
    $this_url = str_replace( $xoops_config->xoops_url , '' , get_option('home'));<br />
    else<br />
    $this_url = $mydirname;<br />
    <br />
    $call_url = $_SERVER;<br />
    xpress_block_css_set($mydirname);<br />
    if (strstr($call_url,$this_url)){<br />
    

    に変更することで修正されます。

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

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