ECCUBEのプラグインを作る時のメモ

毎回個別に確認するのでまとめてメモ。 いろいろ突っ込みたいところあったりしますが。

プラグインの場所

定数 PLUGIN_UPLOAD_REALDIR 場所 data/downloads/plugin/PluginName

プラグインから静的ファイルをコピーする場所

定数 PLUGIN_UPLOAD_REALDIR 場所 html/plugin/PluginName/

インストール(アンインストール)時にSQLを発行

PluginName.php

install

    $objQuery = SC_Query_Ex::getSingletonInstance();
$objQuery->begin();
switch(DB_TYPE){
case "pgsql" :
$sql="
";
break;
case "mysql" :
$sql="
";
break;
}
$objQuery->query($sql);
$objQuery->commit();
// 必要なファイルをコピー
if(copy(PLUGIN_UPLOAD_REALDIR . "PluginName/logo.png", PLUGIN_HTML_REALDIR . "PluginName/logo.png") === false);

uninstall

    $objQuery =& SC_Query_Ex::getSingletonInstance();
$sql ='';
$objQuery->query($sql);
$objQuery->commit();
SC_Helper_FileManager_Ex::deleteFile(PLUGIN_HTML_REALDIR . "PluginName/media");

各アクションにフックさせる

register

parent::register($objHelperPlugin, $priority);


//商品詳細画面
$objHelperPlugin->addAction('LC_Page_Products_Detail_action_after', array(
&$this, 'LC_Page_Products_Detail_after'));

フックポイントの詳細は
http://downloads.ec-cube.net/src/manual/12.0_plugin/hook_point.pdf

テンプレートフックが使えるようにする

↑のフックに

$objHelperPlugin->addAction('prefilterTransform', array(&$this, 'prefilterTransform'), 1);
をたす
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {
$objTransform = new SC_Helper_Transform($source);
$template_dir = PLUGIN_UPLOAD_REALDIR ."PluginName/templates/";
switch($objPage->arrPageLayout['device_type_id']) {
// 端末種別:管理画面
case DEVICE_TYPE_ADMIN:
default:
$template_dir .= "admin/";
// 商品編集画面
if(strpos($filename, "products/product.tpl") !== false) {
$objTransform->select("table.form")->insertAfter(
file_get_contents($template_dir . 'PluginName_product_edit.tpl')
);
}
// 商品編集確認画面
if(strpos($filename, "products/confirm.tpl") !== false) {
$objTransform->select("div.btn-area")->insertBefore(
file_get_contents($template_dir . 'PluginName_product_confirm.tpl')
);
}
break;
}
$source = $objTransform->getHTML();
}

管理画面でjavascriptとかヘッダーに手を入れたい

全部共通なので登録した中で振り分けるしか無い?

PluginName.php

function register($objHelperPlugin, $priority) {
// ヘッダへの追加
$template_dir = PLUGIN_UPLOAD_REALDIR . 'PluginName/templates/';
$objHelperPlugin->setHeadNavi($template_dir . 'plg_pluginname_header.tpl');
}
追加したファイルの中身
    if (preg_match("/^(.)admin.order.edit/", $_SERVER['PHP_SELF'], $match)) {
echo ('');
}
if (preg_match("/^(.
)admin.products.product/", $_SERVER['PHP_SELF'], $match)) {
echo ('');
}
?>

とりえあえずここまで。 また思いついたら追記します。