www.kkoba.com  » kkobaのblog

2004年12月13日

[MT3.1] 企業内でのMoveble Type 3.1の利用

以前に「「なぜMovableTypeをいじってるのか」と言うタイトルで書いたが、自宅でBlogを書き出したきっかけは、勤務先で利用できるかも知れないと思ったからである。

俺としては、企業内での「メールマガジン」のバックエンドとしての利用を考えてる。

俺の勤務先には、社長メッセージ・事業部長メッセージ・本部長メッセージ・月別製品案内とか色々な「メールマガジン」があるし、お互いに引用しあってる (「社長メッセージにあるように」と書いてる事業部長メッセージとか) ので、企業内Blogってのはありだと思う。

現在、企業向けの一番安いライセンスで予定通り利用しているが、自分の備忘録も兼ねて、利用時の簡単なTipsを以下に書く。

1. 「Movable Type ニュース」を表示しない

Proxy Serverの関係で、Movable Typeニュースがタイムアウトして表示されない。どこにProxy Serverを記述すれば良いのか判らないし、Newsを表示させないようにする設定も判らない。

仕方がないので、/lib/MT/App/CMS.pmを編集して、ニュースを取りに行かないようにし、同時にテンプレートから「Movable Type ニュース」の部分を削除した。

/lib/MT/App/CMS.pmの下記をコメントへ

# $param{news_html} = MT::I18N::encode_text($app->get_newsbox_content(        )||''', 'utf-8', undef);  この行をコメントとした

/tmpl/cms/list_blog.tmplの下記部分を削除

<div class="news-box">
<h4><a href="http://<TMPL_VAR NAME=MT_PORTAL>/?v=<TMPL_VAR NAME=MT_VERSION>"><MT_TRANS phrase="Movable Type News"></a></h4>
<div class="inner">
<TMPL_VAR NAME=NEWS_HTML>
<p><MT_TRANS phrase="More news about "><a href="http://<TMPL_VAR NAME=MT_PORTAL>/?v=<TMPL_VAR NAME=MT_VERSION>">Movable Type</a>.</p>
</div>
</div>

2. MT-Previewプラグインの導入

記事を公開する前に、上司に確認する必要が出るかもしれない。その場合は、MT-Previewプラグインを導入すると、公開後の実際のイメージで確認を取ることができる。

3. 自動発行

Movable Type 3.1から標準機能となった「指定日時に記事を発行する」機能だが、同時に記事を発行したことをメールで案内できると便利だ。

/tools/run-periodic-tasksを以下のように改造すると、「概要(excerpt)」に概要が記述してある場合、通知リストの人に概要をメール送付することができる。

#!/usr/bin/perl -w

# Copyright 2001-2004 Six Apart. This code cannot be redistributed without
# permission from www.movabletype.org.
#
# $Id: run-periodic-tasks,v 1.5.2.1 2004/10/15 23:01:11 ezra Exp $

use strict;

use lib 'lib';
use lib 'extlib';

use constant VERBOSE => 0;

use MT;
use MT::Entry qw(:constants);
use MT::Util qw( offset_time_list );

my $mt = MT->new()
    or die MT->errstr;

for my $blog (MT::Blog->load) {
    my @ts = offset_time_list(time, $blog);
    my $now = sprintf "%04d%02d%02d%02d%02d%02d",
                      $ts[5]+1900, $ts[4]+1, @ts[3,2,1,0];
    print "Publishing entries for blog ", $blog->id, " up to ", $now, "\n"
        if VERBOSE;
    my $iter = MT::Entry->load_iter({blog_id => $blog->id,
                                     status => FUTURE},
                                    {'sort' => 'created_on',
                                     direction => 'descend'});
    my @queue;
    while (my $entry = $iter->()) {
        push @queue, $entry->id if $entry->created_on le $now;
    }

    my $changed = 0;
    my $total_changed = 0;
    my @results;
    my %rebuild_queue;
    foreach my $entry_id (@queue) {
        my $entry = MT::Entry->load($entry_id);
        print $entry->id, "\n" if VERBOSE;
        $entry->status(RELEASE);
        $entry->save
            or die $entry->errstr;
	
	# 追加ここから --------------------------------------------------
    	my $body = $entry->get_excerpt;
	if( length($body) > 0 )
	{
		my $author = $entry->author;
		my $mailfrom = $blog->name . ' <' . $author->email . '>';
		$mailfrom = MT::I18N::encode_text($mailfrom, undef, 'jis');
		$mailfrom = Jcode->new($mailfrom, 'jis')->mime_encode;
		$mailfrom =~ s/\r?\n/\r\n/g;
		my $mailto = $mailfrom;
		my $subj = $entry->title;
		my %head = ( To => $mailto, From => $mailfrom,
				Subject => $subj);
		$head{'MIME-version'} = '1.0';
		$head{'X-Mailer'} = 'Movable Type 3.1';
		$head{'Content-Transfer-Encoding'} = '7bit';
    		$head{'Content-Type'} = 'text/plain; charset=ISO-2022-JP';

		require MT::Notification;
		my $iter = MT::Notification->load_iter({ blog_id => $blog->id });
		my $i = 1;
		require MT::Mail;
		while (my $note = $iter->())
		{
			next unless $note->email;
				push @{ $head{Bcc} }, $note->email;
			if ($i++ % 20 == 0)
			{
				MT::Mail->send(\%head, $body);
            			@{ $head{Bcc} } = ();
			}
		}
		if ($head{Bcc} &qmp;&qmp; @{ $head{Bcc} })
		{
			MT::Mail->send(\%head, $body)
		}
	}
	# 追加ここまで --------------------------------------------------
	
        $rebuild_queue{$entry->id} = $entry;
        my $n = $entry->next(1);
        $rebuild_queue{$n->id} = $n if $n;
        my $p = $entry->previous(1);
        $rebuild_queue{$p->id} = $p if $p;
        $changed++;
        $total_changed++;
    }
    if ($changed) {
        MT::Util::start_background_task(sub {
            my $rebuilt;
            foreach my $id (keys %rebuild_queue) {
                my $entry = $rebuild_queue{$id};
                $mt->rebuild_entry( Entry => $entry, Blog => $blog )
                    or die $mt->errstr;
                $rebuilt++;
            }
            print "Rebuilt $rebuilt entries\n" if VERBOSE;
        });
        $mt->rebuild_indexes( Blog => $blog )
            or die $mt->errstr;
    }
    print "$changed updated in blog ", $blog->id, "\n" if VERBOSE;
}

1;

投稿者 かつ : 2004年12月13日 22:01

この記事のトラックバックURL

トラックバック一覧 (1件)

  1. エントリーのWYSIWYGプレビュー from coo MEMO

    MT標準の[確認]って、ほんとに簡易的なプレビューという感じで、ちゃんと自分のスタイルシートが反映された画面を確認する事が出来ず、ストレスたまっていたんですよね...

    トラックバック時刻 : 2005年01月21日 14:41

コメント一覧 (1件)

  1. ニュースを消す方法を参考にさせていただきました。
    こちらも、社内で実験的に作成したところ、管理画面を開くのが遅くて困っていたところでした。

    ありがとうございました。

    投稿者 Hideaki : 2005年09月12日 15:52

新規にコメントする




情報を登録する?



年間カレンダー
2007
12
 
11
1
10
1
09
1
08
 
07
 
06
 
05
 
04
3
03
7
02
3
01
4
2006
12
1
11
1
10
1
09
1
08
1
07
1
06
1
05
2
04
1
03
1
02
1
01
1
2005
12
1
11
1
10
4
09
2
08
1
07
2
06
3
05
7
04
4
03
8
02
6
01
10
2004
12
8
11
14
10
10
09
20
08
12
07
2
06
4
05
2
04
1
03
1
02
1
01
1
2003
12
1
11
1
10
1
09
1
08
1
07
1
06
2
05
2
04
3
03
3
02
7
01
3
2002
12
5
11
3
10
3
09
4
08
7
07
6
06
10
05
7
04
4
03
4
02
8
01
8
2001
12
6
11
12
10
18
09
6
08
 
07
 
06
 
05
 
04
 
03
 
02
 
01
 
2004年12月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

サイト内の検索

このBlogのライセンス