##前提・実現したいこと
EC-CUBE4.0.3にてTOPページの新着商品ブロックのカスタマイズを行っております。
https://www.spreadworks.co.jp/top-new-products-for-ec-cube4/
上記のサイトを参考にカスタマイズし、特定カテゴリの新着商品を自動で取得、表示することができました。
同じ仕様で同ページ内に複数個所、別カテゴリの新着商品を表示させたいのですが、
TwigExtension.php内と新規ブロックtwig内(ここではnew_item_sec.twig)のどこをどのように修正すれば複数設置できますでしょうか?
よろしくお願いいたします。
##TwigExtension.php ソースコード
php
1<?php 2 3namespace Customize\Twig\Extension; 4 5use Doctrine\Common\Collections; 6use Doctrine\ORM\EntityManagerInterface; 7use Eccube\Common\EccubeConfig; 8use Eccube\Entity\Master\ProductStatus; 9use Eccube\Entity\Product; 10use Eccube\Entity\ProductClass; 11use Eccube\Repository\ProductRepository; 12 13class TwigExtension extends \Twig_Extension 14{ 15 /** @var EntityManagerInterface */ 16 private $entityManager; 17 18 /** 19 * @var EccubeConfig 20 */ 21 protected $eccubeConfig; 22 23 /** 24 * @var ProductRepository 25 */ 26 private $productRepository; 27 28 /** 29 * TwigExtension constructor. 30 * 31 */ 32 public function __construct( 33 EntityManagerInterface $entityManager, 34 EccubeConfig $eccubeConfig, 35 ProductRepository $productRepository 36 ) { 37 $this->entityManager = $entityManager; 38 $this->eccubeConfig = $eccubeConfig; 39 $this->productRepository = $productRepository; 40 } 41 /** 42 * Returns a list of functions to add to the existing list. 43 * 44 * @return array An array of functions 45 */ 46 public function getFunctions() 47 { 48 return array( 49 new \Twig_SimpleFunction('CustomizeNewProduct', array($this, 'getCustomizeNewProduct')), 50 ); 51 } 52 53 /** 54 * Name of this extension 55 * 56 * @return string 57 */ 58 public function getName() 59 { 60 return 'CustomizeTwigExtension'; 61 } 62 63 /** 64 * 65 * 新着商品3件返す 66 * 67 * @return Products|null 68 */ 69 public function getCustomizeNewProduct() 70 { 71 try { 72 // 既存のproductRepositoryを利用し、商品情報を取得 73 74 75 // 検索条件の新着順を定義 76 $searchData = array(); 77 $qb = $this->entityManager->createQueryBuilder(); 78 $query = $qb->select("plob") 79 ->from("Eccube\Entity\Master\ProductListOrderBy", "plob") 80 ->where('plob.id = :id') 81 ->setParameter('id', $this->eccubeConfig['eccube_product_order_newer']) 82 ->getQuery(); 83 $searchData['orderby'] = $query->getOneOrNullResult(); 84 85 // 新入荷商品を表示 86 $snkr_stock_id = 2; 87 $qb = $this->entityManager->createQueryBuilder(); 88 $query = $qb->select("ctg") 89 ->from("Eccube\Entity\Category", "ctg") 90 ->where('ctg.id = :id') 91 ->setParameter('id', $snkr_stock_id) 92 ->getQuery(); 93 $searchData['category_id'] = $query->getOneOrNullResult(); 94 95 // 商品情報3件取得 96 $qb = $this->productRepository->getQueryBuilderBySearchData($searchData); 97 $query = $qb->setMaxResults(3)->getQuery(); 98 $products = $query->getResult(); 99 return $products; 100 101 } catch (\Exception $e) { 102 return null; 103 } 104 return null; 105 } 106} 107
##new_item_sec.twig ソースコード
twig
1 2{% set Products = CustomizeNewProduct() %} 3{% if Products|length > 0 %} 4 5<div class="ec-role"> 6 <div class="ec-newItemRole"> 7 8 <div class="ec-secHeading"> 9 <span class="ec-secHeading__en">{{ 'NEW ARRIVAL'|trans }}</span> 10 <span class="ec-secHeading__line"></span> 11 <span class="ec-secHeading__ja">{{ '新着商品'|trans }}</span> 12 </div> 13 14 <ul class="top-new-product"> 15 {% for Product in Products %} 16 <li> 17 <a href="{{ url('product_detail', {'id': Product.id}) }}"> 18 <img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}"> 19 <p class="ec-newItemRole__listItemTitle">{{ Product.name }}</p> 20 <p class="ec-newItemRole__listItemPrice"> 21 {% if Product.hasProductClass %} 22 {% if Product.getPrice02Min == Product.getPrice02Max %} 23 {{ Product.getPrice02IncTaxMin|price }} 24 {% else %} 25 {{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }} 26 {% endif %} 27 {% else %} 28 {{ Product.getPrice02IncTaxMin|price }} 29 {% endif %} 30 </p> 31 </a> 32 </li> 33 {% endfor %} 34 </ul> 35 <div class="view-more-box"> 36 <a class="ec-inlineBtn--top" href="{{ url('product_list') }}?category_id=7">VEW MORE</a> 37 </div> 38 </div> 39 </div> 40</div> 41{% endif %} 42
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。