Blog

concrete5でパッケージからシングルページをオーバーライドする(〜5.6.x)

Posted by admin at 11:28 日時 2014/05/08

通常、パッケージからシングルページを追加することはできても、コアのシングルページをオーバーライドする手段は用意されていません。該当するシングルページにパッケージIDを与えるという裏ワザで回避しています。ここまでしなくても普通にユーザー領域に置いてオーバーライドすればいいのですが、どうしてもパッケージからオーバーライドしたいと言うときはこれで何とかなります。アンインストールの際にパッケージIDを消しておかないと、コアのシングルページが消えてしまうので注意です。

パッケージの controller.php の install() uninstall() それぞれのメソッドで既存のシングルページに、このパッケージのIDを設定しています。

<?php    defined('C5_EXECUTE') or die("Access Denied.");    class OverrideSinglePagePackage extends Package {    	protected $pkgHandle = 'override_single_page';  	protected $appVersionRequired = '5.6.3';  	protected $pkgVersion = '0.1';    	public function getPackageDescription() {  		return t("Override single page package");  	}    	public function getPackageName() {  		return t("Override Single Page");  	}    	public function install() {  		$db = Loader::db();  		$pkg = parent::install();    		$cID = Page::getByPath('/login')->getCollectionID();  		$db->execute('update Pages set pkgID = ? where cID = ?', array($pkg->pkgID, $cID));  	}    	public function uninstall() {  		$db = Loader::db();    		$cID = Page::getByPath('/login')->getCollectionID();  		$db->execute('update Pages set pkgID = 0 where cID = ?', array($cID));    		parent::uninstall();  	}    }

このパッケージのハンドルは override_single_page ですので、シングルページのコントローラーとビューを下記の位置に置くと、コアのログインの挙動を上書きすることができます。

packages/override_single_page/controllers/login.php
packages/override_single_page/single_oages/login.php

2014/6/1 追記

この方法でオーバーライドしても、/loginにアクセスした場合は問題ないのですが、例えば/page_forbiddenにアクセスした場合のログインフォームには適用されないということが分かりました。なので、あまりうまく行かない。シングルページは普通にユーザー領域に置いた方がいいということかもしれない。


Share this entry