バージョン選択
フォーラム
メニュー
オンライン状況
|
|
109 人のユーザが現在オンラインです。 (106 人のユーザが フォーラム を参照しています。) |
|
|
機能要望 > 管理機能 > プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 |
|
管理機能
投稿者 |
スレッド |
sumida |
投稿日時: 2013/7/4 16:59
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: リロードでアンインストールが実行できていない。 結局、reload 関数を、以下のようにしました。
function reload($plugin, $key) {
// クラスファイルを読み込み.
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインが有効な場合に無効化処理を実行
$plugin_enable = false;
if ($plugin['enable'] == PLUGIN_ENABLE_TRUE){
$plugin_enable = true;
// 無効化処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'disable');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインを無効にします.
$this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_FALSE);
}
// アンインストール処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'uninstall');
SC_Plugin_Util_Ex::deletePluginByPluginId($plugin['plugin_id']);
// plugin_infoを読み込み.
$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/' . 'plugin_info.php', $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// リフレクションオブジェクトを生成.
$objReflection = new ReflectionClass('plugin_info');
$arrPluginInfo = $this->getPluginInfo($objReflection);
// プラグイン情報をDB登録
if ($this->registerData($arrPluginInfo) === false) {
$arrErr[$key] = '※ DB登録に失敗しました。<br/>';
return $arrErr;
}
// プラグイン情報を取得
$plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);
// クラスファイルを読み込み.
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインが有効だったか
if ($plugin_enable === true) {
// 有効化処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'enable');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインを有効にします.
$this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_TRUE);
}
return $arrErr;
}
|
|
|
sumida |
投稿日時: 2013/7/4 14:43
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
リロードでアンインストールが実行できていない。 リロードの場合のアンインストールがどうも〜? プラグインの「uninstall」を呼び出そうとすると、このクラスにuninstallメソッドがないとなります。 で、よ〜くみたら、 data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php
function reload($plugin, $key) {
$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/plugin_info.php', $key);
は、
function reload($plugin, $key) {
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
ではないだろうか。
|
|
|
sumida |
投稿日時: 2013/6/14 15:00
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: 違うパターンもやってもました。(前回分と共存できます。) すみません。インストール済みの判定フラグにミスがありました。 日を改めて、見直したら、変数名と中身の判定が逆でした。 plugin.tpl
<tr <!--{if $dirList.installed == true}--> style="background:#C9C9C9;" <!--{/if}-->>
<td class="center plugin_img">
</td>
<td class="plugin_info">
<span class="plugin_name">
<sapn><!--{$dirList.dir_name|h}--></sapn>
</span>
</td>
<td class="center">
<!--{if $dirList.installed == true}-->
インストール済み
<!--{else}-->
<a class="btn-action" href="java script:;" onclick="installL('<!--{$dirList.dir_name}-->'); return false;"><span class="btn-next">インストール</span></a>
<!--{/if}-->
</td>
</tr>
LC_Page_Admin_OwnersStore.php
// インストール済みのプラグインかを判定.
$foundDirName = false;
for ($j=0; $j<count($plugins); $j++) {
if ($plugins[$j]['plugin_code'] === $dirName) {
$foundDirName = true;
break;
}
}
if ($foundDirName) {
if ($dirALL === true) {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = true;
$arrCount++;
}
} else {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = false;
$arrCount++;
}
追記 LC_Page_Admin_OwnersStore.phpは、こっちのほうがスマートですね
// インストール済みのプラグインかを判定.
if ($this->isInstalledPlugin($dirName)) {
if ($dirALL === true) {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = true;
$arrCount++;
}
} else {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = false;
$arrCount++;
}
追記 $this->tpl_onloadに$this->arrErrを設定すると、エラーの文字列後部に「<br/>」がくっついてくるので、除去する必要があります。 が、以下の修正で対策できます。 LC_Page_Admin_OwnersStore.php 今回、修正分から下記の部分を削除する。
if ($this->isError($this->arrErr) === true) {
$this->tpl_onload = "alert('" . $this->arrErr[$plugin_dir_name] . "');";
}
plugin.tpl 今回、修正分に、エラーメッセージ用の<span>タグを追加する
<span class="plugin_name">
<span class="attention"><!--{$arrErr[$dirList.dir_name]}--></span>
<sapn><!--{$dirList.dir_name|h}--></sapn>
</span>
たびたび変更ですみません。
|
|
|
eccube_admin |
投稿日時: 2013/6/14 13:04
対応状況: −−−
|
管理人 登録日: 2006/9/6 居住地: 投稿: 159 |
Re: 違うパターンもやってもました。(前回分と共存できます。) ※運営チーム編集※ 元の投稿 http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=12779&forum=7&post_id=58907カット分を再掲載させていただいております。 $arrErr['plugin_file']の記述を$arrErr[$key]に変更 data/Smarty/templates/admin/ownerstore/plugin.tpl
/**
* インストール
*/
function install() {
if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
fnModeSubmit('install','','');
}
}
// added
function installL(dir_name) {
if (window.confirm('プラグインをインストールしても宜しいでしょうか?')){
fnModeSubmit('installL', 'dir_name', dir_name);
}
}
// added
<input type="hidden" name="mode" value="" />
<input type="hidden" name="plugin_id" value="" />
<input type="hidden" name="plugin_code" value="" />
<input type="hidden" name="priority" value="" />
<!--{* added *}-->
<input type="hidden" name="dir_name" value="" />
<!--{* added *}-->
<h2>プラグイン登録</h2>
<table class="form">
<tr>
<th>プラグイン<span class="attention"> *</span></th>
<td>
<!--{assign var=key value="plugin_file"}-->
<span class="attention"><!--{$arrErr[$key]}--></span>
<input type="file" name="<!--{ $key }-->" class="box45" size="43" style="<!--{$arrErr[$key]|sfGetErrorColor}--> <!--{if $arrErr[$key]}--> background-color:<!--{$smarty.const.ERR_COLOR|h}--><!--{/if}-->">
<a class="btn-action" href="java script:;" onclick="install(); return false;"><span class="btn-next">インストール</span></a>
</td>
</tr>
</table>
<!--{* added *}-->
<!--▼ディレクトリ一覧ここから-->
<h2>インストールしていないプラグイン一覧</h2>
<!--{if count($dirLists) > 0}-->
<span class="attention"><!--{$arrErr.dir_plugin_error}--></span>
<table class="system-plugin">
<col width="10%" />
<col width="77" />
<col width="13%" />
<tr>
<th colspan="3">プラグイン(ディレクトリ)名</th>
</tr>
<!--{section name=i start=0 loop=$dirLists|@count}-->
<!--{assign var=dirList value=$dirLists[i]}-->
<tr <!--{if $dirList.installed == false}--> style="background:#C9C9C9;" <!--{/if}-->>
<td class="center plugin_img">
</td>
<td class="plugin_info">
<span class="plugin_name">
<sapn><!--{$dirList.dir_name|h}--></sapn>
</span>
</td>
<td class="center">
<!--{if $dirList.installed == true}-->
<a class="btn-action" href="java script:;" onclick="installL('<!--{$dirList.dir_name}-->'); return false;"><span class="btn-next">インストール</span></a>
<!--{else}-->
インストール済み
<!--{/if}-->
</td>
</tr>
<!--{/section}-->
</table>
<!--{else}-->
<span>インストールしていないプラグインはありません。</span>
<!--{/if}-->
<!--{* added *}-->
|
|
|
sumida |
投稿日時: 2013/6/13 15:19
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
違うパターンもやってもました。(前回分と共存できます。) 前回の仕様を変更したものです。 共存しても動作します。 お好きなほうでどうぞ。 (1) 前回 プラグインのディレクトリ名を時下入力 (2) 今回 data/downloads/plugin下のディレクトリ一覧で指示 data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php
switch ($mode) {
// インストール
case 'install':
$file_key = 'plugin_file';
$this->arrErr = $this->checkUploadFile($file_key);
if ($this->isError($this->arrErr) === false) {
$archive_file_name = $_FILES[$file_key]['name'];
// インストール処理.
$this->arrErr = $this->installPlugin($archive_file_name, 'plugin_file');
if ($this->isError($this->arrErr) === false) {
// コンパイルファイルのクリア処理
SC_Utils_Ex::clearCompliedTemplate();
$this->tpl_onload = "alert('プラグインをインストールしました。');";
}
}
break;
// added
// インストール
case 'installL':
// インストール処理.
$plugin_dir_name = $objFormParam->getValue('dir_name');
$this->arrErr = $this->installPluginL($plugin_dir_name, $plugin_dir_name);
if ($this->isError($this->arrErr) === false) {
// コンパイルファイルのクリア処理
SC_Utils_Ex::clearCompliedTemplate();
$this->tpl_onload = "alert('プラグインをインストールしました。');";
}
if ($this->isError($this->arrErr) === true) {
$this->tpl_onload = "alert('" . $this->arrErr[$plugin_dir_name] . "');";
}
break;
// added
// DBからプラグイン情報を取得
$plugins = SC_Plugin_Util_Ex::getAllPlugin();
foreach ($plugins as $key => $plugin) {
// ロゴファイルへのパスを生成(ロゴが無い場合はNO_IMAGEを表示)
if (file_exists(PLUGIN_HTML_REALDIR . $plugins[$key]['plugin_code'] . '/logo.png') === true){
$plugins[$key]['logo'] = ROOT_URLPATH . 'plugin/' . $plugins[$key]['plugin_code'] . '/logo.png';
} else {
$plugins[$key]['logo'] = IMAGE_SAVE_URLPATH . 'noimage_plugin_list.png';
}
// 設定ファイルがあるかを判定.
$plugins[$key]['config_flg'] = $this->isContainsFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'], 'config.php');
if ($plugins[$key]['enable'] === PLUGIN_ENABLE_TRUE) {
// 競合するプラグインがあるかを判定.
$plugins[$key]['conflict_message']= $this->checkConflictPlugin($plugin['plugin_id']);
}
}
$this->plugins = $plugins;
// added
// インストールしていないプラグイン一覧
$arrList = SC_Helper_FileManager_Ex::sfGetFileList(rtrim(PLUGIN_UPLOAD_REALDIR, '/'));
// true : プラグインディレクトリ一覧
// false : インストールしていないプラグインディレクトリ一覧
$dirALL = true;
$arrDirLists = array();
$arrCount = 0;
for ($i=0; $i<count($arrList); $i++) {
// ディレクトリであるかを判定.
if ($arrList[$i]['is_dir'] === true) {
$dirName = $arrList[$i]['file_name'];
// インストール済みのプラグインかを判定.
$foundDirName = FALSE;
for ($j=0; $j<count($plugins); $j++) {
if ($plugins[$j]['plugin_code'] === $dirName) {
$foundDirName = TRUE;
break;
}
}
if ($foundDirName) {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = false;
$arrCount++;
} else {
if ($dirALL === true) {
$arrDirLists[$arrCount]['dir_name'] = $dirName;
$arrDirLists[$arrCount]['installed'] = true;
$arrCount++;
}
}
}
}
$this->dirLists = $arrDirLists;
// added
}
function initParam(&$objFormParam, $mode) {
$objFormParam->addParam('mode', 'mode', INT_LEN, '', array('ALPHA_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('plugin_id', 'plugin_id', INT_LEN, '', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
if ($mode === 'priority') {
$objFormParam->addParam('優先度', 'priority', INT_LEN, '', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
}
// added
if ($mode === 'installL') {
$objFormParam->addParam('ディレクトリ名', 'dir_name');
}
// added
}
// リフレクションオブジェクトを生成.
$objReflection = new ReflectionClass('plugin_info');
$arrPluginInfo = $this->getPluginInfo($objReflection);
// プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
// changed
// $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
// changed
$arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key);
// changed
if ($this->isError($arrErr) === true) {
$this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR);
return $arrErr;
}
// added
function installPluginL($directory_name, $key) {
$arrErr = array();
// 必須拡張モジュールのチェック
$arrErr = SC_Plugin_Util_Ex::checkExtension($key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// plugin_infoを読み込み.
$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $directory_name . '/' . 'plugin_info.php', $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// リフレクションオブジェクトを生成.
$objReflection = new ReflectionClass('plugin_info');
$arrPluginInfo = $this->getPluginInfo($objReflection);
// プラグインクラスに必須となるパラメータが正常に定義されているかチェックします.
$arrErr = $this->checkPluginConstants($objReflection, PLUGIN_UPLOAD_REALDIR . $directory_name . '/', $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// 既にインストールされていないかを判定.
if ($this->isInstalledPlugin($arrPluginInfo['PLUGIN_CODE']) === true) {
$arrErr[$key] = '※ ' . $arrPluginInfo['PLUGIN_NAME'] . 'は既にインストールされています。<br/>';
return $arrErr;
}
// プラグイン情報をDB登録
if ($this->registerData($arrPluginInfo) === false) {
$arrErr[$key] = '※ DB登録に失敗しました。<br/>';
return $arrErr;
}
// プラグイン情報を取得
$plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);
// クラスファイルを読み込み.
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
if ($this->isError($arrErr) === true) {
$this->rollbackL($plugin['plugin_id']);
return $arrErr;
}
// プラグインhtmlディレクトリ作成
$plugin_html_dir_path = $this->getHtmlPluginDir($plugin['plugin_code']);
$this->makeDir($plugin_html_dir_path);
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
if ($this->isError($arrErr) === true) {
$this->rollbackL($plugin['plugin_id'], $plugin_html_dir_path);
return $arrErr;
}
}
function rollbackL($plugin_id = '', $plugin_html_dir_path ='') {
// DBからプラグイン情報を削除
if (empty($plugin_id) === false) {
SC_Plugin_Util_Ex::deletePluginByPluginId($plugin_id);
}
// htmlディレクトリを削除
if (empty($plugin_html_dir_path) === false) {
SC_Helper_FileManager_Ex::deleteFile($plugin_html_dir_path, true);
}
}
// added
function checkPluginConstantsは、引数を追加
function checkPluginConstants(ReflectionClass $objReflection, $dir_path, $key) {
※運営チーム編集※ XOOPSのシステムエラーが発生していたためこの下の投稿はいったんカットさせていただいております。
|
|
|
sumida |
投稿日時: 2013/6/12 18:41
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 参考にやってみました。 data/class/pages/admin/ownersstore/LC_Page_Admin_OwnersStore.php
// added
// リロード
case 'reload':
// エラーチェック
$this->arrErr = $objFormParam->checkError();
if ($this->isError($this->arrErr) === false) {
$plugin_id = $objFormParam->getValue('plugin_id');
$plugin = SC_Plugin_Util_Ex::getPluginByPluginId($plugin_id);
$this->arrErr = $this->reload($plugin, $plugin['plugin_name']);
if ($this->isError($this->arrErr) === false) {
// コンパイルファイルのクリア処理
SC_Utils_Ex::clearCompliedTemplate();
$this->tpl_onload = "alert('" . $plugin['plugin_name'] ."をリロードしました。');";
}
}
if ($this->isError($this->arrErr) === true) {
$this->tpl_onload = "alert('" . $this->arrErr[$plugin['plugin_name']] . "');";
}
break;
// added
default:
break;
}
以下の関数reloadには、不具合があります。 修正版を、以降の投稿に掲載しています。(次ページあたりにあります。)
// added
/**
* pluginをキーにリロードします.
*
* @param array $plugin プラグイン情報
* @param string $key キー.
* @return array エラー情報を格納した連想配列.
*/
function reload($plugin, $key) {
$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/plugin_info.php', $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインが有効な場合に無効化処理を実行
$plugin_enable = false;
if ($plugin['enable'] == PLUGIN_ENABLE_TRUE){
$plugin_enable = true;
// 無効化処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'disable');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインを無効にします.
$this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_FALSE);
}
// アンインストール処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'uninstall');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
SC_Plugin_Util_Ex::deletePluginByPluginId($plugin['plugin_id']);
// リフレクションオブジェクトを生成.
$objReflection = new ReflectionClass('plugin_info');
$arrPluginInfo = $this->getPluginInfo($objReflection);
// プラグイン情報をDB登録
if ($this->registerData($arrPluginInfo) === false) {
$arrErr[$key] = '※ DB登録に失敗しました。<br/>';
return $arrErr;
}
// プラグイン情報を取得
$plugin = SC_Plugin_Util_Ex::getPluginByPluginCode($arrPluginInfo['PLUGIN_CODE']);
// クラスファイルを読み込み.
$plugin_class_file_path = $this->getPluginFilePath($plugin['plugin_code'], $plugin['class_name']);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
if ($this->isError($arrErr) === true) {
return $arrErr;
}
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'install');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインが有効だったか
if ($plugin_enable === true) {
// 有効化処理を実行します.
$arrErr = $this->execPlugin($plugin, $plugin['class_name'], 'enable');
if ($this->isError($arrErr) === true) {
return $arrErr;
}
// プラグインを有効にします.
$this->updatePluginEnable($plugin['plugin_id'], PLUGIN_ENABLE_TRUE);
}
return $arrErr;
}
// added
data/Smarty/templates/admin/ownerstore/plugin.tpl
// added
/**
* リロード
*/
function reload(plugin_id, plugin_code) {
if (window.confirm('プラグインをリロードしても宜しいでしょうか?')){
fnSetFormValue('plugin_id', plugin_id);
fnModeSubmit('reload','plugin_code', plugin_code);
}
}
// added
//]]></script>
<!-- アップデート -->
<a class="update_link" href="java script:;" name="<!--{$plugin.plugin_id}-->">アップデート</a> |
<!--{* added *}-->
<!-- リロード -->
<a href="java script:;" name="reload" onclick="reload(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">リロード</a> |
<!--{* added *}-->
<!-- 削除 -->
<a href="java script:;" name="uninstall" onclick="uninstall(<!--{$plugin.plugin_id}-->, '<!--{$plugin.plugin_code}-->'); return false;">削除</a> |
追記 6/14 以下について修正 ・リロード後、プラグイン自身の有効化を行っていなかった。 ・無効のプラグインをリロードすると、無条件に有効にしていた。
|
|
|
sumida |
投稿日時: 2013/6/12 17:58
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 リロードがシステムエラーになります。 function reload($plugin) { に、$keyが定義されていません。
$arrErr = $this->requirePluginFile(PLUGIN_UPLOAD_REALDIR . $plugin['plugin_code'] . '/plugin_info.php', $key);
$arrErr = $this->requirePluginFile($plugin_class_file_path, $key);
$keyは、エラーメッセージの対象を指定するので、今回の場合、どこにしたらいいのだろう?
|
|
|
sumida |
投稿日時: 2013/6/12 10:19
対応状況: −−−
|
仙人 登録日: 2013/2/10 居住地: 広島県呉市ときどき瀬戸内海 投稿: 641 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 プラグイン用ディレクトリのチェックを
$this->arrErr = $objFormParam->checkError();
でさせようとしたところ、 $modeにいれた「install2」が、実は、エラー(半角英字でない)になってしまっていたので、 ソースを更新しました。
|
|
|
nanasess |
投稿日時: 2013/6/11 16:01
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2324 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 プラグインの開発用に「リロード」も作ってみました。 https://gist.github.com/nanasess/5747139プラグインの開発中に、プラグイン本体のファイルを削除せずに uninstall/install ができます。 # プラグイン関連の関数群は使いにくいものが多いので、リファクタリングしたいですね。。。
|
|
|
tao_s |
投稿日時: 2013/6/11 15:25
対応状況: −−−
|
仙人 登録日: 2008/8/20 居住地: 東京 投稿: 804 |
Re: プラグイン管理で、「アップロード」と「インストール」が分離されているとありがたいです。 ありがとうございます。 素晴らしいです。 これコアに必要ですね。チケット切っておきます。 ---------------- EC-CUBEカスタマイズ相談してください。 緊急のEC-CUBEの障害対応 EC-CUBEカスタマイズブログ
|
|
|
|
統計情報
総メンバー数は94,726名です
総投稿数は111,341件です
|