バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
shimbo
投稿日時: 2018/11/12 11:30
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 27
PHPから商品登録を行なう方法
[EC-CUBE] EC-CUBE3.0.16
[レンタルサーバ] さくらインターネット
[OS] FreeBSD 9.1-RELEASE-p24
[PHP] 5.6.38
[データベース] MySQL 5.7.22-log
[WEBサーバ] Apache
[ブラウザ] Chrome
[導入プラグインの有無] 無し

同サーバのPHPから商品登録をできるようにしたいのですが、Symfony2の仕様がうまく理解しきれておらず、質問させて頂きます。

AdminControllerProvider.php56行目に

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


とあります。ProductController::editを調べてみると、admin_productフォームタイプからデータを拾っているようです。

他のPHPからPOSTでフォーム名と同じデータを送付すれば商品登録ができるかと思って試しているのですが、うまくできません。その送付方法自体も、今はCurlを使っているのですが、この方法が正しいかどうか確信がありません。

どのようにすれば他のPHPから商品登録が可能でしょうか?
red
投稿日時: 2018/11/12 17:49
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1568
Re: PHPから商品登録を行なう方法
上手く出来てない部分がよくわからないので、お答えしにくいです
どうやってPOSTしているのでしょうか?
どういったエラーが出ますか?


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

sw_tm
投稿日時: 2018/11/13 10:00
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 43
Re: PHPから商品登録を行なう方法
実現したいこととを確認したいのですが、
別のシステムにあるデータを利用し商品登録を行いたいということでしょうか?

その場合いくつか方法が考えられると思います。

curlでも可能ですが、管理画面へのログインと
CSRFへの実装が必要になります。
curlが必須な条件でなければ他の方法のほうが良いと思います。



例えば、データをエクスポートできるのであれば、
商品一括登録のフォーマットに加工することで、
登録・削除・更新が可能です。

管理画面->商品管理->商品CSV登録
/admin/product/product_csv_upload
shimbo
投稿日時: 2018/11/13 11:49
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 27
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();

とするだけでちゃんと反映されるのか、少々不安な部分はあるのですが……。
shimbo
投稿日時: 2018/11/13 11:57
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 27
Re: PHPから商品登録を行なう方法
仰る通り、別のシステムからの登録ということです。

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

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

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

この場合、CSVのデータを生成して、->render()で/admin/product/product_csv_uploadに投げるような感じになるんでしょうか。
sw_tm
投稿日時: 2018/11/13 13:17
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 43
Re: PHPから商品登録を行なう方法
CSVでデータ登録については、CSVファイルを用意し、
管理画面から登録することを想定して、お伝えしました。


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

今回は人手を介することはちょっと難しいので、なんとか頑張ってみたいと思います。
ありがとうございます。
shimbo
投稿日時: 2018/11/14 13:20
対応状況: −−−
半人前
登録日: 2018/10/5
居住地:
投稿: 27
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への値のセットが間違っているのかとも思うのですが……?

sw_tm
投稿日時: 2018/11/14 13:22
対応状況: −−−
常連
登録日: 2018/5/25
居住地:
投稿: 43
Re: PHPから商品登録を行なう方法
3点確認させてください。

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

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

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

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

別システムで商品が登録された時に、データを受け取ってECCUBE3にコピーするようなイメージです。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,306名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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