🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

EC-CUBE

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

Q&A

解決済

1回答

1918閲覧

[EC-CUBE4系]新着商品自動取得ブロックをカテゴリごとに複数設置したい

diz-inc

総合スコア5

PHP

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

Twig

Twig は、簡潔で可読性の高いテンプレートを記述することができ、 シンプルに記述することを目的として作られた PHPテンプレートエンジンです。

EC-CUBE

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

0グッド

0クリップ

投稿2019/11/19 09:47

編集2019/11/19 10:10

##前提・実現したいこと
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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

php

1 public function getFunctions() 2 { 3 return array( 4 new \Twig_SimpleFunction('CustomizeNewProduct', array($this, 'getCustomizeNewProduct')), 5 new \Twig_SimpleFunction('CustomizeNewProduct2', array($this, 'getCustomizeNewProduct2')), 6 ); 7 }

と、新たにCustomizeNewProduct2を定義して、新着商品取得の処理をコピペで追加しました。

そして新規追加ブロックのtwigでCustomizeNewProduct2を呼び出したところ無事に表示されました。

投稿2019/11/21 05:43

diz-inc

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問