バージョン選択

フォーラム

メニュー

オンライン状況

87 人のユーザが現在オンラインです。 (68 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 87
もっと...

サイト内検索

質問 > 管理機能 > PHPから商品登録を行なう方法

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
shimbo
投稿日時: 2018/11/15 12:08
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
自己レスですが、なんとか、不足をあれこれ補って、商品のデータをデータベースに書き込むところまで持ち込めました。

まだカテゴリの登録などで少々問題は残っていますが、なんとかなりそうです。

ありがとうございます。
shimbo
投稿日時: 2018/11/15 10:21
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
ありがとうございます。

私の方で、formから受け取るパターンと、直接データをORMで書き込むパターンが区別できておらず、混乱していました。Admin/ProductController.phpの記述を参考にしていたせいで、form経由の書き方が入ってきてしまっていました。

現状を整理しますと、
・外部システムからの商品データは受け取れている(file_put_contents()でログに書き出せている)
・プラグインから直接データを書き込む

という形です。
・orm.emにsetterを使ってデータをセット
・persistしてflush
という形でできるはずだと思っております。

> ・$longname_en こちらは商品名が入るのでしょうか?
仰るとおり、商品名が入ります。

> ・バリデートが入っていないようなのですが、CSRFのチェックを一度外している感じですか?
form経由ではなくDoctorineで書き込もうと思っておりますので、CSRFのチェックはしていません。

> ・フォームデータを処理するには、handleRequest()メソッドを呼び出す必要がありますが、実行されてないように思われます。
こちらは完全に見落としていました。formで書き込む際にはどこに入れればいいか、調べてみます。

> POSTした内容すべて保存できたのでしょうか?
flushすると、MySQL側から「○○はnull不可」とのエラーが戻ってくるので、それを調べている段階です。

商品のセットに必要なデータというのは、どこかで調べたらわかるものでしょうか。その辺りのノウハウがどうもよくわかりません。

ともかくも、いろいろ指摘して頂き、助かります。本当にありがとうございます。
sw_tm
投稿日時: 2018/11/14 16:14
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 38
Re: PHPから商品登録を行なう方法

        // 名前登録
        $form['name']->setData($longname_en);

        // 詳細登録
        $form['description_detail']->setData($detail_en);


コードで気になる点について

・$longname_en こちらは商品名が入るのでしょうか?

・バリデートが入っていないようなのですが、CSRFのチェックを一度外している感じですか?

・フォームデータを処理するには、handleRequest()メソッドを呼び出す必要がありますが、実行されてないように思われます。

引用:

 いろいろ教えて頂いた甲斐あって、なんとかPOSTされたデータを保存するところまで書きました。


POSTした内容すべて保存できたのでしょうか?
shimbo
投稿日時: 2018/11/14 15:02
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
ありがとうございます。

・登録したい情報は、DBには登録されていません。
・商品登録を行なうタイミングは、別システムの商品登録時になります。
・商品画像の登録もしたいと思っています。

別システムで商品が登録された時に、データを受け取ってECCUBE3にコピーするようなイメージです。
sw_tm
投稿日時: 2018/11/14 13:22
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 38
Re: PHPから商品登録を行なう方法
3点確認させてください。

・登録したい商品情報は、DBに保存されていますか?
 DBに保存されている場合、EC-CUBEのサーバーからアクセスすることは可能でしょうか?

・商品登録を行うタイミングをおしえてください。
  定時? 別システムの商品登録時? 等

・商品画像の登録はありますか?
shimbo
投稿日時: 2018/11/14 13:20
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
      public function addProduct(Application $app, Request $request){
                
        $install_dir = 'https://';
        //(中略)

        $Product = new \Eccube\Entity\Product();
        $ProductClass = new \Eccube\Entity\ProductClass();
        $ProductType = new \Eccube\Entity\Master\ProductType();
        $Disp = $app['eccube.repository.master.disp']->find(\Eccube\Entity\Master\Disp::DISPLAY_HIDE);

        $Product
        ->setDelFlg(Constant::DISABLED)
        ->addProductClass($ProductClass)
        ->setStatus($Disp);
        $ProductClass
        ->setDelFlg(Constant::DISABLED)
        ->setStockUnlimited(true)
        ->setProduct($Product)
        ->setPrice02IncTax($price);
        $ProductStock = new \Eccube\Entity\ProductStock();
        $ProductClass->setProductStock($ProductStock);
        $ProductStock->setProductClass($ProductClass);

        //formに値をセットする
        $builder = $app['form.factory']
        ->createBuilder('admin_product', $Product);
        $form = $builder->getForm();

        // 名前登録
        $form['name']->setData($longname_en);

        // 詳細登録
        $form['description_detail']->setData($detail_en);

        // カテゴリ登録
        $categories = array();
        $ProductCategories = $Product->getProductCategories();
        foreach ($ProductCategories as $ProductCategory) {
            /* @var $ProductCategory \Eccube\Entity\ProductCategory */
            $categories[] = $ProductCategory->getCategory();
        }
        $form['Category']->setData($categories);
        // $form['Category']->setData($posted_category);

        // タグ登録
        $Tags = array();
        $ProductTags = $Product->getProductTag();
        foreach ($ProductTags as $ProductTag) {
            $Tags[] = $ProductTag->getTag();
        }
        $form['Tag']->setData($Tags);
        // 商品登録開始
        $Product = $form->getData();
        $app['orm.em']->persist($Product);

        $app['orm.em']->flush();

        return new Response('', Response::HTTP_OK, array('Content-Type' => 'text/plain; charset=utf-8'));
    }


いろいろ教えて頂いた甲斐あって、なんとかPOSTされたデータを保存するところまで書きました。しかしながら、postでデータを投げてもサーバー500が戻ってきてしまいます。
単体でGETでURLを叩いた時には、「Column 'name' cannot be null」が表示されるので、データの渡し方の問題なのかなと思っておりますが、何か私のコードで見落としがあるでしょうか? $formへの値のセットが間違っているのかとも思うのですが……?

shimbo
投稿日時: 2018/11/14 12:18
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
なるほど、そういうことですね。

今回は人手を介することはちょっと難しいので、なんとか頑張ってみたいと思います。
ありがとうございます。
sw_tm
投稿日時: 2018/11/13 13:17
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 38
Re: PHPから商品登録を行なう方法
CSVでデータ登録については、CSVファイルを用意し、
管理画面から登録することを想定して、お伝えしました。


別システムから、CSVファイルを出力できれば、
EC-CUBEのカスタマイズが必要なくなるので、
簡単かと思います。
shimbo
投稿日時: 2018/11/13 11:57
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
仰る通り、別のシステムからの登録ということです。

CURLだとCSRFのトークンが必要になるとのことですね。それは見落としておりました。

1つだけ商品を登録するという状況を想定しているので、CSV経由のことは考えていませんでした。

私は、どうもデータを他のクラス、コントローラーに渡す方法が今一つ理解できていないようです。

この場合、CSVのデータを生成して、->render()で/admin/product/product_csv_uploadに投げるような感じになるんでしょうか。
shimbo
投稿日時: 2018/11/13 11:49
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 23
Re: PHPから商品登録を行なう方法
コメントありがとうございます。

AdminControllerProviderでは

$c->match('/product/product/new', '\Eccube\Controller\Admin\Product\ProductController::edit')->bind('admin_product_product_new');


とありますので、

\Eccube\Controller\Admin\Product\ProductController::editにデータをPOSTして……と思っていたのですが、ResponseにはHTMLが出力されているものの、データベースには反映されず……といった状況です。

sw_tmさんも仰っているように、CSRFなど別の要因なのかな……と思っております。

方針転換して、直接app['orm.em']に書き込んでいく方がいいのかな……と思い始めました。それはそれで、
$app->persist($Product');
$app['orm.em']->flush();

とするだけでちゃんと反映されるのか、少々不安な部分はあるのですが……。
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は61,209名です
総投稿数は95,498件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2041
4
nanasess
2039
5
yuh
1612
6
umebius
1588
7
red
1399
8
h_tanaka
998
9
fukap
907
10
tsuji
863
11
shutta
835
12 ramrun 789
13
tao_s
783
14 karin 656
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.