d3forumトピック投稿一覧表の省略化

このトピックの投稿一覧へ

なし d3forumトピック投稿一覧表の省略化

msg# 1
depth:
0
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2024/2/17 16:28 | 最終変更
タツ  管理人   投稿数: 2403 オンライン
当サイトの「旅と気ままなフォーラム」はXoopsCubeLegacyのd3forumモジュール(バージョン0.89)を利用しています。前々から気になっていたのですが、トピック投稿一覧表では全投稿を表示しているため長くなる場合があり、非常に見辛くなってしまいます。

そこで、そのトピック投稿一覧表のトップとなる親投稿に関しては全文を表示し、その子投稿については表示を省略した上で「詳細を見る!」というリンクを付加しトピック投稿一覧表を短縮できないかと編集してみました。

大まかな手順は、テンプレートinc_eachpost.htmlの本文を省略した新たなテンプレートinc_eachpost_s.htmlを作成し、一覧表ではこの省略したテンプレートを表示させるというものです。

今回この編集手順を記録し、今後のことも考え備忘録として残しておくことにしました。

■新たなテンプレートinc_eachpost_sを作成する
1.xoops_trust_path/templates/inc_eachpost_s.htmlファイルを作成
inc_eachpost.htmlのテンプレートをコピーし名前を変更してinc_eachpost_s.htmlとして新たなテンプレートを作ります。

2.xoops_trust_path/language/ja_utf8/main内に言語定数の追加(他言語も同様に追加すればなお良いと思います)
// inc_eachpost.html
define('_MD_D3FORUM_UNIQUEPATHPREFIX','msg#');
define('_MD_D3FORUM_PARENTPOST','親投稿');
define('_MD_D3FORUM_CHILDPOSTS','子投稿');
define('_MD_D3FORUM_NOCHILDPOSTS','子投稿なし');
define('_MD_D3FORUM_READMORE','詳細を見る!'); ←追加

3.d3forumモジュールのアップデート
サイトにログインし、システム設定からd3forumモジュールのアップデートを行います。これで新たなテンプレートinc_eachpost_sと「詳細を見る!」言語定数が追加されます。

■各テンプレートを編集する
1.d3forum名_inc_eachpost_s.htmlテンプレートの編集
d3forum名_inc_eachpost.htmlとの違いは、テキスト内の文字列を strip_tags:false で HTML および PHP タグを取り除き、さらに mb_strimwidth:0:256:"..."でテキストの文字を省略し最後に"..."を付加し「...詳細を見る!」としてリンクします。
実際には
<{$post.post_text>の部分を
↓変更
<{$post.post_text|strip_tags:false|mb_strimwidth:0:256:"..."}><a href="<{$mod_url}>/index.php?post_id=<{$post.id}>" id="post_path<{$post.unique_path}>" ><{$smarty.const._MD_D3FORUM_READMORE}></a>
となります。さらにこのd3forum名_inc_eachpost_s.htmlテンプレートでは本文以外にも省略するため、投票ボタンも外しました。


2.d3forum名_main_listpostsテンプレートの編集
トピック投稿一覧表の一番最初の投稿は全文表示(d3forum名_inc_eachpost.html)のテンプレートを使い、2番目以降は本文を省略した表示(d3forum名_inc_eachpost_s.html))のテンプレートを使い分けます。
<!-- top of posts -->
<{foreach item=post from=$posts}>
<{include file="db:`$mydirname`_inc_eachpost.html" post=$post caller="listposts" inner_link_format="#post_id%s"}>
<hr>
<{/foreach}>
↓ 変更

<!-- top of posts -->
<{foreach item=post from=$posts name=loopname}>
<{if $smarty.foreach.loopname.index < 1 }>
<{include file="db:`$mydirname`_inc_eachpost.html" post=$post caller="listposts" inner_link_format="#post_id%s"}>
<{else}>
<{include file="db:`$mydirname`_inc_eachpost_s.html" post=$post caller="listposts" inner_link_format="#post_id%s"}>
<{/if}>
<hr>
<{/foreach}>\
さらに、このままだとトピック投稿一覧表の投稿ツリーのリンクをクリックすると省略された投稿が表示されるため
<!-- start post tree -->
~
この間の中央辺りにあるコード
<a href="#post_id<{$eachpost.id}>"
↓変更
<a href="index.php?post_id=<{$eachpost.id}>"
~
<!-- end post tree -->
と変更します。

3.d3forum名_main_listtopics_over_categories.html,d3forum名_main_listtopics.htmlの編集
この2つのテンプレートについてもリンクをクリックすると省略された投稿が表示されるため、それぞれ以下のように編集します。
d3forum名_main_listtopics.html(全トピック一覧リンク) 
120行目辺り
d3forum名_main_listtopics.htmlt(カテゴリトピックリンク)
168行目辺り

2つとも同様に
<a href="<{$mod_url}>/index.php?topic_id=<{$topic.id}>#post_id<{$topic.last_post_id}>"><{$topic.title}></a>
↓変更
<a href="<{$mod_url}>/index.php?post_id=<{$topic.last_post_id}>"><{$topic.title}></a>

以上です。今後もし不具合があり編集あるいはもとに戻すことも可能なので備忘録として残しておきます
投票数:9 平均点:5.56

投稿ツリー


     条件検索へ

旅と気ままなフォーラム最新投稿

欲しい商品が必ず見つかるメジャーなネットショップ

ログイン

Facebook,RSSリンク表示

検索

アクセスカウンタ

今日 : 246
昨日 : 254
総計 : 1631238