MTでのブログをまたいだテンプレート共有方法(新規書き起こし)

昔同じようなことは書いたんですが、わかりにくかったり理解が十分じゃなかったりしたので書き直しました。
すべてMT4.2xでの話です。MT5は未検証。

ブログ1のテンプレートをブログ2で使いたい

ブログ1のテンプレートをブログ2で使うには、blog_idモディファイアを設定すればいい。
テンプレートとしてブログ1のものが使用され、出力内容はブログ2のものとなる。

# ブログ2のテンプレート内で
<MTInclude module="ヘッダ" blog_id="1">

ブログ1でのテンプレート出力をブログ2で使いたい

例えば、画像パスなんかは共通にしたいというとき。
もしくはブログ1のとあるカテゴリの最新記事情報が欲しいとき。
こういうときはMTMultiBlogタグを使い、include_blogsモディファイアを指定する。

# ブログ2のテンプレート内で
<MTMultiBlog include_blogs="1">
<MTInclude module="ヘッダ" blog_id="1" include_blogs="1">
</MTMultiBlog>

include_blogsと複数形になっているので複数のブログの指定が可能。
その場合、指定したブログの出力結果をすべて吐き出す。

# ヘッダモジュール
<$MTBlogName$> - <$MTBlogURL$><br>

# テンプレート
<MTMultiBlog include_blogs="1, 2">
<MTInclude module="ヘッダ" blog_id="1" include_blogs="1">
</MTMultiBlog>

# 出力
ブログ1の名前 - http://www.hogehoge1.com/
ブログ2の名前 - http://www.hogehoge2.com/

とはいえ一時的に使ってるブログ内へテンプレートを適応したい

例えば、このカテゴリのエントリ一覧、みたいなモジュールをブログ1でもブログ2でも使いたいんだけど、
画像があって、画像はブログ1内にあるディレクトリで共有させたいときは、ブログ1のURLを使うことで
可能になる。

<img src="<$MTBlogURL$>images/hoge.gif">
<!-- ここはブログ1でもブログ2でも同じURLを出力させたい -->
<MTEntries>
  <a href="<$MTEntryLink$>"><$MTEntryTitle$></a>
  <!-- ここはそれぞれのブログの内容を表示させたい -->
</MTEntries>

みたいな。
そうすると上の例で行けばこのモジュールをMTMultiBlogで囲んでやればいいわけですが、ブログ2においてinclude_blogsで1を指定すると、ブログ1のエントリ一覧が出力されてしまうわけです。
かといってinclude_blogs="1,2"としても、二回リストが表示されるだけ。

このように、「ここの間だけ、各ブログローカルな値で出力させたい」というときは、MTMultiBlogLocalBlogを使う。
このタグで囲まれたエリアは「自分のブログのローカルな内容」を参照して出力してくれる。便利。

<img src="<$MTBlogURL$>images/hoge.gif">
<!-- ここはブログ1でもブログ2でも同じURLを出力させたい -->
<MTMultiBlogLocalBlog>
<MTEntries>
  <a href="<$MTEntryLink$>"><$MTEntryTitle$></a>
  <!-- ここはそれぞれのブログの内容を表示させたい -->
</MTEntries>
</MTMultiBlogLocalBlog>

カテゴリ系タグの挙動が変

しかしMultiBlogを用いたテンプレート使い回しは、カテゴリ系のタグについては動作が変なので注意。
例えばMTCategoriesなどでは、こんな感じ。

# 「カテゴリ」テンプレート
<MTCategories>
  <$MTCategoryLabel remove_html="1" $>
</MTCategories>

# ブログ2での記述
<MTMultiBlog include_blogs="1">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ1のカテゴリ1
ブログ1のカテゴリ2
ブログ1のカテゴリ3

んじゃあinclude_blogs="2"にすればいんじゃん、というのはご名答。

# ブログ2での記述
<MTMultiBlog include_blogs="2">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ2のカテゴリ1
ブログ2のカテゴリ2
ブログ2のカテゴリ3

ただこれだと、ブログ1のMTBlogURLを参照できないので、画像の共有が行えなくなってしまう。
そこで参照するブログ自体をタグに指定してやると解決。

# 「カテゴリ」テンプレート
<MTCategories exclude_blogs="1">
  <$MTCategoryLabel remove_html="1" $>
</MTCategories>

# ブログ2での記述
<MTMultiBlog include_blogs="1">
  <MTInclude module="カテゴリ">
</MTMultiBlog>

# 出力結果
ブログ2のカテゴリ1
ブログ2のカテゴリ2
ブログ2のカテゴリ3

exclude_blogsで指定するところがミソ。なぜかinclude_blogsではダメだった。blog_idsもダメ。
このexclude_blogsに指定するブログIDをMTSetVarとMTIfを駆使して制御することで、とりあえずテンプレート共有はできるようになる。

ここまでやってしまうと逆にめんどい、という話もあるけど、でもやっぱり共通化できるのでそこは楽なんですねぇ。

一般ユーザからsuでrootになるとコマンドが使えない

それは、PATHが引き継がれてないからだね!


suしたときにPATHなどの設定を引き継ぐには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/020suenv.html


そらーエラーになりますわ。

su -

で解決。


リモートで使うとuseraddが使えない - 教えて!goo
http://oshiete1.goo.ne.jp/qa2265978.html

基本的にはCSSでプルダウンメニューを作る

Fireworksで作るプルダウンメニューがキライです。
レイアウトもいまいちだし、何よりクロスブラウザしてない。


バージョンが昔のすぎるというのがありますが…。
多分今のバージョンのものだといいものができるんだと思います。


でもまぁそんなお金もないのでCSSJavaScriptで作りたいなと。
ここを参考にさせていただきました。ありがとうございました。


プルダウンメニューをさらに作り込んでみた | CSS-EBLOG
http://css-eblog.com/csstechnique/post-11.html

MTでリッチテキストエディタを使うとブラウザで改行がpタグだったりbrだったりで困ったら

これ、地味に困りました。
MT5では変わってるのかなぁ?


MTは記事投稿をするときにリッチテキストエディタが使える訳なんですが、
こいつの挙動がブラウザによって違いすぎる!ひどい!


IEで使えば改行がpになるけど、Firefoxだったらbrとか、
そのあたりが統一されてません。
で、pタグに特殊なスタイルを適応させたいときなどは、例えばFirefoxでは
ちゃんと狙ったようにスタイリングできるけどIEだとダメです、ってなって
大変なことになります。


そこでこのFCKeditorにエディタを入れ替えてしまいましょう。
こいつならどのブラウザでもpタグで改行を入れてくれます。


今日のコラム:AjaxWYSIWYGエディタ、FCKeditor 2.6 日本語版をリリースしたよ。:世界中の1%の人々へ
http://www.dakiny.com/archives/fckeditor/ajax_wysiwyg_editor_fckeditor_26/

CakePHPでDBを使わないけどバリデートとかしたい

基本はモデルで、

var $useTable = false;

ですが、これだとバリデーションをかけたり
FormHelperを使ったりするとDBを読みに行ってエラーを吐きます。


CakePHP(のモデルクラス)は、テーブルの構成情報を内部的に持っていて
それがないからエラーを吐いて止まってしまう…ということらしいです。
なので、ダミーのテーブル構成情報をモデルに与えてやります。

var $_schema = array('id' => array('type' => 'integer'));

これはホントならこんな感じになる。

var $_schema = array(
    'id' => array('type' => 'integer'),
    'name' => array('type' => 'string', 'length' => 500),
    'birthdat' => array('type' => 'datetime')
);

みたいな。テーブルの構成情報が乗っかるわけです。
それを最低限idだけ宣言してやって渡せば、一応は動くようになります。

ただし実際にはdebugモードを1以上にするとわかるように
接続を試みて失敗はしています。正常動作ってわけでもない。


だから仕方なくsqliteに接続してるように見せかけてエラーを
出さないようにはしています。根本的な解決にはなってないけど、仕方ない。


IT『苦労と試行』日記 - 投稿の詳細: DB なし Model で FormHelper を使う方法
http://kuroutoshikou.blog16.jp/index.php/2009/11/06/db_a_oa_model_a_s_formhelper_a_afia_a_sa


"DBを使わずにFormHelperを使用するときは" フォーラム - CakePHP Users in Japan
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1610&forum=6&post_id=3733#forumpost3733

プライバシーポリシーのひな形

プライバシーポリシーのひな形ってのも変なんだけど。


プライバシーポリシー - Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1310533333


プライバシーポリシー 〜 個人情報保護法対策プロジェクト(個人情報保護法対策・プライバシーマーク取得)
http://www.kj-law.com/p-policy.htm

CakePHPでsqliteを使う

こんなゆるくていいのか…。

var $default = array(
  'driver' => 'sqlite',
    'connect' => 'sqlite_open',
    'host' => '',
    'login' => '',
    'password' => '',
    'database' => 'filename.db',
    'prefix' => ''
);


コスミー報告書[社外秘] - CakePHPではまったこと 4(sqliteをデータベースとして使う)
http://red-treasure.com/report/?p=45