cocnrete5のパッケージからのJobのインストール、アンインストール
concrete5公式日本語サイトにて、パッケージやブロックの作成方法、仕組みなど開発者向けの情報が公開されました。
concrete5にはバックグラウンドでサイトマップやサイト内検索のインデックスを作成する「Job」という機能があります。
バッチ処理に近いものがあり、実行時間の長い処理を実行するのに向いています。
concrete5日本語デモサイトでPing送信パッケージを作っている時に見つけたのですが、Jobのインストーラはユーザ領域のパッケージ領域は読んでくれません。/Jobsと/concrete/Jobsしか読んでくれないため、自動ではインストールしてくれませんでした。
パッケージからjobをインストールする場合は独自にインストールスクリプトを修正する必要があります。
自分への備忘録代わりに書いておきます
- まず、パッケージディレクトリ内にjobsディレクトリを作成し、その中にjobスクリプトファイルをパッケージハンドルと同じ名前で作成します。*1
- 次にパッケージのインストールスクリプトにjobのインストール、アンインストール処理を書きます。
public function install() {
$pkg = parent::install(); //親クラス(パッケージ)のインストール処理を実行
Loader::model('single_page'); //管理ページ用のシングルページを追加
$d = SinglePage::add('/dashboard/ping',$pkg);
if(!empty($d)){
$d->update(array('cName'=>t($this->getPackageName()),'cDescription'=>t($this->getPackageDescription())));
}
copy(dirname(__FILE__)."/jobs/ping.php",DIR_FILES_JOBS."/ping.php"); //パッケージのjobスクリプトをユーザ領域のJobsディレクトリにコピー
Loader::model("job"); //jobモデルをロード
$jobObj = Job::getJobObjByHandle( $this->pkgHandle); //「Ping」というジョブハンドルでjobオブジェクトを作成
$jobObj->jName = $this->getPackageName(); //jobインストールに必要な値を設定
$jobObj->jDescription = $this->getPackageDescription();
$jobObj->pkgID = $pkg->getPackageID();
$jobObj->install(); //jobインストール
}public function uninstall(){
parent::uninstall(); //親クラス(パッケージ)のアンインストール処理を実行
Loader::model("job"); //jobモデルをロード
$jobObj = Job::getByHandle( $this->pkgHandle );
if( $jobObj && !$jobObj->jNotUninstallable ){
$jobObj->uninstall(); //jobアンインストール
unlink(DIR_FILES_JOBS."/ping.php"); //ユーザ領域のjobsディレクトリにあるパッケージのjobスクリプトを削除
}
}
次のバージョンでここらへんも改修されるかもしれませんが、5.3.2jaではこんな感じでインストールする必要がある様です。