TT
//CODE
configの名前等を変更したら///
alphal33n-wizard.cgi
config-alphaxx.cgi
インストールでつまる
wizardに切り替わらない!
Got an error: Missing configuration file. Did you forgot to move mt-config.cgi-original to mt-config.cgi?
/source/MTOS-5.2.13/tmpl/wizard/start.tmpl
alphal33n-wizard.cgi
config-alphaxx.cgi
ToDo)セキュリティ対策
//mt-configの名前を変更する。。mt-config.cgiの記載があるソース
/lib/MT.pm
/lib/MT/ConfigMgr.pm
/lib/MT/App/Wizard.pm
※ !! mt-check.cgi
/php/mt.php
元のデータ・・originalではなかった!
/MTOS-5.2.13/tmpl/wizard/mt-config.tmpl
-> config-alphaxx.tmpl に変更
/lib/MT/App/Wizard.pm に記載あり
configの初期値は、mt-config.tmplをいじらなくても
/lib/MT/Core.pm
で変更できるのでこちらで変更
AutoSaveFrequency -> 0 自動保存無効
EntriesPerRebuild -> 再構築時の記事更新単位(デフォルト40->10に変更)
ThemeStaticFileExtensions -> テーマでアップロード可能なファイルの拡張子
jpg jpeg gif png js css ico flv mp3 swf html otf ttf php htc gz eot woff woff2 svg
ImageDriver GD 画像処理のドライバ
ファイル出力時のパラメータの初期値
HTMLUmask 0022
DirUmask 0022
HTMLPerms 0604
以上、初期値を変更済
//余計な外部アクセスを消すために
標準的な実行ソースをあらかじめ変えておく。
/lib/MT/Core.pm
.cgiが12箇所
XMLRPC 16箇所
atom 13箇所
ping 28箇所
trackback 52箇所
/lib/MT.pm
.cgiが10箇所
XMLRPC 8箇所
atom 0
ping 64箇所
trackback 8箇所
絵文字対応
- -> MTで絵文字の保存を可能にする
- -> mysql管理 -> adminer
- -> perlでMySQL
//CODE
my %Charset = (
'utf-8' => 'utf8',
'utf-8' => 'utf8mb4',
'shift_jis' => 'sjis',
'shift-jis' => 'sjis',
'euc-jp' => 'ujis',
#'iso-8859-1' => 'latin1'
);
MySQLのドライバは”mysql.pm”。
格納場所はMTインストールフォルダ内の「/lib/MT/ObjectDriver/Driver/DBD/mysql.pmmysql.pm」
これの「my %Charset =」に「’utf-8′ => ‘utf8mb4′,」を追加。
※元々ある「’utf-8’ => ‘utf8’」は削除しない
インストール時に照合順を変更するのはやめて、インストール後に照合順を変更するスクリプトを作って実行した方が良さそう!
- -> phpでmysqlを操作
- -> テーブル定義の変更ヒント
- -> 別のデータベースを使う
- ->Movable Typeに独自オブジェクトを追加する方法
- ->MTの解説
- -> MySQL操作
hpMyadminでDBにログイン、
以下テーブルのカラムの「照合順序」を
「utf8_general_ci」から「utf8mb4_general_ci」に変更。
(全体設定を変えてもいいのかもしれないが、トラブルも面倒なので対象のみ変更)
mt_entry
entry_title(タイトル)
entry_text(本文)
entory_text_more(本文続き)
mt_comment
comment_text(コメント本文)
comment_author(コメント投稿者名)
/MTOS-5.2.13/lib/MT/ObjectDriver/DDL.pm
-- ブログ記事を保存するテーブルの文字コードを変更
ALTER TABLE `mt_entry` DEFAULT CHARACTER SET utf8mb4;
-- utf8で設定されているカラムの文字コードを変更
ALTER TABLE mt_entry
modify `entry_approver_ids` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_atom_id` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_basename` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_class` varchar(255) CHARACTER SET utf8mb4 DEFAULT 'entry',
modify `entry_convert_breaks` varchar(60) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_excerpt` mediumtext CHARACTER SET utf8mb4,
modify `entry_ext_datas` mediumtext CHARACTER SET utf8mb4,
modify `entry_keywords` mediumtext CHARACTER SET utf8mb4,
modify `entry_pinged_urls` mediumtext CHARACTER SET utf8mb4,
modify `entry_prefs` mediumtext CHARACTER SET utf8mb4,
modify `entry_revision_comment` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_tangent_cache` mediumtext CHARACTER SET utf8mb4,
modify `entry_text` mediumtext CHARACTER SET utf8mb4,
modify `entry_text_more` mediumtext CHARACTER SET utf8mb4,
modify `entry_title` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
modify `entry_to_ping_urls` mediumtext CHARACTER SET utf8mb4;
独自項目の追加
「独自項目を追加」方法
※インストール前に記述が必要!UPDATEではデータベース追加は行われない!
Blogの例
lib\MT\Blog.pm // インストール時にデータベースに項目追加 2箇所
lib\MT\CMS\Blog.pm // 不明⇐必要なし
lib\MT\Template\Tags\Blog.pm // 出力タグ追加
1箇所
###########################################################################
=head2 EntrySeo
Outputs the value of the seo field for the current entry in context.
=cut
sub _hdlr_entry_seo {
my ( $ctx, $args ) = @_;
my $e = $ctx->stash('entry')
or return $ctx->_no_entry_error();
my $seo = defined $e->seo ? $e->seo : '';
return $seo;
}
lib\MT\Template\ContextHandlers.pm // 出力タグ追加
1箇所
## Entry
EntriesCount =>
'$Core::MT::Template::Tags::Entry::_hdlr_entries_count',
EntryID => '$Core::MT::Template::Tags::Entry::_hdlr_entry_id',
EntryTitle =>
'$Core::MT::Template::Tags::Entry::_hdlr_entry_title',
EntryStatus =>
'$Core::MT::Template::Tags::Entry::_hdlr_entry_status',
EntryFlag => '$Core::MT::Template::Tags::Entry::_hdlr_entry_flag',
EntryBody => '$Core::MT::Template::Tags::Entry::_hdlr_entry_body',
EntryMore => '$Core::MT::Template::Tags::Entry::_hdlr_entry_more',
EntryLinks => '$Core::MT::Template::Tags::Entry::_hdlr_entry_links',
EntryForm => '$Core::MT::Template::Tags::Entry::_hdlr_entry_form',
EntryOption => '$Core::MT::Template::Tags::Entry::_hdlr_entry_option',
EntrySeo => '$Core::MT::Template::Tags::Entry::_hdlr_entry_seo',
websiteとpageはそれぞれ、blog entryを引き継いでいるが、
タグが別なので、同様の修正が必要。
項目≒タグ追加するときの名前はすでに使われているものと
重複しないようにする。
EntryではLinkが使われていた!
記事のインポート・エクスポートは、
lib\MT\ImportExport.pmの書き換えで対応できた。
-----
LINKS:
<$MTEntryLinks$>
-----
FORM:
<$MTEntryForm$>
-----
OPTION:
<$MTEntryOption$>
-----
SEO:
<$MTEntrySeo$>
バックアップ・復元は未確認
変更前)lib>MT>ArchiveType>Category.pm
//*退避した。一部動作がおかしいのでしばらく様子見。
166行目
MT::ArchiveType::archive_entries_count( $obj, ¥%params );
変更後)
return 1;
変更前)//lib>MT>Asset>Image.pm
//332行目(変更前)
$wrap_style = 'class="mt-image-' . $param->{align} . '" ';
変更後)
(変更後)
$wrap_style = '';
変更前) 362行目
MT::Util::encode_html( $asset->label ), $wrap_style
変更後)
MT::Util::encode_html( $asset->description ), $wrap_style
変更前) 375行目
if ( $param->{thumb} ) {
$text = sprintf(
'<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->label ),//削除
MT::Util::encode_html( $thumb->url ),
$dimensions,
$wrap_style,
);
}
else {
$text = sprintf(
'
',
MT::Util::encode_html( $asset->label ),//削除
MT::Util::encode_html( $asset->url ),
$dimensions, $wrap_style,
);
}
変更後)
if ( $param->{thumb} ) {
$text = sprintf(
'<a href="%s"><img src="%s" alt="%s" %s %s></a>',//順番
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $thumb->url ),
MT::Util::encode_html( $asset->description ),//挿入
$dimensions,
$wrap_style,
);
}
else {
$text = sprintf(
'
',//順番
MT::Util::encode_html( $asset->url ),
MT::Util::encode_html( $asset->description ),//挿入
$dimensions, $wrap_style,
);
}
変更前)lib>MT>ObjectDriver
535行目(変更前)
## Set statement's ORDER clause if any.
if ( $args->{sort} || $args->{direction} ) {
my $order = $args->{sort} || 'id';
if ( !ref($order) ) {
my $dir = $args->{direction}
&& $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
$stmt->order(
{ column =>
$dbd->db_column_name( $tbl, $order, $alias ),
desc => $dir,
}
);
}
else {
my @order;
foreach my $ord (@$order) {
push @order,
{
column => $dbd->db_column_name(
$tbl, $ord->{column}, $alias
),
desc => $ord->{desc},
};
}
$stmt->order( ¥@order );
}
}
変更後)
## Set statement's ORDER clause if any.
if ( $args->{sort} || $args->{direction} ) {
my $order = $args->{sort} || 'id';
if ( !ref($order) ) {
my $tmp_tbl = $args->{sort_class} ? $driver->table_for($args->{sort_class}) : $tbl;//この行を新規に追加
my $dir = $args->{direction}
&& $args->{direction} eq 'descend' ? 'DESC' : 'ASC';
$stmt->order(
{ column => $args->{sort_alias}//この行から変更
? $args->{sort_alias} . '.' . $dbd->db_column_name($tmp_tbl, $order)
: $dbd->db_column_name( $tbl, $order, $alias ),//この行まで変更
desc => $dir,
}
);
}
else {
my @order;
foreach my $ord (@$order) {
my $tmp_tbl = $ord->{sort_class} ? $driver->table_for($ord->{sort_class}) : $tbl;//この行を新規に追加
push @order,
{
column => $ord->{sort_alias}//この行から変更
? $ord->{sort_alias} . '.' . $dbd->db_column_name($tmp_tbl, $ord->{column})
: $dbd->db_column_name( $tbl, $ord->{column}, $alias ),//この行まで変更
desc => $ord->{desc},
};
}
$stmt->order( ¥@order );
}
}