バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 管理画面の商品登録をフロント画面から登録したい。

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Bongsu
投稿日時: 2018/4/24 21:07
対応状況: 開発中
半人前
登録日: 2018/2/15
居住地:
投稿: 29
管理画面の商品登録をフロント画面から登録したい。
▼テンプレート
[EC-CUBE] EC-CUBE 3.0.15 簡単インストール
[レンタルサーバ] へテムル
[OS] 使用しているOS名、Mac Sierra 10.13.3
[PHP] PHP7.0
[データベース] Mysql5.6
[現象]
訳がありまして 管理画面の商品登録をフロント画面からする必要ができました。

コントローラ、Twig, ControllerProvider の 
AdminControllerProvider.php FrontControllerProvider.php
の各ファイルを修正し、所定の場所に新たに作り
フロント画面から商品登録の画面のページを単に表示する事はできるのですが
各フォームを入力し、いざ 『商品登録』ボタンをクリックすると


SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'creator_id' cannot be null
と SQLエラーが出ます。

管理画面のページをフロント画面で表示させたのだから
creator_id member_id などが関連してるんだな とは思うのですが
関連性が複雑に感じて 恥ずかしながら修正の仕方がわかりません。
form entiry dcm.yml などは そのまま Admin以下のファイルを利用し
データベースも dtb_product を使用しながら
このエラーをなくし creator_id member_id などスルーして
商品登録をフロント画面からする方法はないでしょうか?
どの様に考えていけばいいかも ご教授いただけるとありがたいです。

どうか 宜しく お願い致します。
468
投稿日時: 2018/4/24 22:09
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 管理画面の商品登録をフロント画面から登録したい。
デフォルトでは商品をどのメンバーが登録したのか必ず記録する仕様となっており、
管理画面にログインしたメンバーをセッションより取り出してレコードに設定しております。

フロントで商品登録を実行した際、本来ならログイン済みでセッションに格納済みのメンバーが未格納の為、エラーが発生しているとかんごえられます。

要件が分からないので何とも言えませんが、商品を登録する処理にて、
productエンティティのsetCreator()にダミーのメンバーをセットすれば良いのではないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

Bongsu
投稿日時: 2018/4/25 14:09
対応状況: 開発中
半人前
登録日: 2018/2/15
居住地:
投稿: 29
Re: 管理画面の商品登録をフロント画面から登録したい。
早速 ご返事頂き 有難うございます!

作りたい理由は
100人程が集まる 小規模なモノで、
3つの違う業者さんが集まり それぞれが自分達の商品を
出し合い 取引をしていくというモノです。
AはBが欲しい、CはBが欲しい
A,B,Cそれぞれが それぞれのモノを見れるので相場も安定するとの
利点もあります。

今まではそれぞれの業者さんから 商品の詳細メールを受け取り
それを管理画面から手動で登録いていくという手法で考えていました。

しかし アップする時のタイプミスやメールは届いているのに
(いつメールが届くかわからない。期限が決まっている。)
なかなか商品にアップされないで日程がすぎてしまった事のクレーム、
個人的な事では 勝手なことですが いつくるかわからい登録作業に追われてします。

そこで それそれの業者さんがフロント画面から自分たちで自分達の商品登録できたら
いいなと考えました。
商品は3つの業者さん以外は 他が見ても興味がない小規模なモノなので
フロント画面を使ってもいいかと思いました。
Shopというより 固定の人達が利用する便利アプリケションのニュアンスかもしれません。
そこに取引が存在するで ECCUBEを利用しました。
出来ることなら 完成させたいです。

ご指導いただいたように
『productエンティティのsetCreator()にダミーのメンバーをセットすれば良い』

これは productエンティティのファイル内のsetCreator()に何かのコードを
付け加えるのでしょうか?

それともエンティティ関連した ProductController.phpの所定の function以下に
$Product = new \Eccube\Entity\Product();
$ProductClass = new \Eccube\Entity\ProductClass();
$Member = new \Eccube\Entity\Member();
$Product
->setDelFlg(Constant::DISABLED)
->addProductClass($ProductClass)
->setStatus($Disp)
->setCreator('???);
とするのでしょうか?
setCreatorの()の中に $Member, Dummy, Login_id などを入れて見ましたが

Type error: Argument 1 passed to Eccube\Entity\Product::setCreator() must be an instance of Eccube\Entity\Member, string given, called in /home/users/0/*******/web/*****/src/Eccube/Controller/InfomationController.php on line 262
とエラーが出ます。
図々しい 質問ですが 
『productエンティティのsetCreator()にダミーのメンバーをセットすれば良い』には
どの様にコードを書けばいいでしょうか?

また ほとんど会員様しか見れないサイトなので
会員登録のcustomerエンティティ、customer.dcm.yml に
manyToOne:
Creator:
targetEntity: Eccube\Entity\Member
joinColumn:
name: creator_id
referencedColumnName: member_id
nullable: false
と Eccube\Entity\Member creator_idをリレーションして ログインすると creator_idを
取得させるという考え方は良いのでしょうか?
この様にしたら 会員登録時に管理画面ログインも求められてしまうでしょうか?

出来るかどうかは テスト的にやってみるが 一番の方法かとも思いますが、
折角 作ったサイトが壊れてしまうのが残念でなりません。

何卒 ご教授頂けたらと思います。

宜しく お願い致します。
468
投稿日時: 2018/4/25 18:16
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 管理画面の商品登録をフロント画面から登録したい。
3つの業者さんが商品を登録し、その取引を管理していきたいという要件の解決については、
ECCUBEが元々想定している仕様とは異なる為、色々と手を加える必要がありそうですが、
質問いただいている『productエンティティのsetCreator()にダミーのメンバーをセットすれば良い』箇所の記述については、
以下のような記述になると思います。


$Member = $app['eccube.repository.member']->find(2);
$Product
->setCreator($Member);

※インストール時に設定した管理者のアカウントが紐づけられると思います。

CustomerエンティティにMemberを紐づける設定を行い、
そこからMemberを取得する方法でも良いとは思いますが、
会員登録時にMemberの設定が必要となり、今度はそのMemberはどこから取得してくるのかが課題になるかと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

Bongsu
投稿日時: 2018/4/26 12:40
対応状況: 開発中
半人前
登録日: 2018/2/15
居住地:
投稿: 29
Re: 管理画面の商品登録をフロント画面から登録したい。
度々のご教授 大変 感謝いたします。

ダミーのメンバーをセットする為 早速
$Member = $app['eccube.repository.member']->find(2);
$Product
->setCreator($Member);

と記述して見ましたが
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'creator_id' cannot be null
となってしまいます。
SQLエラー文は調べませんでいたが、
強制、制約、違反、侵害などの意味から 私みたいな素人では
やはり難しいのかなと思いました。
管理画面にログインしたメンバーのセッション状態にない為に
'creator_id' cannot be null になってしまうのかと勝手に思っています。

予算はありませんが 外注という手段も視野に入れながら
今後を考えて見ます。

最後の悪あがきとして
ダミーのメンバーをセットして それが管理画面にログインしたメンバーの
セッション状態になると言う方法はないでしょうか?

$Member = $app['eccube.repository.member']->find(2);
ここから login_id, passwordを利用してセッション状態にしてから

$Product
->setCreator($Member);
になれば
$Product にセッションされた$MemberをsetCreatorする みたいな事には
ならないでしょうか?
自分なりには
$Member = $app['eccube.repository.member']->find(2);
$Member ->getLoginId()
->getPassword()
->setLoginId($loginId)
->setPassword($password);
$Product
->setCreator($Member);
としましたがエラーが出ました。
『Call to a member function getPassword() on string』
この考え方はダメでしょうか?
それとも記述が間違っているのでしょうか?
根本的な所からセッション状態と言う概念から勉強しなくてはいけないでしょうか?


本当にわがままで申し訳ございません。
最後の悪あがきをしております。
ご意見いただけたら有り難いです。
宜しくお願い致します。
468
投稿日時: 2018/4/26 14:16
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 管理画面の商品登録をフロント画面から登録したい。
エラーの内容からデフォルトの管理者アカウントを削除されていたりしませんか?

$Member = $app['eccube.repository.member']->find(2);
の結果がNULLなのではないでしょうか?

管理画面で設定>システム情報設定>メンバー管理でメンバーを編集しようとした際、URLは以下のような形式になるかと思いますが、
/setting/system/member/2/edit
memberの後ろ、editoの前の数値がメンバーのIDになりますので、
その数値をfind()の引数にセットされてみては如何でしょうか?
(もしくは、3,4,5,6と数値を変えていってみる等)

>ダミーのメンバーをセットして それが管理画面にログインしたメンバーの
>セッション状態になると言う方法はないでしょうか?
この記述の意図をこの文章だけでは読み取る事が出来ないので、私の認識が誤っているかもしれませんが、
フロントで商品を登録する際、管理画面にログイン済みのセッション状態にしたいという事でしょうか?
一応、コントローラー側でセッション状態を変更して、管理画面にログインした状態とする事は可能ですが、
その状態でURLを直接入力する等という操作で管理画面側に侵入できてしまう為、
安易にそういった処理を追加するのは止めておいたほうが良いと思います。
勿論、ECCUBEの管理画面の権限機能の仕組みなどを理解されており、
管理画面の機能が制限されたアカウントを利用するのであれば、問題無いと思いますが...


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

Bongsu
投稿日時: 2018/4/28 9:56
対応状況: −−−
半人前
登録日: 2018/2/15
居住地:
投稿: 29
Re: 管理画面の商品登録をフロント画面から登録したい。
幾度もご丁寧な、的確なご指導を頂き
本当に心より感謝しております。
昨日は用事があり机の上に向かえなかったので
本日 お礼を申し上げました。

$Member = $app['eccube.repository.member']->find(2);
のメンバーIDに関しては間違っていないと思います。

Admin/Product/ProductController.phpを
フロントに別名でコピペして
function edit 以下にご指導いただいたコードを入力したのですが
多分 Admin/Product/ProductController.phpを充分に理解していない上で
コードの入力したので エラーを出しているかもしれません。
Admin/Product/ProductController.phpをもっとじっくり検証した上で
どこにコードを入力すべくか 考えて見ます。

セッション状態にするに関しましては
セッション状態とはどんな状態なのか?と言う事をよく理解してない故に
セッション状態でないから 
$Product
->setCreator($Member);
が反映されないではと 一種の空想で考えた事です。
$Member = $app['eccube.repository.member']->find(2);
には creator_idもmember_idもlogin_idもpasswordも登録されているのだから
単に
$Member = $app['eccube.repository.member']->find(2);
$Product
->setCreator($Member);
がうまく反映されてない 私の知識不足と考えます。

繰り返しになりますが、
Admin/Product/ProductController.phpとにらめっこしながら試行錯誤して見ます。

話は変わりますが 
そちらさんと ECCUBE開発の相談などできるのでしょうか?
その場合はどの様にすればいいのでしょうか?
468
投稿日時: 2018/4/28 10:44
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 管理画面の商品登録をフロント画面から登録したい。
返信ありがとうございます。
実際にコードを書いて試したわけではないので、提示したコードには誤りがあるかもしれません。

セッション状態にするというのは、ログイン画面を飛ばして、ログイン状態にするという意味で記載させていただきました。

弊社に連絡をいただく場合、WEBサイトのお問い合わせページよりご連絡いただけたらと思います。
ただ、本日から連休をいただいておりますので、返信は5/7以降になるかと思いますので、ご了承ください。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1294
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.