MTDateFooter を AdSense 用に改造

| | コメント(0) | トラックバック(0)

 このブログには google AdSense の広告が貼ってあるが、なるべく自然に見えるよう日の区切りごとに 1 つ、つまり MTDateFooter タグで囲んで貼りたいと考えた。

 しかし、この広告には 1 ページにつき 3 つまでという制限があるので、そのままだと 4 つ以上表示されてしまう可能性がある。インデックスの表示期限を 3 日にすることも考えたが、更新頻度が低いのでヘタするとメインが空になってしまう。

 そこで、MTDateFooter に N 回目まで有効、という属性をつけられないかと試してみた。はじめはプラグインでなんとかならないかと思ったが、いまいち理解できていないので、Context.pm を直接編集してしまうことにした。

 MTDateFooter の挙動をそのまま真似て、新たに MTDateFooterN とうタグを作った。コードは以下のとおり。* から始まるのが変更/追加された行。

145行目付近

  $ctx->register_handler(DateHeader => [ \&_hdlr_pass_tokens, 1 ]);
  $ctx->register_handler(DateFooter => [ \&_hdlr_pass_tokens, 1 ]);
* $ctx->register_handler(DateFooterN => [ \&_hdlr_pass_tokens, 1 ]);

760行目付近

* my $maxFooters = $args->{'footern'};
* my $footerCnt = 0;
  for my $e (@entries) {
    ?略?
    if (defined $entries[$i+1]) {
      $next_day = substr($entries[$i+1]->created_on, 0, 8);
      $footer = $this_day ne $next_day;
*     if ($this_day ne $next_day)
*       $footerCnt ++;
    } else { 
      $footer++;
*     $footerCnt++;
    }
    my $allow_comments ||= 0;
    my $out = $builder->build($ctx, $tok, {
        %$cond,
        DateHeader => ($this_day ne $last_day),
        DateFooter => $footer,
*       DateFooterN => $footer && $maxFooters && ($footerCnt <= $maxFooters),
    ?略?

使うときは次のようにする。

  <MTEntries lastn="5" footern="3">
    <MTDateHeader>
      <div class="ABox">
    </MTDateHeader>

    <MTDateFooter>
      </div>
    </MTDateFooter>

    <MTDateFooterN>
      ?ここに広告コード?
    </MTDateFooterN>
  </MTEntries>

 これでめでたく現在のメインページのように、広告が 3 つに収まった。が、イマイチやり方が美しくない気もするので、出来ることなら代替案を見つけたい。

トラックバック(0)

このブログ記事を参照しているブログ一覧: MTDateFooter を AdSense 用に改造

このブログ記事に対するトラックバックURL: http://www.towofu.net/cgi-bin/mt/mt-tb.cgi/323

コメントする

このブログ記事について

このページは、towofuが2004年9月 9日 21:30に書いたブログ記事です。

ひとつ前のブログ記事は「原了郭の黒七味」です。

次のブログ記事は「スクリーンショットを撮ってみた」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。