Please Sign In or Register

Trackback : Contemplate でトラックバックの表示位置をカスタマイズする

Content Templates (Contemplate) モジュールを利用してコンテンツの表示についてカスタマイズを行なうと、設定の方法によってはトラックバックの URL や内容が表示されない場合がある。
通常の使用では問題ないのだが、Contemplate を使っているのであれば、トラックバックの表示位置もカスタマイズできる方が都合がいいので、その方法。

trackback.modulefunction trackback_nodeapi 以下の case 'alter': 部分に修正を加える。
修正によって追加された箇所コメントアウトされた部分を強調表示しています。

case 'alter':
        if ($node->can_receive) {
          $url = url('node/'. $node->nid, NULL, NULL, TRUE);
          $tb_url = url('trackback/'. $node->nid, NULL, NULL, TRUE);
          $autodetect_comments .= "\n<!--\n";
          $autodetect_comments .= "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\">\n";
          $autodetect_comments .= "<rdf:Description rdf:about=\"$url\" dc:identifier=\"$url\" dc:title=\"$node->title\" trackback:ping=\"$tb_url\" />\n";
          $autodetect_comments .= "</rdf:RDF>\n";
          $autodetect_comments .= "-->\n";
        }
        if (!(($_POST['op'] == t('Preview') || ($_POST['op'] == t('Submit') && form_get_errors())))) {
          if ($teaser && $node->can_receive) {
//            $node->teaser = $node->teaser . $autodetect_comments ."\n";
            $node->content['trackback'] = array(
              '#value' => $autodetect_comments . "\n",
              '#weight' => 12,
            );
          }
          else {
            if ($node->can_receive) {
//              $node->body .= $autodetect_comments ."\n";
//              $node->body .= theme('box', t('Trackback URL for this post:'), url('trackback/'. $node->nid, NULL, NULL, TRUE));
              $node->content['trackback'] = array(
                '#value' => $autodetect_comments . "\n" . theme('box', t('Trackback URL for this post:'), url('trackback/'. $node->nid, NULL, NULL, TRUE)),
                '#weight' => 12,
              );
            }
            if ($node->can_receive && count($node->trackbacks_received)) {
              foreach ($node->trackbacks_received as $tr) {
                $trackbacks .= theme('trackback', $tr);
              }
//              $node->body .= theme('trackbacks', $trackbacks);
              $node->content['trackback']['#value'] .= theme('trackbacks', $trackbacks);
            }
          }
        }
        break;

上記のように修正した後、Contemplate に以下のように記述することで、トラックバックの出力位置をカスタマイズできます。

<?php
  print $node->content['trackback']['#value'];
?>

[ 参考 ]
print informations on $node->content[] instead of altering $node->body | drupal.org

トラックバック

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

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

コメント

内容を修正しました。

zorac さんから case 'alter': 部分を case 'view': に変更することで起こる問題点についてアドバイスをいただきましたので、Trackback モジュールの本来の動作からすると、"alter" を使用する方が本来の趣旨に沿うのではないかとの判断で、case 'alter': 部分については変更を加えない内容に修正させていただきました。

上手くいきませんね・・・

やってみました。
上手くいきません・・・(^_^;)

とか、コメント入れようと思ったらzoracさんから、注意事項が・・・。
上手くいきませんね・・・。
トラックバックモジュールはCCKには対応していないのかな?
コンテンツ作るときにも、トラックバックのセクションが出てこないし・・・。
一番、トラックバックをする価値がありそうなコンテンツなんですが・・・上手くいかないですね(T.T)

コンテンツタイプのページで設定

たぶん、0829さんの仰るとおり、コンテンツタイプのページでトラックバックを有効にしていないのだと思います。
が、本家Issueでも、CCKで使えないという報告もありましたので、本当に使えないのなら状況を詳しく教えて頂ければ助かります。
私のところでは全く現象が出ないので、対応に困っていたところです。

CCK には対応していると...

改造前でも CCK で新しく作成したコンテンツで使用できましたし、コンテンツの作成時にトラックバックについての項目が表示されないのは、この改造とは別の問題だと思いますので、CCK には対応しているはず...だと思います。
ただ、デフォルトでは story と blog だけで有効になっていて、他のコンテンツタイプで使用する場合はそれぞれのコンテンツタイプの編集ページでトラックバックを有効にしないと使えませんでした。

zorac さんのアドバイスは、たぶん、"alter" を "view" にしていることが問題なんだと思います。
"alter" と "view" の違いについてはっきりしていなかったのですが、"view" でないと動作しなかったようなことが書いてあった(と思い込んでいた)ので、"view" として記載していたのですが、このサイトでは "alter" のままで使っていました。
テストサイトでは "view" で動作確認をしていたのですが、このサイトのものは他の部分にも結構手を加えているので、ついうっかり間違えていたようです。まあ、これで動作確認も取れたということで、前向きに...。

とりあえず、それで動作していますし、"alter" のままで使用すればいいのかな?と。

CCKの対応

そうですね。受信は元からCCKでも問題ないはずです。
送信に関しては、CCKのコンテンツから送ったトラックバックの要約が、Body部分のみでカスタムフィールドが含まれないという問題がありました。dev版ではそこの対応しています。
ただ、dev版は"send trackbacks"のパーミッションが入ってますので、今のところお勧めできません。(^^;;
もう少し様子をみて反応がないようなら、"send trackbacks"をサスペンドして1.2をリリースしようかと考えています。

原因は不明ですが・・・

原因は不明ですが、CCKを無効にして、trackbackも無効にして、ファイルを入れ直して再度有効にしたら反映されました。
と言うことで、原因はわかりません。役に立たなくてスミマセン。ファイルが破損していたのか?何かと干渉していたのか?うーん、私では判りません。スミマセン。

0829@drupal.orgさんの改造と、CCKでトラックバックが使えなかった問題を同じと言ったわけではありません。言葉足らずにスミマセンでした。
たぶん、0829@drupal.orgさんの改造が上手くいかなかったのは、CCKでトラックバックが使えなかった(使える状態になってなかった)からだと言うことですね。
ま、それとは別に、zoracさんからこの方法は問題を含んでますよというアナウンスがありましたよ・・・と切り離したつもりだったのですが、言葉が足りませんでした(T.T)

まだ試してませんが、スパムモジュールのカスタムフィルターで正規表現が使えるようですから、日本語が含まれていない場合はスパムと認定する・・・というような使い方もできそうだねーとか思ってますけど、その前に正規表現のお勉強をしないといけませんね・・・。

いえいえ、こちらこそ。

私の読解力も期待できないものなので、意を汲み取れずにスミマセン。
原因はいざ知らず、とりあえず使えるようになって良かったです。

スパムについての考え方や対策はいろいろありそうなので、コメントスパム未遂のことも考えながら、いろいろ試してみたいですね。

"view"の使用

こんにちは。テストを兼ねてトラックバック送らせて頂きました。

さて、nodeapiでの"view"の使用ですが、本家のIssueでも要求がありましたが却下しております。(^^;;

具体的な弊害としましては、現在のdev版ではCCK含めたカスタムコンテンツに対応していますが、これで"view"を使うとトラックバックで送る概要にトラックバック自身が含まれてしまいます。
また、RSSフィードにもトラックバックが含まれてしまいます。ただし、こちらはnodeモジュールのバグが原因でまだ発生しません。バグが修正されるとRSSフィードにトラックバック含まれます。

ということですので、ご注意ください。

ありがとうございます。

Issue であがっていた時に、"alter" の方を勧められていたのはそのような理由からだったのですね。
個人的には Teaser も RSS フィードも Comtemplate でコントロールしていたりしますので、あまり心配ないのですが、使い分けが必要だということは(たぶん)理解できたと思います。
Drupal API の説明だけではよくわからない部分だったので大変助かりました。ありがとうございます。

追伸

あと、Auto DetectionをONにすると、受信したトラックバックの送信元にトラックバックを送ってしまいます。
これが一番致命的かな。

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

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