Please Sign In or Register

Trackback : 受信したトラックバックの表示文字数などを変更する

受信したトラックバックの内容はコンテンツ内およびブロックに表示することができる。
しかし、表示する文字数や含まれるタグの取り扱いについて、管理ページから設定の変更を行なうことはできないようだったので、コンテンツ内に表示されるタイトルとコンテンツの一部、および、ブロックに表示されるタイトルについて、それらの設定を調整するための方法。

trackback.modulefunction theme_trackback および function trackback_block の部分に修正を加える。

function theme_trackback
修正によって追加された箇所コメントアウトされた部分を強調表示しています。

function theme_trackback($trackback, $display_links = TRUE) {
  $output  = '<div class="trackback" id="trackback-'. $trackback->trid ."\">\n";
//  $output .= '<div class="title"><a href="'. $trackback->url .'">'. $trackback->subject ."</a></div>\n";
  $output .= '<div class="title"><a href="'. $trackback->url .'">'. truncate_utf8($trackback->subject, 48, FALSE, TRUE) ."</a></div>\n";
  $output .= '<div class="author">'. t('from %sitename on %date', array('%sitename' => $trackback->name, '%date' => format_date($trackback->created))) ."</div>\n";
//  $output .= '<div class="content">'. check_markup($trackback->excerpt) ."</div>\n";
  $output .= '<div class="content"><p>'. truncate_utf8(strip_tags($trackback->excerpt), 248, FALSE, TRUE) ."</p></div>\n";

function trackback_block
変更および追加した部分を強調表示しています。

function trackback_block($op = 'list', $delta = 0) {
  if ($op == 'list') {
    $blocks[0]['info'] = t('Recent trackbacks received');
  }
  else if ($op == 'view') {
    $result = db_query_range('SELECT * FROM {trackback_received} WHERE status=1 ORDER BY created DESC', 0, variable_get('trackback_display_number', 10));
    $items = array();
    while ($tb = db_fetch_object($result)) {
      $items[] = l(truncate_utf8(strip_tags($tb->subject), 48, FALSE, TRUE), "node/$tb->nid", NULL, NULL, "trackback-$tb->trid") .'<br />'. t('%time ago', array('%time' => format_interval(time() - $tb->created)));
    }
    $blocks['subject'] = t('Recent trackbacks');
    $blocks['content'] = theme('item_list', $items);
  }
  return $blocks;
}

上記の設定では、コンテンツおよびブロックに表示されるトラックバック元のコンテンツタイトルは 48 バイト、その内容はタグを除去して 248 バイトまで表示され、末尾に 「 ...」 を付記します。

表示する文字数については、テーブルの各フィールドタイプの設定が、「subject = VARCHAR(64)」「excerpt = VARCHAR(255)」 となっており、また、末尾に付記する文字列のバイト数は指定したバイト数に含まれないようなので、その辺りに注意しながら任意の値を設定できます。

トラックバック

トラックバックは承認後に表示されます。

URLから "-nospam" を削除してトラックバックを送信してください。

コメント

1.2対応がてら、これも取り込んでみました。

trackbackモジュールの1.2アップデートのソースを眺めていたら、表示まわりが結構変わっていたので苦労しましたが、何とかなったので、ついてで取っては失礼ですが、折角TIPSを公表していただいているので、これも詰め込んでみました。
本文の文字数が何とも、モジュールの仕様なのかなんなのかよくわかりませんけど、80以下くらいにしないと文末にリーダー付きませんね。
表示すべきコンテンツの内容が80~100くらいしかないようで、それ以上の値を指定してもリーダーは付かないようです。
何パターンか試してみて、80くらいがいいのかなと思ってデフォルト値にしましたけど。
あー、今考えると文字数じゃなくてバイト数ですね(^_^;)こりゃミスった。

と言うわけで、便利なTIPSをありがとうございます。
不具合がないことを祈るのみですが・・・(T.T)

strip_tags()

strip_tags() が関係しているかもしれません。
まだ確認していないので何も分かりませんけど、取得した要約内容の中に HTMLタグを使った内容があると、その部分をまるごと削ってしまうような感じの動作をしているので...

警告
現在、strip_tags()はHTMLの検証を行わないため、 不完全または壊れたタグにより予想以上に多くのテキスト/データが削除される 可能性があります。

と PHP マニュアルにありますので、そのあたりの何かが問題なのかな...と思ったりもしますが、未検証です。 スミマセン。

モジュールがアップグレードすると、改変したものや、モジュールの改造版モジュールなどは、追いつくのが大変ですよね。
captchajp も、今もなおダウンロードしてくださる方がいるようなので、何とかしなきゃな...と思いつつ、セキュリティアップデートでないことを言い訳にしている今日この頃です。

関係ないですけど、改変って、どのバージョンに対して行ったかも記述しておいた方がいいのかも...と、今、気付きました。

補足。

これでは文字数の問題と繋がってないですね。

要約文内の HTML タグの部分を丸ごと削った結果、文章的には中途半端だし、文字数も少ないけれど、要約文のすべてを表示していることになるので、文末の 「 ... 」 はつかない。という状態になっているのではないかな?と...
要約文(255) - 削ってしまった部分(たとえば 155) = 表示できる部分(100) という状況を想像しました。

で、そんな風に、ちょっと思ったりしました。 ということが言いたかったんです。

check_markup

色々と、ありがとうございます。
オリジナルはcheck_markupを使っているんですよね。DrupalのAPIの様ですから、そちらを使う方がいいのかもしれません。
で、まっさらなオリジナルをテストサイトに入れてみて、トラックバックを受信してみましたが、それほど文字数に変化があるようにも思えないんですよね・・・。
トラックバックってそう言うモノなのかな・・・。
知識不足のワタシではよく判りません。
ま、トラックバックで表示されるコンテンツがいっぱいあってもうれしくないのでいいのですけど(笑)

改造の対象になっているバージョンですか?
ワタシはなるべく明示するようにしています。
Captchaの場合はrandquestという形に変更したのでcaptcharをアップデートすることはないとは思っていますけど・・・。
うちは、Captcharがどれくらい落とされているのか判らないのが何とも言い難いところですけど・・・。
落とされているのかな・・・(^-^;△フキフキ

【追記】
strip_tags()をcheck_markup()に変更しました。
あまり変化はないようですから、どこかに制限があるんでしょうね・・・きっと。

ちょっと思っただけですから、違うかも…

ちょっと思っただけのことなので、本当はまったく別のところに問題があるのかもしれませんけどね。
すべてのタグを除いたものを表示したいな...と思って strip_tags() を使ってみたのですが、トラックバック自体の受信率が非常に低いので、正直よく分からないんですよね。
まぁ、おいおい、調べてみようかな...という感じでは構えていますが、優先順位は低いので、そのうち忘れてしまうかもしれません。

改変対象のバージョンはやっぱり記述してある方が誤解が少ないですよね。
自分用の備忘録としか考えていなかったので… コンテンツを公開しているからにはちょっと意識しないと、ですね。

違う気もしています・・・

ちょっと思っただけのことなので、本当はまったく別のところに問題があるのかもしれませんけどね。

strip_tags()でも、check_markup()でも、表示される文字数の上限にそれほど変化があるようには思えないので、そこへ持ってくる以前で既にその程度の文字数しか持っていないのかもしれません。
Drupalのtrackbackモジュール同士でしかテストしていないのでトラックバックそのものの仕様なのか、モジュールの仕様なのかは判りません。
ワタシも、受信したトラックバックのコンテンツを表示するのに、あまり文字数を多くとるケースはあまりないのじゃないか?とか思ってそれ以上は調べていません。
とりあえず、0829@drupal.orgさんの指摘通り、strip_tags()は不安定な要因を含んでいると言うことなのでcheck_markup()に変えてみました。
文字数のカウントの仕方が違うのかなんなのかはよくわかりませんが、オプションに同じ文字数を与えたときに取り出される文字数に違いがあったのでオプションの文字数のデフォルト値も変更してみました。

改造対象バージョンの明示は、0829@drupal.orgさんの場合だと、モジュールに改造を加えたモノを公開していないTIPSだけのケースもありますから、その場合は対象バージョンは明示した方がいいと思いますよ。
ソースが違いますけど?のような質問が回避できますからね。
ワタシのように改造を施したモノを公開する場合は必須ではないですが、オリジナルのバグ対応という兼ね合いもあるので元になったバージョンをやはり明示した方がいいかとは思います。
そんな感じで、対象バージョンはできるだけ明示した方が決まり決まった質問は回避することができると思いますよ。

余談:
DIYテーマ、昨日いじり始めました(笑)なかなか凝った造りですね。
久しぶりにテーマなんか触っているので感覚が衰えていて把握するのに時間がかかってます(笑)
そう言えば、readme.docのようなモノ、入ってましたっけ?ライセンスの文書とかも入っていた方がいいかもしれませんね。入ってたらごめんなさい<(_ _)>見てません。

やっぱり...

そうですよね。
そもそも amayadori さんと私とで、問題点があったことを把握している Trackback モジュールのバージョンが異なりますしね。スミマセン。余計なことを...

と、改変したモジュールのバージョンについては、そのうち、覚えているものに関しては追記したいと思います。
気付くの遅すぎ...でした。

余談への返信:
readme は何を書いてよいのか分からなかったので保留(とりあえず同梱してません)していますが、ライセンスに関しては、他のテーマなどに倣って LICENSE.txt を同梱しています。(GNU LESSER GENERAL PUBLIC LICENSE 2.1 の単なるコピーですが...)
一部、Yahoo UI Library (BSD ライセンス) を元にちょっと手を加えて作成した部分があって、そのことを該当の CSS 中には明記しているのですが、ライセンスの問題はなかなか難しいので、問題があれば修正したいと思います。

やってしまいました...

GNU LESSER GENERAL PUBLIC LICENSE 2.1 は NG ですね。
GNU GENERAL PUBLIC LICENSE 2 を使用しなければいけませんでした。

...ということで、他のものも確認したら、一番最初に用意したものが間違っていたようで...現在すべてのライセンスを差し替え中です。
やってしまいました。

コメントの表示オプション

お好みの表示方法を選択し、「設定の保存」をクリックすると、表示方法を変更することができます。