0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MovableTypeで投稿記事のファイル名を月ごとにリセットされる数字にしようとした【失敗談】

Last updated at Posted at 2019-04-11

概要

MovableType6(MT6)にて、投稿記事のファイル名に、月ごとでリセットされる数字を振りたかったという話です。
結局不採用と相成りましたので、ただの語りとしてご覧ください。
オチを先に言うと私は最終的に手打ちでやった原始人です。こんにちは。

理想

たとえば、2020年1月の記事が2件、2020年2月の記事が1件あった場合

1件目: /news/2020/01/post-1.html
2件目: /news/2020/01/post-2.html
3件目: /news/2020/02/post-1.html

これを自動でやりたかったです。

現実

まず、MTの投稿記事ファイル名は、デザイン > テンプレート > 記事 にあるアーカイブマッピングでカスタマイズすることができます。

アーカイブマッピングで利用するアーカイブファイル名の定義 | CMSプラットフォーム Movable Type ドキュメントサイト

デフォルトはyyyy/mm/entry-basename.htmlとなっています。
年/月/デフォルトのエントリファイル名.htmlですね。
年月は私もやりたいのでこのままパクらせていただきます。
entry-basenameは、投稿記事から自動で設定されます。
タイトルに日本語しかなければpostみたいな感じ、英数字が入っていれば抽出されて設定されます(たぶん)。
ここの部分を連番にしたい!

アーカイブマッピングのパスはいろんな形式が用意されていますが、自分で自由にカスタムすることもできます!
用意されてるものを組み合わせてもいいですし、MTタグも使えます👍

で、今回はyyyy/mm/post-連番.htmlとしたいので、
%y/%m/post-連番.htmlって感じで、連番の部分だけ出力できれば勝ちなのでかなり勝利の予感をチラつかされていますね。

では連番部分を算出するためにがんばります。

月別の記事数を取得

<!-- 月別の記事リストを取得 -->
<mt:ArchiveList type="Monthly">

  <!-- 投稿記事自身が何年何月の記事なのかを取得し変数に格納 -->
  <mt:SetVarBlock name="entryMonth">
    <mt:EntryDate format="%Y%m">
  </mt:SetVarBlock>

  <!-- 月別に取得した記事が何年何月のものかを変数に格納 -->
  <mt:SetVarBlock name="searchArchiveMonth">
    <mt:ArchiveDate format="%Y%m"/>
  </mt:SetVarBlock>

  <!-- 投稿記事と同じ年月の記事リスト取得にさしかかったら -->
  <mt:if name="searchArchiveMonth" eq="$entryMonth">
    <!-- その年月にいくつ記事があるかを変数に格納 -->
    <mt:SetVarBlock name="countMonth">
      <$mt:ArchiveCount$>
    </mt:SetVarBlock>
  </mt:if>
</mt:ArchiveList>

<!-- 記事カウントに1追加して出力 -->
<mt:GetVar name="countMonth" op="++">

👆これで投稿されている記事数プラス1が出力できます。

アーカイブマッピングのパス、文字数制限あるってよ

できたぞぉおと思ってコピペして動かん!!できてないやん!!って思ったら
パスが途中で切れてるんだが?キレそう。という事件がありました。

どうやらパスもカスタムフィールドなどと同様に255文字の文字数制限がある模様。
まじかー てか255文字もここに打ち込もうとしたことないから知らんかったわー ははは という心情でございました。

かなしいきもちになりながら調べたら、パスにテンプレートモジュールを使えるとのことで!!

アーカイブの制御(その4・アーカイブファイルのパスを柔軟にカスタマイズする) - The blog of H.Fujimoto

すごい!
さっそく デザイン > テンプレート > テンプレートモジュール に アーカイブマッピングパス とかいう感じで適当に作ります。
そしてパスの方はyyyy/mm/post-<$mt:Include module="アーカイブマッピングパス"$>.htmlとします。
こんなふうに書けるんですね~。

問題発生

ファイル名は思った感じで出力!できたのです!が!!!
もうここからは面白いこともないのですが投稿した記事を変更して更新、つまりは再構築をかけるとそのたびに記事数を数え直している。つまり投稿済みの自分も数に加えている。そんな気がするんです。

原始人「あ~~~おまえこの前までpost-1.htmlやったやろがい~~~な~~に勝手にpost-2.htmlに生まれ変わってんですかねえ~~~」

こっちの記事を更新するとファイル名も更新されてあっちの記事と同一ファイル名になっちゃったりしてもうわけわかんないしここで私の意識は途切れました。

おわりに

算出のあたりを頑張ったのでいちおう記事にはしておこう!と思ったのですが、結局やりたいことはできませんでした💧
もしわかる方いたら・・オシエテ・・。

アーカイブマッピングは用意されてるものの組み合わせでしかカスタムしたことがなかったので、MTタグを入れた動的な出力をいろいろ触ってみて思ったのですが、
MTの、再構築で静的ファイルを出力するという仕様上、ここを計算で毎回出すのは危険が危ないというのに気づきました。いろいろやった後気づきました。
おとなしくエントリーIDかエントリーネームにしとくのが良いですね。

必須ではないけど実現できたらいいなと思って、こういう計算でやったらいい感じのURLになると思うんですけどなんかうまくいかないんですよね~とセンパイに話したら、えーもう手打ちでやれば?と言われ、なーに日和ってんでい手ぬるいヤツめ!と思った過去の私でしたが、結局手打ちでやったというギャグ展開でございます。

ヤマなしオチなしすみません。
どうもありがとうございましたm(_ _)m

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?