MEMO SITE

MT 公式マニュアル・リファレンス

元々はMovable Typeの覚え書きメモサイトではあるのですが、その他blenderの操作メモとしても活用しています。

アセットデータの各種取得

2025/06/29

mt:AssetProperty 

今まで全然知らなかったけどファイルサイズはMTから取得できる。
アセット情報だからMT経由でアップしたアセットだけかな、多分、知らんけど。

サイズ → <mt:AssetProperty property="file_size" format="1"> 幅 → <mt:AssetProperty property="image_width"> 高さ → <mt:AssetProperty property="image_height"> ラベル → <mt:AssetProperty property="label"> 説明 → <mt:AssetProperty property="description"> 投稿者 → <mt:AssetAddedBy> 登録日時 → <mt:AssetDateAdded>

MTAssetProperty

子サイトでフォルダ名を変更したい時

2025/06/17

公開するまでのテストで別フォルダで作っておいて、公開時に正式なフォルダ名で公開したい、なんて時のためのメモ。

元のフォルダは残る

まず一番最初に注意したいことは、設定から変更しても元のフォルダは残ってしまうということ。
MTの場合はフォルダ名を修正ではなく新しくフォルダを作ることになってしまう。
これはけっこうめんどくさい。
なので設定でサイトURLとサイトパスを変更して再構築したら、FTPで変更前のフォルダを手動で削除する必要がある。

アセットは移動できない

再構築してもアセットは新しいフォルダに移動してくれない。
データは残ってるので元のフォルダの画像を一旦DLしてから新しいフォルダにアップすることでアセット一覧に出てくるようになる。
面倒だね・・・
新しいフォルダにアップするのは任意の場所にアップした画像ファイルと「assets_c」フォルダね!これがアップした画像のデータの元になってるので!

ループ時のカウンター

2024/12/10

コンテンツデータなんかでループさせてる時のカウンター。
これだけで記事を作るのもどうかと思ったけど他に書くのもないわりにメモを入れておきたかったので。

<mt:If name="__counter__" le="6"> カウンターが6までの時 <mt:Else> それ以降の時 </mt:If>

カウントして6回以上だったら別の処理をしたいなぁと思ってググったらドンビシャのページがあった。今となってはどこで見つけたのか覚えてない。

その他の予約変数

下記のようなものがあるらしい。

__first__ ループ出力の最初である場合 true (1) となります。 __last__ ループ出力の最後である場合 ture (1) となります。 __odd__ ループ出力の奇数回目の場合 ture (1) となります。 __even__ ループ出力の偶数回目の場合 ture (1) となります。 __index__ ループのインデックスを格納します。 __counter__ ループした回数を格納します。

記事ページ

2024/10/04

基本的にコンテンツデータを使ってどうこうすることが多かったので記事ページをどうこうするのはあまり知らなかった事実。
ということで覚え書き。

とりあえずループと単発で取得する一式

<mt:Entries offset="0"> ←ループで取得する時に必要なやつ。これは全件取得。 ページタイトル:<mt:EntryTitle> 本文:<mt:EntryBody> 続き:<mt:EntryMore> 記事の公開日:<mt:EntryDate format="%Y.%m.%d"> 記事のプライマリカテゴリー:<mt:CategoryLabel> 記事のカテゴリーすべて: <mt:EntryCategories glue=","> <mt:CategoryLabel> </mt:EntryCategories> </mt:Entries> ←ループで取得する時に必要なやつの終了タグ

カスタムフィールドでつまずいたやつ

アセットでURLだけ取得したい時。
[MTAssetURL]ではエラーになる。ググってもなかなか見つけられなかったのでここにも記載。
仮に作ったカスタムフィールドの名前が[PdfAddress]だったとしたら、その後ろに[Asset]をつけてあげる。
下記はそれプラス[PdfAddress]にデータがあったら、という書式。
でもこんなのググって出てこなかったら本当にわからない。

<mt:If tag="PdfAddress"> <mt:PdfAddressAsset><mt:AssetURL></mt:PdfAddressAsset> </mt:If>

オフィシャルだとこのページのここの記載が解説。わかるかっつーの!

アーカイブマッピング

あとこれは記事データだけじゃないけどアーカイブマッピングにもちょっとだけMTタグが使えたよという話。
下記は日時のファイル名をアーカイブマッピングで作っちゃうやつ。

<mt:EntryCreatedDate format="%Y%m%d%H%M%S">.html <mt:ContentCreatedDate format="%Y%m%d%H%M%S">.html ← コンテンツデータの場合はこっち ※20231211203222.htmlみたいな感じで作られる

あと条件に合わないやつはファイル生成しないやつ。
これは本文が空じゃなければファイルを生成というパターン。
こういうのもネットのあちこちにあるとググりやすくなるよね。

<mt:If tag="EntryBody"><mt:EntryCreatedDate format="%Y%m%d%H%M%S">.html</mt:If>

他にもこういうパターンも。値を変数にいれてif文で判定してる。

<mt:SetVarBlock name="a"><mt:ContentField content_field="記事タイプ"><mt:ContentFieldValue></mt:ContentField></mt:SetVarBlock><mt:If name="a" eq="記事詳細">css-memo/%F.html</mt:If>

Movable Type:不要なHTMLを出力しない

MTで不要なHTMLファイルを出力しない方法

コンテンツフィールドの使い方

2024/09/11

いやまあ下記ページを参照しただけなんですけどね・・・
他のコンテンツデータをちゃんと取得できるの知らんかったわい。

→もっと!コンテンツタイプを使ってみよう

あと独自フィールドタイプを追加するのはかなり難しそう。ちょっとこれはできないかも。

コンテンツタイプのフィールドタイプを増やしてみよう

Movable TypeGoogleMAP座標のコンテンツタイプ追加してみた。



カスタムブロックの作成

2024/07/26

ブロックエディタで使える標準のものではちょっと機能が足りない、機能を特化させたいものを用意したい時に使う機能がカスタムブロック。
左メニューのブロックエディタから作成する。

例1 : 段落間のスペースを作る

新規カスタムブロックから
名前:行間スペース
識別子:block_space
ブロック:なにも選ばず
カスタムスクリプト:下記のstyleを設定
コンテナ要素で包むにチェック
ブロックの追加と削除にはチェックせず
プレビューを表示するにチェック
で完了。編集画面のブロックを追加から「行間スペース」のボタンができてるはずなので利用できるようになる。

<style> .block_space{ display: block; margin: 0px; padding: 20px 0px; background-color:#d6e1e1; } </style>

上記style設定は管理画面での見た目の整えなので、書き出されるhtml側でも同じようなcss設定を用意しておけば作れる。

例2 : 入力ブロック

例えば上記のようなxmpブロックを用意したい場合。
HTMLブロックを使ってタグ打ちしちゃってもいいんだけど練習がてらカスタムブロックで作るとしたら・・・

新規カスタムブロックから
名前:xmp
識別子:xmp
ブロック:テキスト(複数行)を選んでクラス名を任意のものに設定。(ここでは「xmp_area」と設定)
カスタムスクリプト:下記
コンテナ要素で包む、ブロックの追加と削除、共にチェックなし
プレビューを表示するにチェック。
カスタムスクリプト枠内は下記。

<style> .xmp_area{ padding: 10px; line-height: 1.8; color:#6a7072; border:4px solid #c0cace; } </style> <script> document.addEventListener("DOMContentLoaded", () => { if (document.body.dataset.hasCompiledHtml) { return; } const xmp_area_text = document.querySelector('.xmp_area').textContent; const output = `[xmp]${xmp_area_text}[/xmp]`; MTBlockEditorSetCompiledHtml(output, true); }); </script>

同じく上記のstyle要素は管理画面内での見え方設定なので、html側は別途サイトデザインに合うような形でのcss設定が必要。
ブロックの初期値でクラス名を設定したけど、その設定値をjsで使うのでそこさえ覚えといたらなんとでもなるかと。
(ちなみに上記のjs内で[xmp]としてるがタグで囲むとそこでタグと解釈されてレイアウトが崩れるからそうしてるだけです)

コンテンツデータのエディタに独自cssをつける

2024/07/19

コンテンツデータのエディタに独自cssをつける

他で見るのと同じこと書くけど・・・メモとして一応残す。

1:設定 > 投稿の「WYSIWYGエディタの設定」に独自cssファイルのURLを記載。

例:そのままフルパス https://mt.nascha.jp/mt-system-v5/mt-static/support/edit.css 例:変数を使う {{theme_static}}edit.css 例:ドメイン部分の省略 /mt-system-v5/mt-static/support/edit.css

2:上記で設定したcssファイルに内容を記載していく

例: [data-content-type-name="コンテンツデータ名"][data-field-name="フィールド名"] h1 { color: #000; margin: 0px 0px 0px 0px; padding: 10px; background-color:#b1d131; }

3:再構築して入力エディタ箇所を確認

注:[略][略]の間にスペース入れちゃうと効かない。30分くらい悩んだ。

参考リンク集

記事・ウェブページ・コンテンツデータの編集画面に CSS を適用する
コンテンツフィールドの入力をブロックエディタモードにする

MTのバージョンアップ

2024/02/28

【1】個人用途なので下記よりメールを出してバージョンアップのDLリンクをもらう。

https://www.sixapart.jp/inquiry/movabletype/personal_download.html

【2】下記ページを元にアップグレードを行う。

https://www.movabletype.jp/documentation/mt7/installation/upgrade/upgrade/

【3】DL後の手順

3-1 バージョンアップファイル群のアップロード

mt_app_newというフォルダを作ってDLしたファイルをアップ。
あとあとパーミッションでエラーになるので755にしておく。
mt_app ←現在の管理画面ファイル群
mt_app_new ←バージョンアップのファイル群一式
(※フォルダ名は環境によって違う)

3-2 フォルダ名のリネーム

mt_app_old ←現在の管理画面ファイル群をこれに
mt_app ←バージョンアップのファイル群一式

3-3 管理画面にアクセス

DB情報を求められるので入力していく。
完了。
Internal Server Errorの場合はどこかのファイルのパーミッションを見直し。
mt_app_oldは不要なので消してもいいし、残しておいてもいい。
フォルダ名を元に戻すと以前のバージョンに戻れる。

コンテンツデータのメモ

2024/01/16

大注意!

ある程度作ってからコンテンツタイプでフィールドを削除するとたまに時々コンテンツデータが見れなくなるようになる!
ある程度作ってからのフィールド削除は危険なのでやめよう!


コンテンツデータのテンプレートはこんな感じ。

<mt:ContentField content_field="内容"><$mt:ContentFieldValue$></mt:ContentField>
「内容」っていうのはコンテンツタイプで設定したフォームの枠の名前。

データをループさせて一覧を書き出すのはこんな感じ。

<mt:Contents content_type="コンテンツデータ名"> <mt:ContentField content_field="内容"><$mt:ContentFieldValue$></mt:ContentField> </mt:Contents>
カテゴリセットを元にデータを取得する時はこんな感じ

<MTContents content_type="[コンテンツデータ名]" field:[英語のフィールド名]="[取得したいカテゴリの値]"> 〜処理〜 </mt:Contents>
[英語のフィールド名]はどうも英語名じゃないと取得できないようなので、事前にコンテンツタイプを作る時から考えて名前をつけよう。英語のフィールド名をつけてなかったらコンテンツアーカイブなんかからテンプレートを作るけど、その時に右側のコンテンツフィールドを選んでユニークIDを控えてそれを入れよう。

コンテンツタイプで編集フォームの要素を作ってコンテンツデータのところでデータ入力に関してはメモはいいよね。わかる話だし。

コンテンツデータとはちょっと話がずれるけど、出力ファイル名のところ、階層パス付けて保存するとちゃんとその通りの構造になってくれるのは偉いな!

しかし公式ヘルプはほんとわかりにくい。
入力したデータを取得するのはどうしたらいいのかすらヘルプページから探すことは困難。
「ContentFieldValue」という単語を知らないと多分探せない。

コンテンツデータを取得するにあたり、アセットの場合はAssetURLが使えて... <mt:ContentField content_field="内容"><$mt:AssetURL$></mt:ContentField>
日付データだとformatが使える。 <mt:ContentField content_field="日付"><mt:ContentFieldValue format="%Y.%m.%d"></mt:ContentField>

その他

カテゴリセットの値を取得したい時。
コンテンツ対応で作る時のコンテンツフィールド名が「ページ階層」だとして。

●日本語の方(セットする時のフォームの左側の方) <mt:ContentField content_field="ページ階層"><mt:CategoryLabel></mt:ContentField> ●英語の方(セットする時のフォームの右側の方) <mt:ContentField content_field="ページ階層"><mt:CategoryBasename></mt:ContentField> ●階層として出したい時
<mt:ContentField content_field="ページ階層"><mt:SubCategoryPath></mt:ContentField>
これ左右の値の名前?がなんていうのかわからんのでググり方が非常に難しい。
Labelにするならvalueにしてくれよとも思う。

あと<mt:SubCategoryPath>はアーカイブマッピングの設定でもいけた。 こんな感じ。 <mt:SubCategoryPath>/%-F 複数のカテゴリー設定を作ってた場合は知らん。やってないし。

ページ送りのテスト

2023/12/11

本体機能を使う場合は下記ページ
Movable Typeの標準機能での動的ページ分割

ただあまり自由度が感じられなく・・・

MTだとPageButeを使うのが一般的なのかな?
PageBute

今回は過去ページ一覧をjsonファイルとして書き出して、javascriptで読み込んで表示も全部javascriptを試してみた。
テストページ
利点としてはjavascriptで制御してるのでいろいろ融通が効く、MTの機能を使ってるのが一覧にするjsonファイルの書き出しなので初歩的な機能しか使ってないという点。
欠点は記事一覧を出してるので数百件の過去記事データになると読み込みが大変なんじゃ・・・?という点。
まあそのへんは工夫と知恵でなんとかするしかないかもね。

文字の置き換え

2023/11/18

タグはエンコードしないと消えるのでなんとかしたいがグローバル・モディファイアではちょっとざっくり一括すぎて使いにくい。
具体的には<code>で囲まれた分のタグはhtmlエンコードして表示できるようにしたい。

調べるとregex_replaceは連続して使えることがわかったので下記のようにしてみた。
<$mt:PageBody regex_replace="/<code>\74/g","<code>&lt;" regex_replace="/\76</code>/g","&gt;</code>"$> \74\76はそれぞれ開始タグ(<)と閉じタグ(>)。
エスケープ処理を入れてもどうもなぜかうまくマッチしてくれなくて文字コードで指定したらうまくいった。
文字コードの確認はここで見た。
文字コードの確認

とりあえずこれでなんとか動いてる。

モジュールを使う

2023/11/18

よく使うのはこのへん? <$mt:Include module="テンプレートモジュール名"$> <$mt:Include widget="ウィジェット名"$> <$mt:Include identifier="main_index"$>
モジュールは引数みたいなことができる。 <$mt:Include module="テンプレートモジュール名" page="A"$>
(テンプレートモジュール名)内では... <mt:If name="page" eq="A"> Aです。 <mt:ElseIf name="page" eq="B"> Bです。 <mt:Else> Cです。 </mt:If>
ちなみにコンテンツデータとかwebページの編集画面でMTタグを使うにはテンプレート側で mteval="1" をつけると展開してくれる。

不要な空行を消す

2023/11/18

<mt:Unless regex_replace="/^\s*\n/gm",""> ここに書いた処理は空行が削除される </mt:Unless>

フォルダの一覧

2023/11/18

ウェブページの一覧を見せるにはいくつか方法がある。

【1】Foldersを使う

show_empty="0"をつけることで空フォルダは出力しないようにできるが、並び順については指示ができない。 <mt:Folders show_empty="0"> <strong><$mt:FolderLabel$></strong><br> <ul> <mt:Pages sort_by="title" sort_order="ascend"> <li class="page page-<$mt:PageID$>"><a href="<$mt:PagePermalink$>"><$mt:PageTitle$></a></li> </mt:Pages> </ul> </mt:Folders>

【2】TopLevelFoldersを使う

<mt:If tag="FolderCount" ne="0">を入れることで空フォルダを出力させないようにできる。こちらはFoldersと違いフォルダの並び順で出力できる。 <mt:TopLevelFolders> <mt:If tag="FolderCount" ne="0"> <h2><$mt:FolderLabel$></h2> <ul> <mt:Pages sort_by="title" sort_order="ascend"> <li class="page page-<$mt:PageID$>"><a href="<$mt:PagePermalink$>"><$mt:PageTitle$></a></li> </mt:Pages> </ul> </mt:If> </mt:TopLevelFolders>

【3】TopLevelFoldersを使う その2

こちらは出力させないフォルダを指定するパターン。 <mt:TopLevelFolders> <MTSetVarBlock name="folname"><$MTFolderLabel$></MTSetVarBlock> <MTUnless name="folname" like="画像フォルダ"> <h2><$mt:FolderLabel$></h2> <ul class="normal"> <mt:Pages sort_by="title" sort_order="ascend"> <li><a href="<$mt:PagePermalink$>"><$mt:PageTitle$></a></li> </mt:Pages> </ul> </MTUnless> </mt:TopLevelFolders>

MT 基礎編

2023/11/18

変数

変数の作り方はいくつかある。
作り方によって特徴があるので注意が必要。
できるはずなのにな〜という時は作り方を変えてみたりするのも手。

単独での変数

<mt:SetVar name="変数名" value="変数に入れたい値"> <mt:SetVar name="変数名" value=$別の変数名> 特徴
・valueに「$変数名」で他の変数の値を使うことができる
・$はなくてもいけるけど付けないと後で見返した時わからんようになる笑

複数の変数を作る時

<mt:SetVars> contents_entry_year=<mt:ContentField content_field="日付"><mt:ContentFieldValue format="%Y"></mt:ContentField> page_title=トップページ </mt:SetVars> 特徴
・一度に複数の変数を作れる
・上記例のようにFieldValueのようなものを入れる時はこの形じゃないと入らない。

長い(?)変数

<mt:setvarblock name="page_data"> ここの中に書かれたものが変数名「page_data」の中身になる。 </mt:setvarblock> 特徴
・四則演算ができないのでこの形で数字の定義をするのはやめよう。

変数の表示の仕方

<mt:Var name="変数名">

変数の文字置き換え

・わりと使う。regex_replaceは複数繋げられるのは便利。あとregex_replaceは変数だけじゃなくMTタグ全般に使える。(後述)
<mt:Var name="変数名" regex_replace="/置き換えたい文字/g","置き換える文字">

コンテンツデータ 値の取得(FieldValue)

だいたいこの形。 <mt:ContentField content_field="フィールド名"><mt:ContentFieldValue></mt:ContentField> 画像はこういうやつ <mt:ContentField content_field="フィールド名"><mt:AssetURL></mt:ContentField> パーマリンクはこれ <mt:ContentPermalink>

Contentsのモデファイア(一覧ループの条件など)

わりと使うのがlimitsort_byというところ
一覧はこちら

if文

<mt:If name="year" eq="2024"> 2024年です。 <mt:ElseIf name="year" eq="2022"> 2023年です。 <mt:Else> 2022年より前です。 </mt:If>

その他

大文字、小文字

<mt:Var name="変数名" upper_case="1"> ← 値を大文字にする <mt:Var name="変数名" lower_case="1"> ← 値を小文字にする

新規インストール

2023/11/18

準備 サーバーにディレクトリを作る

下記3ディレクトリが必要。
●ウェブサイトディレクトリ
●アプリケーションディレクトリ
●スタティックディレクトリ

今回は下記のような入れ子構造にした。フォルダ名は仮。
●ウェブサイトディレクトリ(/www/)
 ┗アプリケーションディレクトリ(/www/app/)
  ┗スタティックディレクトリ

アプリケーションディレクトリはDLしたMTのファイル群を入れるフォルダ。
スタティックディレクトリについてはファイル群にあるので別に用意することもなくそのままの構造でスタートした。

パーミッション

練習の意味もあって一度作ってたMTサイトを削除して再度インストールしたのだが、削除がうまくいってなくて色々ひっかかる。
パーミッションもエラーになったので改めてフォルダに設定。
今回ウェブサイトは777でアプリケーションは755。
ただこれじゃまずいって記事もあったけど、公式ドキュメントサイトの記述に準じた。

データベース

MTサイトは削除してもデータベースに内容が残る?
とにかく内容が残ったので面倒だけど一つづつ削除して改めてクリーンインストール。

チェックページからの初期設定画面

全部終わったらチェックページを確認してから初期設定画面にアクセス。
チェックページ https://ドメイン/app/mt-check.cgi
サインイン https://ドメイン/app/