質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    24503questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • EC-CUBE

    317questions

    EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。

EC-CUBE3で在庫の表示

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,093

現在EC-CUBE3で開発をしています。
管理画面の商品マスターで「検索する」を押した時に在庫数を取得し、在庫が0の商品に「在庫切れ」アイコンを表示するということをやりたいです。

コントローラー下記のように作成しましたが、twigにうまくデータが渡せません。

<?php
namespace Eccube\Controller\Admin\Product;

class ProductController extends AbstractController
{
    public function index(Application $app, Request $request, $page_no = null)
    {

        $builder = $app['form.factory']
            ->createBuilder('admin_search_product');

        $event = new EventArgs(
            array(
                'builder' => $builder,
            ),
            $request
        );
        $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_INITIALIZE, $event);

        $searchForm = $builder->getForm();

        $pagination = array();

        $disps = $app['eccube.repository.master.disp']->findAll();
        $pageMaxis = $app['eccube.repository.master.page_max']->findAll();
        $page_count = $app['config']['default_page_count'];
        $page_status = null;
        $active = false;
        $stock = null;

        if ('POST' === $request->getMethod()) {

            $searchForm->handleRequest($request);

            if ($searchForm->isValid()) {
                $searchData = $searchForm->getData();

                // paginator
                $qb = $app['eccube.repository.product']->getQueryBuilderBySearchDataForAdmin($searchData);
                $page_no = 1;

                $event = new EventArgs(
                    array(
                        'qb' => $qb,
                        'searchData' => $searchData,
                    ),
                    $request
                );
                $app['eccube.event.dispatcher']->dispatch(EccubeEvents::ADMIN_PRODUCT_INDEX_SEARCH, $event);
                $searchData = $event->getArgument('searchData');

                $pagination = $app['paginator']()->paginate(
                    $qb,
                    $page_no,
                    $page_count,
                    array('wrap-queries' => true)
                );
                // ここから
                foreach ($pagination as $value) {
                    $Product = $app['eccube.repository.product']->find($value['id']);
                    if (!$Product) {
                        throw new NotFoundHttpException();
                    }
                    $has_class = $Product->hasProductClass();

                    if (!$has_class) {
                        $ProductClasses = $Product->getProductClasses();
                        $ProductClass = $ProductClasses[0];
                        $BaseInfo = $app['eccube.repository.base_info']->get();
                        if ($BaseInfo->getOptionProductTaxRule() == Constant::ENABLED && $ProductClass->getTaxRule() && !$ProductClass->getTaxRule()->getDelFlg()) {
                            $ProductClass->setTaxRate($ProductClass->getTaxRule()->getTaxRate());
                        }
                        $ProductStock = $ProductClasses[0]->getProductStock();
                    }

                    if ($ProductStock['stock'] === '0'){
                        $stock[] = '在庫切れ';
                    } else {
                        $stock[] = '';
                    }
                }
                // ここまで実装
                // sessionのデータ保持
                $session->set('eccube.admin.product.search', $searchData);
            }
        }

        return $app->render('Product/index.twig', array(
            'searchForm' => $searchForm->createView(),
            'pagination' => $pagination,
            'disps' => $disps,
            'pageMaxis' => $pageMaxis,
            'page_no' => $page_no,
            'page_status' => $page_status,
            'page_count' => $page_count,
            'active' => $active,
            //'stock' => $stock
        ));
    }
       {% for Product in pagination %}
          <div id="result_list__item--{{ Product.id }}" class="item_box tr">
               <div id="result_list__id--{{ Product.id }}" class="item_id td">
                  {{Product.id}}
               </div>
               <div id="result_list__image--{{ Product.id }}" class="item_photo td">
                       <a href="{{ url('admin_product_product_edit', { id : Product.id }) }}">
                             <img src="{{ app.config.image_save_urlpath }}/{{ Product.mainFileName|no_image_product }}" />
                       </a>
               </div>
               <div id="result_list__name--{{ Product.id }}" class="item_detail td">
                    <a href="{{ url('admin_product_product_edit', { id : Product.id }) }}">
                          {{ Product.name }}
                   </a>
                   {{ stock }}
                   <br>
                   <span id="result_list__code--{{ Product.id }}">
                          {{ Product.code_min }}
                          {% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}
                          {% endif %}
                   </span>
                 </div>
                 <div id="result_list__item_menu_box--{{ Product.id }}"class="icon_edit td">
                      <div id="result_list__item_menu_toggle--{{ Product.id }}" class="dropdown">
                           <a class="dropdown-toggle" data-toggle="dropdown"><svg class="cb cb-ellipsis-h"><use xlink:href="#cb-ellipsis-h"></svg></a>
                                  <ul id="result_list__item_menu--{{ Product.id }}" class="dropdown-menu dropdown-menu-right">
                                       <li><a href="{{ url('admin_product_product_class', { id : Product.id }) }}">規格</a></li>
                                       <li><a href="{{ url('admin_product_product_display', {'id' : Product.id}) }}" target="_blank">確認</a></li>
                                       <li><a href="{{ url('admin_product_product_copy', {'id' : Product.id}) }}" {{ csrf_token_for_anchor() }} data-method="post" data-message="商品情報を複製してもよろしいですか?">複製</a></li>
                                       <li><a href="{{ url('admin_product_product_delete', {'id' : Product.id}) }}" {{ csrf_token_for_anchor() }} data-method="delete" data-message="商品情報を削除してもよろしいですか?">削除</a></li>
                                   </ul>
                        </div>
                </div>
           </div><!-- /.item_box -->
      {% endfor %}


PHP側でpaginationに在庫情報を入れて渡そうとしましたがうまくいかず、レンダリングする箇所で在庫情報を渡すとArrayと表示されてうまくいきません。どうすればいいでしょうか?よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

+1

EC-CUBEのフォーラムに投稿したら解決しました。
商品マスターに在庫切れを表示するカスタマイズ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    24503questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • EC-CUBE

    317questions

    EC-CUBEは、主に日本国内で開発されているECコンテンツ管理システムです。ロックオン社のECKitを元にしてオープンソース化され、商品管理・受注管理・顧客管理・売上集計などECに特化した様々な機能を備えています。