概要
Typechoは軽量で使いやすく高速なPHPベースのブログエンジンであり、拡張性を備えたプラグインシステムを提供しています。この記事では、Typechoプラグインの開発プロセスを実際の例を通じて説明し、独自の機能拡張を作成するためのガイドを提供します。
開発環境の準備
Typechoプラグインの作成に着手する前に、以下の環境を整える必要があります:
- PHPとMySQLが動作するサーバー環境
- Typechoブログシステムのインストール済み状態
これらの条件が満たされたら、プラグイン開発の実践に入ることができます。
実践例1:投稿自動公開メッセージ表示機能
このセクションでは、記事末尾に「この投稿は当プラグインにより自動公開されました」というメッセージを追加するシンプルなプラグインを作成します。
プラグインディレクトリ構築
Typechoのプラグイン格納ディレクトリ(デフォルトパス:typecho/usr/plugins)内に、新しいプラグイン用ディレクトリを作成します。ここではPostPublisherという名前のディレクトリを作成します。
プラグイン定義ファイルの作成
PostPublisherディレクトリ内にMain.phpファイルを作成し、プラグインの基本情報を定義します:
<?php
class PostPublisher_Plugin implements Typecho_Plugin_Interface
{
public static function startUp()
{
// プラグイン起動時の処理
}
public static function shutDown()
{
// プラグイン停止時の処理
}
public static function settingsForm(Typecho_Widget_Helper_Form $form)
{
$content = <<<HTML
<p>この投稿は当プラグインにより自動公開されました</p>
HTML;
echo $content;
}
public static function userSettings(Typecho_Widget_Helper_Form $form)
{
// ユーザー設定画面用ロジック
}
}
startUp()およびshutDown()メソッドはそれぞれプラグインの開始と終了処理を担当します。settingsForm()メソッドは設定画面を出力します。
プラグイン登録プロセス
管理パネルの「プラグイン」セクションから「PostPublisher」を選択し、「有効化」ボタンをクリックすることで、システムにプラグインを登録できます。
コンテンツ表示機能の実装
投稿ページの末尾にメッセージを表示するためには、テーマファイル(例:themes/default/post.php)内の<?php $this->footer(); ?>直前に以下のコードを挿入します:
<?php Typecho_Plugin::factory('PostPublisher')->settingsForm(); ?>
基本情報定義構造
各Typechoプラグインは必須の情報定義を含む必要があります:
class PostPublisher_Plugin implements Typecho_Plugin_Interface
{
public static function startUp()
{
// 起動処理
}
public static function shutDown()
{
// 停止処理
}
public static function settingsForm(Typecho_Widget_Helper_Form $form)
{
// 設定画面定義
}
public static function userSettings(Typecho_Widget_Helper_Form $form)
{
// ユーザー設定画面定義
}
}
設定画面構築
設定画面はTypecho_Widget_Helper_Formクラスを使用して構築します:
public static function settingsForm(Typecho_Widget_Helper_Form $form)
{
$customField = new Typecho_Widget_Helper_Form_Element_Text('customField', NULL, '初期値', _t('カスタムフィールド'));
$form->addInput($customField);
}
アクティベーション処理
プラグイン有効化時に実行される処理:
public static function startUp()
{
$database = Typecho_Db::get();
$tablePrefix = $database->getPrefix();
$config = Typecho_Widget::widget('Widget_Options');
$config->plugin('PostPublisher')->customField = '初期値';
$query = "CREATE TABLE IF NOT EXISTS `" . $tablePrefix . "post_publisher` (
`identifier` int(10) unsigned NOT NULL AUTO_INCREMENT,
`field_name` varchar(255) NOT NULL,
PRIMARY KEY (`identifier`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;";
$database->query($query);
}
無効化処理
プラグイン無効化時のクリーンアップ処理:
public static function shutDown()
{
$database = Typecho_Db::get();
$tablePrefix = $database->getPrefix();
$query = "DROP TABLE IF EXISTS `" . $tablePrefix . "post_publisher`;";
$database->query($query);
}
実践例2:ソーシャル共有ボタンカスタマイズ機能
カスタマイズ可能なソーシャル共有ボタン機能を実装するプラグインの開発プロセスを紹介します。
第一段階:プラグインディレクトリ作成
Typechoのプラグインディレクトリ内にSocialButtonsという名前のフォルダを作成します。
第二段階:メインファイル構築
SocialButtonsフォルダ内にMain.phpファイルを作成します:
<?php
class SocialButtons_Plugin implements Typecho_Plugin_Interface
{
public static function startUp()
{
// 有効化時処理
}
public static function shutDown()
{
// 無効化時処理
}
public static function settingsForm(Typecho_Widget_Helper_Form $form)
{
// 設定画面処理
}
public static function saveSettings(Typecho_Widget_Helper_Form $form)
{
// 設定保存処理
}
public static function displayButtons(Typecho_Widget_Helper_Layout $layout)
{
// ボタン表示処理
}
}
第三段階:機能実装
1. 有効化機能実装
データベーステーブルの作成と初期設定:
public static function startUp()
{
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
$sql = 'CREATE TABLE IF NOT EXISTS `' . $prefix . 'social_buttons` (
`entry_id` INT(10) UNSIGNED NOT NULL,
`twitter_enabled` VARCHAR(255) DEFAULT NULL,
`facebook_enabled` VARCHAR(255) DEFAULT NULL,
`weibo_enabled` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`entry_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;';
$db->query($sql);
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->twitter = true;
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->facebook = true;
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->weibo = true;
}
2. 無効化機能実装
リソースのクリーンアップ:
public static function shutDown()
{
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
$db->query('DROP TABLE IF EXISTS `' . $prefix . 'social_buttons`;');
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->delete();
}
3. 設定機能実装
ユーザーインターフェースの構築:
public static function settingsForm(Typecho_Widget_Helper_Form $form)
{
$twitterOption = new Typecho_Widget_Helper_Form_Element_Checkbox('twitter', array('twitter' => 'Twitter共有ボタン表示'), null, 'Twitter共有ボタン表示');
$form->addInput($twitterOption);
$facebookOption = new Typecho_Widget_Helper_Form_Element_Checkbox('facebook', array('facebook' => 'Facebook共有ボタン表示'), null, 'Facebook共有ボタン表示');
$form->addInput($facebookOption);
$weiboOption = new Typecho_Widget_Helper_Form_Element_Checkbox('weibo', array('weibo' => 'Weibo共有ボタン表示'), null, 'Weibo共有ボタン表示');
$form->addInput($weiboOption);
}
public static function saveSettings(Typecho_Widget_Helper_Form $form)
{
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->twitter = $form->twitter->value;
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->facebook = $form->facebook->value;
Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons')->weibo = $form->weibo->value;
}
4. 表示機能実装
投稿編集画面でのカスタムフィールド追加:
public static function displayButtons(Typecho_Widget_Helper_Layout $layout)
{
$config = Typecho_Widget::widget('Widget_Options')->plugin('SocialButtons');
$buttonSelection = new Typecho_Widget_Helper_Form_Element_Checkbox('socialButtons',
array(
'twitter' => 'Twitter',
'facebook' => 'Facebook',
'weibo' => 'Weibo'
),
null,
'共有ボタン選択'
);
$layout->addItem($buttonSelection->multiMode());
}
第四段階:プラグインの有効化
管理画面の「プラグイン」セクションで「SocialButtons」を選択し、「有効化」ボタンをクリックしてプラグインを有効にしてください。