<?php
namespace Plugin\TopCategory42\Controller;
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Eccube\Repository\CategoryRepository;
use Eccube\Repository\ProductRepository;
use Knp\Component\Pager\PaginatorInterface;
use Plugin\TopCategory42\Service\TopCategoryService;
/**
* Class CampaignController.
*/
class TopCategoryController extends AbstractController
{
/**
* @var CategoryRepository
*/
protected $categoryRepository;
/**
* @var ProductRepository
*/
protected $productRepository;
/**
* @var TopCategoryService
*/
protected $topCategoryService;
/**
* NewsController constructor.
*
* @param CategoryRepository $categoryRepository
* @param ProductRepository $productRepository
* @param TopCategoryService $topCategoryService
*/
public function __construct(
CategoryRepository $categoryRepository,
ProductRepository $productRepository,
TopCategoryService $topCategoryService
){
$this->categoryRepository = $categoryRepository;
$this->productRepository = $productRepository;
$this->topCategoryService = $topCategoryService;
}
/**
* @Route("/block/top_category42", name="block_top_category42", methods={"GET"})
* @Template("Block/top_category42.twig")
*/
public function index(Request $request, PaginatorInterface $paginator)
{
$Categories = null;
$CatProducts = null;
$NewProducts = null;
$Products = null;
$Cids = [1 ,2, 8, 7, 6];//カテゴリーが重複する場合、表示優先順位は、8 > 7 > 6とする。
$Pids = [];
foreach($Cids as $key) {
//表示は最大10件
if($key == 1) {
$ikey = 0;
}elseif($key == 2) {
$ikey = 1;
}elseif($key == 8) {
$ikey = 4;
}elseif($key == 7) {
$ikey = 2;
}elseif($key == 6) {
$ikey = 3;
}
$Categories[$ikey] = $this->categoryRepository->find($key);
$Products = $this->topCategoryService->getData($this->categoryRepository->find($key), $Pids);
// オススメのフラグだけ取得
foreach($Products as $pkey => $product) {
if($product->getTags()){
foreach($product->getTags() as $tag) {
if($tag->getId() == 4) {
$NewProducts[$ikey][$pkey] = $product;
break;
}
}
}
}
$CatProducts[$ikey] = array_slice($NewProducts[$ikey], 0, 10);
// 除外する商品IDを設定(先のカテゴリーで取得した商品は、後続のカテゴリーでは取得しない)
foreach($Products as $Product) {
$Pids[] = $Product->getId();
}
}
ksort($Categories);
ksort($CatProducts);
return [
'Categories' => $Categories,
'CatProducts' => $CatProducts,
];
}
}