6.12 ブログ記事に同一カテゴリのブログ記事の前後リンクを表示する ★

P.455

メインカテゴリに属するブログ記事の前後ナビゲーションを表示する

●サンプルテンプレートをカスタマイズする

「ブログ記事」アーカイブテンプレート(サンプルテンプレート)

...前略...
<div id="contents" class="clearfix">
  <div id="main">
    <div class="content-nav">
    <mt:entryPreviousInCategory>
      <a href="<mt:entryLink archive_type="Individual" />">&laquo; <mt:entryTitle encode_html="1" /></a> |
    </mt:entryPreviousInCategory>
    <a href="<mt:link template="main_index" />">メインページ</a> |
    <a href="<mt:link template="archive_index" />">アーカイブ</a>
    <mt:entryNextInCategory>
      | <a href="<mt:entryLink archive_type="Individual" />"><mt:entryTitle encode_html="1" /> &raquo;</a>
    </mt:entryNextInCategory>
    </div>
    <div class="content">
      <h2 class="entry-header"><mt:entryTitle encode_html="1" /></h2>
...後略...

●デフォルトテンプレートをカスタマイズする

「ブログ記事」アーカイブテンプレート(デフォルトテンプレート)

...前略...
<div id="alpha">
  <div id="alpha-inner">
    <div class="content-nav">
...中略...
    </div>
    <div id="entry-<$MTEntryID$>" class="entry-asset asset hentry">
      <div class="asset-header">
...後略...

全カテゴリに属するブログ記事の前後ナビゲーションを表示

●プラグインの修正

PreviousNextInCategory.pl

...前略...
sub _hdlr_entry_previous_in_category {
    my($ctx, $args, $cond) = @_;
    my $e = $ctx->stash('entry')
        or return $ctx->_no_entry_error('MTEntryPrevious');
    my $cat = $e->category
            or return '';
    if($ctx->stash('category') ne '') {
        $cat = $ctx->stash('category');
    }
    my $prev = $e->previous(1);
...中略...
    }
    $res;
}
sub _hdlr_entry_next_in_category {
    my($ctx, $args, $cond) = @_;
    my $e = $ctx->stash('entry')
        or return $ctx->_no_entry_error('MTEntryNext');
    my $cat = $e->category
            or return '';
    if($ctx->stash('category') ne '') {
        $cat = $ctx->stash('category');
    }
    my $next = $e->next(1);
...中略...
    }
    $res;
}
...後略...

P.456

●テンプレートをカスタマイズする

「ブログ記事」アーカイブテンプレート(サンプルテンプレート)

...前略...
<div id="contents" class="clearfix">
  <div id="main">
    <div class="content-nav">
    <mt:entryCategories>
    <p>
    <mt:entryPreviousInCategory>
      <a href="<mt:entryLink archive_type="Individual" />">&laquo; <mt:entryTitle encode_html="1" /></a> |
    </mt:entryPreviousInCategory>
    <a href="<mt:link template="main_index" />">メインページ</a> |
    <a href="<mt:link template="archive_index" />">アーカイブ</a>
    <mt:entryNextInCategory>
      | <a href="<mt:entryLink archive_type="Individual" />"><mt:entryTitle encode_html="1" /> &raquo;</a>
    </mt:entryNextInCategory>
    </p>
    </mt:entryCategories>
    </div>
    <div class="content">
      <h2 class="entry-header"><mt:entryTitle encode_html="1" /></h2>
...後略...

★「ブログ記事」アーカイブテンプレート(デフォルトテンプレート)

    ...前略...
001:<div id="alpha">
002:  <div id="alpha-inner">
003:    <div class="content-nav">
004:    <mt:entryCategories>
005:    <p>
006:    <mt:entryPreviousInCategory>
007:      <a href="<mt:entryLink archive_type="Individual" />">&laquo; <mt:entryTitle encode_html="1" /></a> |
008:    </mt:entryPreviousInCategory>
009:    <a href="<mt:link template="main_index" />">メインページ</a> |
010:    <a href="<mt:link template="archive_index" />">アーカイブ</a>
011:    <mt:entryNextInCategory>
012:      | <a href="<mt:entryLink archive_type="Individual" />"><mt:entryTitle encode_html="1" /> &raquo;</a>
013:    </mt:entryNextInCategory>
014:    </p>
015:    </mt:entryCategories>
016:    </div>
017:    <div id="entry-<$MTEntryID$>" class="entry-asset asset hentry">
018:      <div class="asset-header">
    ...後略...

元のテンプレートに004~015を追加します。

P.457

前後記事の再構築をするカスタマイズ

PreviousNextInCategory.pl

package MT::Plugin::PreviousNextInCategory;
 
use strict;
use warnings;
use base qw( MT::Plugin );
 
use MT;
use MT::Template::Context;
 
my $plugin = MT::Plugin::PreviousNextInCategory->new({
    id          =>  'PreviousNextInCategory',
    name        =>  'PreviousNextInCategory',
});
MT->add_plugin($plugin);
MT::Template::Context->add_container_tag('EntryPreviousInCategory' => \&_hdlr_entry_previous_in_category);
MT::Template::Context->add_container_tag('EntryNextInCategory' => \&_hdlr_entry_next_in_category);
 
MT->add_callback('MT::App::CMS::CMSPostSave.entry', 10, $plugin,
                  sub { $plugin->runner('_rebuild', @_) } );
sub _rebuild {
  my $plugin = shift;
  my ($eh, $app, $entry) = @_;
  my $cats = $entry->categories;
  for my $cat (@$cats) {
    my $prev = $entry->previous(1);
    while ($prev && !$prev->is_in_category($cat)) {
      $prev = $prev->previous(1);
    }
    $app->rebuild_entry(Entry => $prev->id) if $prev;
    my $next = $entry->next(1);
    while ($next && !$next->is_in_category($cat)) {
      $next = $next->next(1);
    }
    $app->rebuild_entry(Entry => $next->id) if $next;
  }
  return 1;
}
sub runner {
  my $plugin = shift;
  my $method = shift;
  return $_->($plugin, @_) if $_ = \&{"$method"};
}
 
sub _hdlr_entry_previous_in_category {
...中略...
}
sub _hdlr_entry_next_in_category {
...中略...
}
 
1;

ウェブページ

Powered by Movable Type 4.261

このアーカイブについて

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