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

2012年10月6日土曜日
  • このエントリーをはてなブックマークに追加

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

プラグインの場所

定数 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');
}
追加したファイルの中身
<?php
    if (preg_match("/^(.)admin.order.edit/", $_SERVER['PHP_SELF'], $match)) {
        echo ('');
    }
    if (preg_match("/^(.)admin.products.product/", $_SERVER['PHP_SELF'], $match)) {
        echo ('');
    }
?>

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

ラベル:


0 件のコメント:

コメントを投稿