バージョン選択
フォーラム
メニュー
オンライン状況
|
|
38 人のユーザが現在オンラインです。 (27 人のユーザが フォーラム を参照しています。) |
|
|
フロント機能
投稿者 |
スレッド |
mizuvan |
投稿日時: 2014/11/27 11:50
対応状況: −−−
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
CSV出力する項目の保存はできないでしょうか? CSVで出力するときに商品の内容や編集するときの利便性を考えてCSV出力する内容を都度変更したいのですが、毎回いちいち手作業で入れ替えをしないといけないのが手間です。
そこで、一度使った項目の設定を保存するようにしておけないものかと思いました。
コンテンツ管理>CSV出力設定>商品管理
CSV出力する項目 ←ここで何パターンかの保存をしておきたいのです。
どなたかおわかりになるかた教えていただけないでしょうか
|
|
|
tsuji |
投稿日時: 2014/11/28 9:35
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: CSV出力する項目の保存はできないでしょうか? mizuvan 様 カスタマイズなしではできないと思います。 仕組みをいうならばCSVの出力項目はdtb_csvで管理していて 出力順はrank、出力する項目かどうかはstatusで設定されています。 それで、一つの案ですが、dtb_csvのno,csv_id,rank,statusを どこかに保持するようにするなら、パターンを保存することが できると思います。 ---------------- **************************************** 株式会社システムフレンド 辻 拓也(takuya tsuji) 改造専門店・EC-CUBE工房 ****************************************
|
|
|
mizuvan |
投稿日時: 2014/11/28 11:13
対応状況: 保留
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
Re: CSV出力する項目の保存はできないでしょうか? ありがとうございます!
dtb_csvの中身を見ていてno,csv_id,rank,statusを保存できればとはその後思っていたところでした。
ただ、保存する流れがよく理解できないのですが
画面で配置してno,csv_id,rank,statusへ入力された数値を
別に作ったカラムに複製できればよいのですよね
3通り保存したければそれぞれに3カラム×5(no,csv_id,rank,status,更新日)の追加をして
とりあえず少しでも簡単?にするには過去3回分を上書きで保存されていく
そう考えていくと、php上でMySQL上のデータをコピー出来れば
良いということになるのでしょうか、
update dtb_csv set rank2=rank ←更新日をチェックして
これを更新日が空または古い順に上書きしていく
data/Smarty/templates/admin/contents/csv.tpl上にも
保存した内容を選択できるようにする
ざっとこんなイメージなのでしょうか・・・
自力でやるにはちょっと難しそうなので今はあきらめます
|
|
|
tsuji |
投稿日時: 2014/11/28 13:14
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: CSV出力する項目の保存はできないでしょうか? mizuvan 様 DBに保存用のテーブルを追加するという方法もありますね。 ユニークとなるキーと削除フラグ、登録、更新日、保存名 を追加することになると思いますが、下記のような感じでしょうか。 save_csv_id,save_name,no,csv_id,rank,status,del_flg,create_date,update_date 画面上には保存するボタンと保存された一覧と読み込みボタンを 追加する形になると思います。一覧にはそれぞれに削除ボタンが 必要ですね。 上記のテーブルをつかって保存、読込等の処理を行うことになる と思います。 ---------------- **************************************** 株式会社システムフレンド 辻 拓也(takuya tsuji) 改造専門店・EC-CUBE工房 ****************************************
|
|
|
mizuvan |
投稿日時: 2014/11/28 15:34
対応状況: −−−
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
Re: CSV出力する項目の保存はできないでしょうか? ありがとうございます!
アドバイスありがとうございました。
自己レベルで1〜2時間で可能なものであればチャレンジしようとは思いますが、それが不可能な場合は専門の方へお金を払ってお願いするつもりです。
とりあえずは何とかなることなので保留としておきます・・・
|
|
|
mizuvan |
投稿日時: 2014/11/30 17:51
対応状況: −−−
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
Re: CSV出力する項目の保存はできないでしょうか? /data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php チャレンジしてみました。ただ、PHPの知識がない状態ですのでめちゃくちゃかもしれませんが ご覧いただいてアドバイスいただけないでしょうか * カラム列情報と表示名情報を取得
public function lfGetOptions($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id);
if (!isset($arrData['no'])) {
$arrData['no'] = array();
$arrData['disp_name'] = array();
$arrData['rank_save1'] = array(); //追加
}
$arrData = SC_Utils_Ex::sfArrCombine($arrData['no'], $arrData['disp_name'], $arrData['rank_save1']); //追加
return $arrData;
}
*CSV出力項目設定を初期化する
/**
* CSV出力項目設定をSAVE1にする
*
* @param integer $csv_id CSV_ID
* @return boolean 成功:true
*/
public function lfSetDefaultCsvOutput($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id, '', 'rank_save1');
if (!isset($arrData['rank_save1'])) {
$arrData['rank_save1'] = array();
}
return $this->lfUpdCsvOutput($csv_id, $arrData['rank_save1']);
}
着色したところが追記した場所です。 とりあえずphpMyAdmin上でコマンド UPDATE `dtb_csv` set `rank_save1`=`rank` とし値をコピーしたのは良いのですが その後初期値に戻し UPDATE `dtb_csv` set `rank`=`rank_save1` として再度値を戻しても管理画面上の表示で反映されませんでした。 そういったことでちょっと弄ったらそれぐらいできないかと思って試したのですが・・・ ちなみにこの内容ではシステムエラーで何も表示されませんでした。 引用: Fatal error(E_COMPILE_ERROR): Cannot redeclare LC_Page_Admin_Contents_CSV::lfSetDefaultCsvOutput() on [/****/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php(226)] from IPアドレス login_id = ***(0)[*****]
226行目は public function lfSetDefaultCsvOutput($csv_id) というところでした。
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
*
* http://www.lockon.co.jp/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';
/**
* CSV項目設定 のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_Contents_CSV.php 23124 2013-08-24 14:33:52Z kimoto $
*/
class LC_Page_Admin_Contents_CSV extends LC_Page_Admin_Ex
{
/**
* Page を初期化する.
*
* @return void
*/
public function init()
{
parent::init();
$this->tpl_mainpage = 'contents/csv.tpl';
$this->tpl_subno = 'csv';
$this->tpl_mainno = 'contents';
$this->tpl_maintitle = 'コンテンツ管理';
$this->tpl_subtitle = 'CSV出力設定';
$objCSV = new SC_Helper_CSV_Ex();
$this->arrSubnavi = $objCSV->arrSubnavi; // 別名
$this->tpl_subno_csv = $objCSV->arrSubnavi[1]; //デフォルト
$this->arrSubnaviName = $objCSV->arrSubnaviName; // 表示名
}
/**
* Page のプロセス.
*
* @return void
*/
public function process()
{
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
public function action()
{
// パラメーター管理クラス
$objFormParam = new SC_FormParam_Ex();
// パラメーター設定
$this->lfInitParam($objFormParam);
$objFormParam->setParam($_POST);
$objFormParam->setParam($_GET);
$objFormParam->convParam();
// CSV_IDの読み込み
$this->tpl_subno_csv = $objFormParam->getValue('tpl_subno_csv');
$this->tpl_csv_id = $this->lfGetCsvId($this->tpl_subno_csv);
switch ($this->getMode()) {
case 'confirm':
// 入力パラメーターチェック
$this->arrErr = $objFormParam->checkError();
if (SC_Utils_Ex::isBlank($this->arrErr)) {
// 更新
$this->tpl_is_update = $this->lfUpdCsvOutput($this->tpl_csv_id, $objFormParam->getValue('output_list'));
}
break;
case 'defaultset':
//初期値に戻す
$this->tpl_is_update = $this->lfSetDefaultCsvOutput($this->tpl_csv_id);
break;
default:
break;
}
$this->arrSelected = $this->lfGetSelected($this->tpl_csv_id);
$this->arrOptions = $this->lfGetOptions($this->tpl_csv_id);
$this->tpl_subtitle .= '>' . $this->arrSubnaviName[ $this->tpl_csv_id ];
if ($this->tpl_is_update) {
$this->tpl_onload = "window.alert('正常に更新されました。');";
}
}
/**
* パラメーター情報の初期化
*
* @param array $objFormParam フォームパラメータークラス
* @return void
*/
public function lfInitParam(&$objFormParam)
{
$objFormParam->addParam('編集種別', 'tpl_subno_csv', STEXT_LEN, 'a', array('ALNUM_CHECK', 'MAX_LENGTH_CHECK'), 'product');
$objFormParam->addParam('出力設定リスト', 'output_list', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK', 'EXIST_CHECK'));
//デフォルト値で上書き
$objFormParam->setParam(array('tpl_subno_csv' => 'product'));
}
/**
* CSVカラム設定の読み込み
*
* @param integer $csv_id CSV ID
* @param integer $csv_status_flg 読み込む対象のフラグ CSV_COLUMN_STATUS_FLG_ENABLE or ''
* @return array SwapArrayしたカラム設定
*/
public function lfGetCSVColumn($csv_id, $csv_status_flg = '', $order ='rank, no')
{
$objCSV = new SC_Helper_CSV_Ex();
if (SC_Utils_Ex::sfIsInt($csv_id)) {
if ($csv_status_flg !='') {
$arrData = $objCSV->sfGetCsvOutput($csv_id, 'status = ?' , array($csv_status_flg), $order);
} else {
$arrData = $objCSV->sfGetCsvOutput($csv_id, '', array(), $order);
}
$arrData = SC_Utils_Ex::sfSwapArray($arrData);
} else {
$arrData = array();
}
return $arrData;
}
/**
* 選択済みカラム列情報を取得
*
* @param integer $csv_id CSV ID
* @return array 選択済みカラム列情報
*/
public function lfGetSelected($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id, CSV_COLUMN_STATUS_FLG_ENABLE);
if (!isset($arrData['no'])) {
$arrData['no'] = array();
}
return $arrData['no'];
}
/**
* カラム列情報と表示名情報を取得
*
* @param integer $csv_id CSV ID
* @return array 選択済みカラム列情報
*/
public function lfGetOptions($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id);
if (!isset($arrData['no'])) {
$arrData['no'] = array();
$arrData['disp_name'] = array();
}
$arrData = SC_Utils_Ex::sfArrCombine($arrData['no'], $arrData['disp_name']);
return $arrData;
}
/**
* CSV名からCSV_IDを取得する。
*
* @param string $subno_csv CSV名
* @return integer CSV_ID
*/
public function lfGetCsvId($subno_csv)
{
$objCSV = new SC_Helper_CSV_Ex();
$arrKey = array_keys($objCSV->arrSubnavi,$subno_csv);
$csv_id = $arrKey[0];
if (!SC_Utils_Ex::sfIsInt($csv_id)) {
//初期値取りだし
$arrKey = array_keys($objCSV->arrSubnavi);
$csv_id = $arrKey[0];
}
return $csv_id;
}
/**
* CSV出力項目設定を初期化する
*
* @param integer $csv_id CSV_ID
* @return boolean 成功:true
*/
public function lfSetDefaultCsvOutput($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id, '', 'no');
if (!isset($arrData['no'])) {
$arrData['no'] = array();
}
return $this->lfUpdCsvOutput($csv_id, $arrData['no']);
}
/**
* CSV出力項目設定を更新する処理
*
* @param integer $csv_id CSV_ID
* @param array $arrData 有効にするCSV列データ配列
* @return boolean 成功:true
*/
public function lfUpdCsvOutput($csv_id, $arrData = array())
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
// ひとまず、全部使用しないで更新する
$table = 'dtb_csv';
$where = 'csv_id = ?';
$arrWhereVal = array($csv_id);
$arrUpdVal = array('status' => '2', 'rank' => NULL, 'update_date' => 'CURRENT_TIMESTAMP');
$objQuery->begin();
$objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
// 使用するものだけ、再更新する。
if (is_array($arrData)) {
$where .= ' AND no = ?';
$arrUpdVal = array('status' => '1');
foreach ($arrData as $key => $val) {
$arrWhereVal = array($csv_id, $val);
$arrUpdVal['rank'] = $key + 1;
$objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
}
}
$objQuery->commit();
return true;
}
}
|
|
|
tsuji |
投稿日時: 2014/12/4 9:16
対応状況: −−−
|
仙人 登録日: 2013/11/19 居住地: 投稿: 958 |
Re: CSV出力する項目の保存はできないでしょうか? mizuvan 様 > とりあえずphpMyAdmin上でコマンド UPDATE `dtb_csv` set `rank_save1`=`rank` とし値をコピーしたのは良いのですが > その後初期値に戻し UPDATE `dtb_csv` set `rank`=`rank_save1` として再度値を戻しても管理画面上の表示で反映されませんでした。 なるほど、ローカル環境でrankデータを直接書き換えてみましたが、うまく反映されたので、 値が書き換わっているか確かめてみてください。画面のキャッシュが残っているということも あり得るかもしれません。 > Fatal error(E_COMPILE_ERROR): Cannot redeclare LC_Page_Admin_Contents_CSV::lfSetDefaultCsvOutput() on [/****/data/class/pages/admin/contents/LC_Page_Admin_Contents_CSV.php(226)] from IPアドレス login_id = ***(0)[*****] 上記のエラーにredeclareと書いてあるのでおそらくlfSetDefaultCsvOutputを2つ定義しておられるの ではないかと思います。必要でない方をコメントアウトするなどして読み込ませないようにする 必要があります。 ---------------- **************************************** 株式会社システムフレンド 辻 拓也(takuya tsuji) 改造専門店・EC-CUBE工房 ****************************************
|
|
|
mizuvan |
投稿日時: 2014/12/4 15:20
対応状況: −−−
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
Re: CSV出力する項目の保存はできないでしょうか? ありがとうございます! キャッシュについては、phpMyAdmin上でSQLのキャッシュを削除すればよかったのでしょうか。 RESET QUERY CACHE; で削除しようといましたが現在使っているレンタルサーバーでrootでログインする方法がわからず現在問い合わせ中です。 data/Smarty/templates_c/内は削除しましたが何も影響しませんでした。 lfSetDefaultCsvOutput についてですがよくわかりませんでした。 現在のソースはデフォルト状態ですが下記の通りです。 lfUpdCsvOutput<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) 2000-2013 LOCKON CO.,LTD. All Rights Reserved.
*
* http://www.lockon.co.jp/
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
require_once CLASS_EX_REALDIR . 'page_extends/admin/LC_Page_Admin_Ex.php';
/**
* CSV項目設定 のページクラス.
*
* @package Page
* @author LOCKON CO.,LTD.
* @version $Id: LC_Page_Admin_Contents_CSV.php 23124 2013-08-24 14:33:52Z kimoto $
*/
class LC_Page_Admin_Contents_CSV extends LC_Page_Admin_Ex
{
/**
* Page を初期化する.
*
* @return void
*/
public function init()
{
parent::init();
$this->tpl_mainpage = 'contents/csv.tpl';
$this->tpl_subno = 'csv';
$this->tpl_mainno = 'contents';
$this->tpl_maintitle = 'コンテンツ管理';
$this->tpl_subtitle = 'CSV出力設定';
$objCSV = new SC_Helper_CSV_Ex();
$this->arrSubnavi = $objCSV->arrSubnavi; // 別名
$this->tpl_subno_csv = $objCSV->arrSubnavi[1]; //デフォルト
$this->arrSubnaviName = $objCSV->arrSubnaviName; // 表示名
}
/**
* Page のプロセス.
*
* @return void
*/
public function process()
{
$this->action();
$this->sendResponse();
}
/**
* Page のアクション.
*
* @return void
*/
public function action()
{
// パラメーター管理クラス
$objFormParam = new SC_FormParam_Ex();
// パラメーター設定
$this->lfInitParam($objFormParam);
$objFormParam->setParam($_POST);
$objFormParam->setParam($_GET);
$objFormParam->convParam();
// CSV_IDの読み込み
$this->tpl_subno_csv = $objFormParam->getValue('tpl_subno_csv');
$this->tpl_csv_id = $this->lfGetCsvId($this->tpl_subno_csv);
switch ($this->getMode()) {
case 'confirm':
// 入力パラメーターチェック
$this->arrErr = $objFormParam->checkError();
if (SC_Utils_Ex::isBlank($this->arrErr)) {
// 更新
$this->tpl_is_update = $this->lfUpdCsvOutput($this->tpl_csv_id, $objFormParam->getValue('output_list'));
}
break;
case 'defaultset':
//初期値に戻す
$this->tpl_is_update = $this->lfSetDefaultCsvOutput($this->tpl_csv_id);
break;
default:
break;
}
$this->arrSelected = $this->lfGetSelected($this->tpl_csv_id);
$this->arrOptions = $this->lfGetOptions($this->tpl_csv_id);
$this->tpl_subtitle .= '>' . $this->arrSubnaviName[ $this->tpl_csv_id ];
if ($this->tpl_is_update) {
$this->tpl_onload = "window.alert('正常に更新されました。');";
}
}
/**
* パラメーター情報の初期化
*
* @param array $objFormParam フォームパラメータークラス
* @return void
*/
public function lfInitParam(&$objFormParam)
{
$objFormParam->addParam('編集種別', 'tpl_subno_csv', STEXT_LEN, 'a', array('ALNUM_CHECK', 'MAX_LENGTH_CHECK'), 'product');
$objFormParam->addParam('出力設定リスト', 'output_list', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK', 'EXIST_CHECK'));
//デフォルト値で上書き
$objFormParam->setParam(array('tpl_subno_csv' => 'product'));
}
/**
* CSVカラム設定の読み込み
*
* @param integer $csv_id CSV ID
* @param integer $csv_status_flg 読み込む対象のフラグ CSV_COLUMN_STATUS_FLG_ENABLE or ''
* @return array SwapArrayしたカラム設定
*/
public function lfGetCSVColumn($csv_id, $csv_status_flg = '', $order ='rank, no')
{
$objCSV = new SC_Helper_CSV_Ex();
if (SC_Utils_Ex::sfIsInt($csv_id)) {
if ($csv_status_flg !='') {
$arrData = $objCSV->sfGetCsvOutput($csv_id, 'status = ?' , array($csv_status_flg), $order);
} else {
$arrData = $objCSV->sfGetCsvOutput($csv_id, '', array(), $order);
}
$arrData = SC_Utils_Ex::sfSwapArray($arrData);
} else {
$arrData = array();
}
return $arrData;
}
/**
* 選択済みカラム列情報を取得
*
* @param integer $csv_id CSV ID
* @return array 選択済みカラム列情報
*/
public function lfGetSelected($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id, CSV_COLUMN_STATUS_FLG_ENABLE);
if (!isset($arrData['no'])) {
$arrData['no'] = array();
}
return $arrData['no'];
}
/**
* カラム列情報と表示名情報を取得
*
* @param integer $csv_id CSV ID
* @return array 選択済みカラム列情報
*/
public function lfGetOptions($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id);
if (!isset($arrData['no'])) {
$arrData['no'] = array();
$arrData['disp_name'] = array();
}
$arrData = SC_Utils_Ex::sfArrCombine($arrData['no'], $arrData['disp_name']);
return $arrData;
}
/**
* CSV名からCSV_IDを取得する。
*
* @param string $subno_csv CSV名
* @return integer CSV_ID
*/
public function lfGetCsvId($subno_csv)
{
$objCSV = new SC_Helper_CSV_Ex();
$arrKey = array_keys($objCSV->arrSubnavi,$subno_csv);
$csv_id = $arrKey[0];
if (!SC_Utils_Ex::sfIsInt($csv_id)) {
//初期値取りだし
$arrKey = array_keys($objCSV->arrSubnavi);
$csv_id = $arrKey[0];
}
return $csv_id;
}
/**
* CSV出力項目設定を初期化する
*
* @param integer $csv_id CSV_ID
* @return boolean 成功:true
*/
public function lfSetDefaultCsvOutput($csv_id)
{
$arrData = $this->lfGetCSVColumn($csv_id, '', 'no');
if (!isset($arrData['no'])) {
$arrData['no'] = array();
}
return $this->lfUpdCsvOutput($csv_id, $arrData['no']);
}
/**
* CSV出力項目設定を更新する処理
*
* @param integer $csv_id CSV_ID
* @param array $arrData 有効にするCSV列データ配列
* @return boolean 成功:true
*/
public function lfUpdCsvOutput($csv_id, $arrData = array())
{
$objQuery =& SC_Query_Ex::getSingletonInstance();
// ひとまず、全部使用しないで更新する
$table = 'dtb_csv';
$where = 'csv_id = ?';
$arrWhereVal = array($csv_id);
$arrUpdVal = array('status' => '2', 'rank' => NULL, 'update_date' => 'CURRENT_TIMESTAMP');
$objQuery->begin();
$objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
// 使用するものだけ、再更新する。
if (is_array($arrData)) {
$where .= ' AND no = ?';
$arrUpdVal = array('status' => '1');
foreach ($arrData as $key => $val) {
$arrWhereVal = array($csv_id, $val);
$arrUpdVal['rank'] = $key + 1;
$objQuery->update($table, $arrUpdVal, $where, $arrWhereVal);
}
}
$objQuery->commit();
return true;
}
}
|
|
|
mizuvan |
投稿日時: 2014/12/4 18:56
対応状況: −−−
|
長老 登録日: 2013/3/26 居住地: 投稿: 253 |
Re: CSV出力する項目の保存はできないでしょうか? 現在のレンタルサーバーでは、phpMyAdminでの
RESET QUERY CACHE;
は出来ませんでした・・
|
|
|
|
統計情報
総メンバー数は88,668名です
総投稿数は109,922件です
|