2006年1月4日 星期三

如何預設啟用外掛程式?

2006/04/18 更新:

maomaode 在論壇裡提到了本文所列出的程式碼不夠完善,並提出了他修改後的程式碼跟大家分享。我想,這就是自由軟體的好處吧!大家都有使用軟體的自由,也因此,讓軟體進步的更快快去看看吧!

很多人都在想安裝了一些防圾垃干擾外掛後讓每個 blog 都預設啟用它們。但是大部份的 plugin 都沒有把這個寫進去。今天 maomaode 又在論壇問起,基於因一時記錯,給錯資訊的罪惡感,於是拿 authimage 來試試。

其實做法非常簡單,每個 plugin 都會有一個 Plugin{pluginname} 的類別,裡面有一個 register() 方法。在 api 文件裡面這樣說

This function is called only once when the plugin is registered. Please use this method in case your plugin needs to perform some initializations before it is used, specially if the initialization process requires access to the plugin/blog settings......

所以,想要在使用 plugin 之前若要做一些初始化的工作,就寫在這裡面吧!以 authimage 為例, register() 方法是 pluginauthimage.class.php 裡面 PluginAuthImage 類別的方法,修改成如下就會預設是啟用 plugin 了。

function register()
{
$config =& Config::getConfig();
$this->cacheFolder = $config->getValue('temp_folder');
$this->cacheFolder = $this->cacheFolder.'/authimage/'.$this->blogInfo->getId();
if( !File::exists( $this->cacheFolder )) {
File::createDir( $this->cacheFolder );
}

$blogSettings = $this->blogInfo->getSettings();

// 由 $blogSettings 物件裡取出 plugin_authimage_enabled 的設定值
$this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" );

// 如果取出的設定值不存在,代表還沒有設定過,
// 將設定值設為 true ,
// 並重新取得設定值。

if ( empty($this->pluginEnabled) ) {
$blogSettings->setValue( "plugin_authimage_enabled", true );
$this->pluginEnabled = $blogSettings->getValue( "plugin_authimage_enabled" );
}

$this->length = $blogSettings->getValue( "plugin_authimage_length" );
$this->key = $blogSettings->getValue( "plugin_authimage_key" );
$this->expiredTime = $blogSettings->getValue( "plugin_authimage_expiredtime" );
if ($this->expiredTime == "") $this->expiredTime = 3600;
$this->default = $blogSettings->getValue( "plugin_authimage_default" );
}

藍色與紅色的部份是加上去的,註解應該說明的很清楚了。若要完全瞭解上面的程式碼,那得先學學如何寫 plugin ;若只是要讓外掛預設是啟用的,看懂紅色部份應該就足夠了。

這些修改,我只在 authimage 上驗證過,但理論上應該適用於所有的外掛。最急著修改的,應該是那些防垃圾干擾用途的外掛吧!有修改成功的,記得到論壇回報及分享成果哦!

請參閱 API 文件: blogSettings 類別與其父類別 properities 類別

沒有留言:

張貼留言