Drupal 7でブログやニュースなどの記事一覧で、月別アーカイブを設置することがあります。
Viewsではデフォルトでこの機能が搭載されていて、「contextual filter」の作成年月のフィルターをかけたブロックを作成することで実現できます。
標準の月別アーカイブブロックは、次のように表示されます。

  • 8月 2014
  • 7月 2014
  • 6月 2014

月が始めにくる英語圏に合わせた表記なので、日本語サイトでは違和感があります。
「2014年 8月」のように順番を逆にするには、Views内の設定画面では行えず、Views自体のモジュールを変更する必要があります。
将来的なモジュールのバージョンアップを考えると、モジュール本体に手を加えるのは避けたいところです。
他の方法としては、Viewsで作成されたブロックのテンプレートファイルを修正する方法もあります。

下記はシステムデフォルトのブロックテンプレートファイル(modules/block/block.tpl.php)です。

1
2
3
4
5
6
7
8
9
10
11
12
<div id="<?php print $block_html_id; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>>
 
  <?php print render($title_prefix); ?>
<?php if ($block->subject): ?>
  <h2<?php print $title_attributes; ?>><?php print $block->subject ?></h2>
<?php endif;?>
  <?php print render($title_suffix); ?>
 
  <div class="content"<?php print $content_attributes; ?>>
    <?php print $content ?>
  </div>
</div>

このテンプレートファイルをお使いのテーマディレクトリにコピーして、Viewsの月別アーカイブブロックに合わせてファイル名を書き換えます。
例えば「news」という名称のViewsで「block-1」の場合には「block–views–news-block-1.tpl」というファイル名に変更します。
テンプレートのファイル名を変更することによって、月別アーカイブでのみ使用するブロックとなります。

この中の「<?php print $content ?>」という部分がブロックの本文になります。
今回はブロック本文を正規表現で「8月 2014」を「2014年 8月」に書き換える処理を施します。

1
2
3
4
5
<?php print $content ?>
 
//次のように変更します
 
<?php print preg_replace('/<a\s(.*?)>(.*?)\s(.*?)<\/a>/', '<a $1>$3年 $2</a>', $content); ?>

上記の変更により、月別アーカイブの表示が次のようになります。

  • 2014年 8月
  • 2014年 7月
  • 2014年 6月