public function index(Application $app, Request $request)
{
$BaseInfo = $app['eccube.repository.base_info']->get();
// Doctrine SQLFilter
if ($BaseInfo->getNostockHidden() === Constant::ENABLED) {
$app['orm.em']->getFilters()->enable('nostock_hidden');
}
// handleRequestは空のqueryの場合は無視するため
if ($request->getMethod() === 'GET') {
$request->query->set('pageno', $request->query->get('pageno', ''));
}
// searchForm
/* @var $builder \Symfony\Component\Form\FormBuilderInterface */
$builder = $app['form.factory']->createNamedBuilder('', 'search_product');
$builder->setAttribute('freeze', true);
$builder->setAttribute('freeze_display_text', false);
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(array('builder' => $builder), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_INITIALIZE, $event);
/* @var $searchForm \Symfony\Component\Form\FormInterface */
$searchForm = $builder->getForm();
$searchForm->handleRequest($request);
// paginator
$searchData = $searchForm->getData();
$qb = $app['eccube.repository.product']->getQueryBuilderBySearchData($searchData);
$event = new EventArgs(array('searchData' => $searchData, 'qb' => $qb), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_SEARCH, $event);
$searchData = $event->getArgument('searchData');
$pagination = $app['paginator']()->paginate($qb, !empty($searchData['pageno']) ? $searchData['pageno'] : 1, $searchData['disp_number']->getId());
// addCart form
$forms = array();
foreach ($pagination as $Product) {
/* @var $builder \Symfony\Component\Form\FormBuilderInterface */
$builder = $app['form.factory']->createNamedBuilder('', 'add_cart', null, array('product' => $Product, 'allow_extra_fields' => true));
$addCartForm = $builder->getForm();
if ($request->getMethod() === 'POST' && (string) $Product->getId() === $request->get('product_id')) {
$addCartForm->handleRequest($request);
if ($addCartForm->isValid()) {
$addCartData = $addCartForm->getData();
try {
$app['eccube.service.cart']->addProduct($addCartData['product_class_id'], $addCartData['quantity'])->save();
} catch (CartException $e) {
$app->addRequestError($e->getMessage());
}
$event = new EventArgs(array('form' => $addCartForm, 'Product' => $Product), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_COMPLETE, $event);
if ($event->getResponse() !== null) {
return $event->getResponse();
}
return $app->redirect($app->url('cart'));
}
}
$forms[$Product->getId()] = $addCartForm->createView();
}
// 表示件数
$builder = $app['form.factory']->createNamedBuilder('disp_number', 'product_list_max', null, array('empty_data' => null, 'required' => false, 'label' => '表示件数', 'allow_extra_fields' => true));
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(array('builder' => $builder), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_DISP, $event);
$dispNumberForm = $builder->getForm();
$dispNumberForm->handleRequest($request);
// ソート順
$builder = $app['form.factory']->createNamedBuilder('orderby', 'product_list_order_by', null, array('empty_data' => null, 'required' => false, 'label' => '表示順', 'allow_extra_fields' => true));
if ($request->getMethod() === 'GET') {
$builder->setMethod('GET');
}
$event = new EventArgs(array('builder' => $builder), $request);
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_PRODUCT_INDEX_ORDER, $event);
$orderByForm = $builder->getForm();
$orderByForm->handleRequest($request);
$Category = $searchForm->get('category_id')->getData();
return $app->render('Product/list.twig', array('subtitle' => $this->getPageTitle($searchData), 'pagination' => $pagination, 'search_form' => $searchForm->createView(), 'disp_number_form' => $dispNumberForm->createView(), 'order_by_form' => $orderByForm->createView(), 'forms' => $forms, 'Category' => $Category));
}