バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

プラグイン > 開発について > プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい

開発について

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
g_kai
投稿日時: 2019/1/30 12:06
対応状況: −−−
半人前
登録日: 2018/12/18
居住地:
投稿: 16
プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
▼テンプレート
[EC-CUBE] 4.0.1
[OS] MacOS 10.13.3,
[PHP] 7.2.14
[データベース] sqlite
[WEBサーバ] bin/console s:r --env=dev

管理画面の商品登録画面にDateTime項目を追加するプラグインを作成中です。
Entity/ProductTrait.php というトレイトを作成し、アノテーションによってフォームを作成しました。

ソースコード例 app/Plugin/プラグイン名/Entity/ProductTrait.php

/**
 * @Eccube\EntityExtension("Eccube\Entity\Product")
 */
trait ProductTrait
{
    /**
     * @ORM\Column(name="example_time", type="datetimetz", nullable=true)
     * @Eccube\FormAppend(
     *  auto_render=true,
     *  type="\Symfony\Component\Form\Extension\Core\Type\DateTimeType",
     *  options={
     *    "required": false,
     *    "label": "日時テスト",
     *    "input": "datetime",
     *    "format": "Y/m/d hh:mm",
     *    "placeholder": {"year":"年", "month": "月", "day": "日", "hour": "時", "minute": "分"}
     *  }
     * )
     */
    private $example_time;

   public function ゲット()
   public function セット()
}


プラグインを有効化させ、管理画面の商品登録画面に日時テストという日時入力の項目を追加できたのですが、
管理画面の商品一覧の検索フォームに日時範囲の検索条件を追加したいです。

しかしながら、この後どうしたらよいかが正直にわからず、その後の手順を教えていただけますと助かります。。
また、参考になるサイトなど有りましたら共有お願いいたします。
もし不明点や足りない情報がありましたら、追記いたします。


P.S
アノテーションより日時項目を追加すると、年月日時分までの項目が出来上がるのですが、秒まで入力させたい場合、どうしたら良いでしょうか。
表題と関係のない質問ですみません。単純にどうすればよいか気になっております。
g_kai
投稿日時: 2019/1/30 13:17
対応状況: −−−
半人前
登録日: 2018/12/18
居住地:
投稿: 16
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
P.S. の秒まで入力させるときはoptionsにwith_secondsを入れてあげれば良さそうですね。

...
     *  options={
     *    "with_seconds": true,
...


表題の質問と脱線してすみません。表題の件、よろしくお願いいたします。
nyorai
投稿日時: 2019/1/30 16:58
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
Entity拡張を使って項目を追加できるのは、Entityがマッピングされているフォームなので、商品検索のフォームには自動で追加されないです。

今回のように商品検索フォームに項目を追加する場合は、以下の2ステップが必要になります。

1) FormExtensionでSearchProductType(商品検索のFormType)を拡張する
http://doc4.ec-cube.net/customize_formtype

2) ReposityのQueryCustomizerを使って検索のクエリを拡張する
http://doc4.ec-cube.net/customize_repository

サンプルコードを提示できればいいのですが、ちょっと時間がないので、手が空いたらまた投稿したいと思います。
g_kai
投稿日時: 2019/1/30 21:29
対応状況: −−−
半人前
登録日: 2018/12/18
居住地:
投稿: 16
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
お世話になっております。
回答有り難うございます。

商品検索用のFormを拡張、商品のRepositoryを拡張するということなんですね。
手順だけでも非常に助かりました!

私も今手元に試せる環境がないので、また明日確認してみようと思います。
サンプルコードの提示はとても嬉しいです、お手すきの際に少しだけご教授いただけると助かります。
g_kai
投稿日時: 2019/1/31 9:42
対応状況: −−−
半人前
登録日: 2018/12/18
居住地:
投稿: 16
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
1) FormExtensionでSearchProductType(商品検索のFormType)を拡張する

app/Plugin/プラグインディレクトリ/Form/Extension/SearchProductTypeExtension.php


<?php

namespace Plugin\プラグイン\Form\Extension;

use Eccube\Form\Type\Admin\SearchProductType;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\DateType;

class SearchProductTypeExtension extends AbstractTypeExtension
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('テスト日時', DateType::class, [
            'label' => 'テスト日時',
            'eccube_form_options' => [
                'auto_render' => true,
            ],
            諸々…
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getExtendedType()
    {
        return SearchProductType::class;
    }
}


SearchProductTypeの拡張はとりあえずこれでできそうでした。少しずつ理解してきました。

2) ReposityのQueryCustomizerを使って検索のクエリを拡張する
これも引き続き調べてみたいと思います。
nyorai
投稿日時: 2019/1/31 10:14
対応状況: −−−
仙人
登録日: 2015/8/21
居住地:
投稿: 302
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
もう試されたのですね、ありがとうございます。

SearchProductTypeの拡張はそれで大丈夫です。
RepostitoryのQueryCustomizer、わからないところあればフォローしますので、お気軽にご投稿いただければと思います。
g_kai
投稿日時: 2019/1/31 10:39
対応状況: 解決済
半人前
登録日: 2018/12/18
居住地:
投稿: 16
Re: プラグインの実装で商品登録画面に項目を追加完了→管理画面の商品検索条件を追加したい
確認ありがとうございます。
SearchProductTypeの拡張は問題ないようで、安心いたしました。

2) ReposityのQueryCustomizerを使って検索のクエリを拡張する
こちら理解いたしました、以下のようにQueryCustomizerの実装をするんですね。

app/Plugin/プラグインディレクトリ/Repository/ProductSearchAdminQueryCustomizer.php


<?php

namespace Plugin\LimitedTimeProduct\Repository;

use Doctrine\ORM\QueryBuilder;
use Eccube\Repository\QueryKey;
use Eccube\Doctrine\Query\QueryCustomizer;

class ProductSearchAdminQueryCustomizer implements QueryCustomizer
{
    /**
     * クエリをカスタマイズします。
     *
     * @param QueryBuilder $builder
     * @param array $params
     * @param string $queryKey
     */
    public function customize(QueryBuilder $builder, $params, $queryKey)
    {
        // ProductRepository.phpのgetQueryBuilderBySearchDataForAdminのように、$builderを組み立てるのですね。
        // 試しにProduct.id = 2 の商品を絞ってみました。
        $builder
            ->andWhere("p.id = :id")
            ->setParameter("id", 2);
    }

    /**
     * ProductRepository::getQueryBuilderBySearchDataForAdmin に適用する.
     *
     * @return string
     * @see \Eccube\Repository\ProductRepository::getQueryBuilderBySearchDataForAdmin()
     * @see QueryKey
     */
    public function getQueryKey()
    {
        return QueryKey::PRODUCT_SEARCH_ADMIN;
    }
}



何とか後はできそうです!解決になります!
商品登録画面に項目を追加したものの、検索画面の検索条件として含めるためにはどうしたらよいかの次の手順がわかり、とても助かりました。

感謝いたしますm_ _m
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
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.