表題の通り、EC-CUBE4をつかって、新着商品を自動取得させたいです.
プラグインもあるようですが、今回は勉強がてら自力で設置できるようにしたいと思っています。
[EC-CUBE 4] トップページに新着商品を表示するカスタマイズ
調べてみると、こちらのサイトが一番わかりやすく、ファイルまで用意してくれていたのですが
上記の画像のようにフォーマットが正しくありませんとなります。
コードはこちらになります。↓
/* * * new_item.twig * */ #} {% set Products = CustomizeNewProduct() %} {% if Products|length > 0 %} <div class="ec-role"> <div class="ec-newItemRole"> <div class="ec-newItemRole__list"> <div class="ec-newItemRole__listItem"> <div class="ec-newItemRole__listItemHeading ec-secHeading--tandem"> <span class="ec-secHeading__en">{{ 'front.block.new_item.title__en'|trans }}</span> <span class="ec-secHeading__line"></span> <span class="ec-secHeading__ja">{{ 'front.block.new_item.title__ja'|trans }}</span> <a class="ec-inlineBtn--top" href="{{ url('product_list') }}?orderby={{eccube_config.eccube_product_order_newer}}">{{ 'front.block.new_item.more'|trans }}</a> </div> </div> {% for Product in Products %} <div class="ec-newItemRole__listItem"> <a href="{{ url('product_detail', {'id': Product.id}) }}"> <img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}"> <p class="ec-newItemRole__listItemTitle">{{ Product.name }}</p> <p class="ec-newItemRole__listItemPrice"> {% if Product.hasProductClass %} {% if Product.getPrice02Min == Product.getPrice02Max %} {{ Product.getPrice02IncTaxMin|price }} {% else %} {{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }} {% endif %} {% else %} {{ Product.getPrice02IncTaxMin|price }} {% endif %} </p> </a> </div> {% endfor %} </div> </div> </div> {% endif %}
phpのコードが
/* * *TwigExtension.php * */ namespace Customize\Twig\Extension; use Doctrine\Common\Collections; use Doctrine\ORM\EntityManagerInterface; use Eccube\Common\EccubeConfig; use Eccube\Entity\Master\ProductStatus; use Eccube\Entity\Product; use Eccube\Entity\ProductClass; use Eccube\Repository\ProductRepository; class TwigExtension extends \Twig_Extension { /** @var EntityManagerInterface */ private $entityManager; /** * @var EccubeConfig */ protected $eccubeConfig; /** * @var ProductRepository */ private $productRepository; /** * TwigExtension constructor. * */ public function __construct( EntityManagerInterface $entityManager, EccubeConfig $eccubeConfig, ProductRepository $productRepository ) { $this->entityManager = $entityManager; $this->eccubeConfig = $eccubeConfig; $this->productRepository = $productRepository; } /** * Returns a list of functions to add to the existing list. * * @return array An array of functions */ public function getFunctions() { return array( new \Twig_SimpleFunction('CustomizeNewProduct', array($this, 'getCustomizeNewProduct')), ); } /** * Name of this extension * * @return string */ public function getName() { return 'CustomizeTwigExtension'; } /** * * 新着商品3件返す * * @return Products|null */ public function getCustomizeNewProduct() { try { // 既存のproductRepositoryを利用し、商品情報を取得 // 検索条件の新着順を定義 $searchData = array(); $qb = $this->entityManager->createQueryBuilder(); $query = $qb->select("plob") ->from("Eccube\Entity\Master\ProductListOrderBy", "plob") ->where('plob.id = :id') ->setParameter('id', $this->eccubeConfig['eccube_product_order_newer']) ->getQuery(); $searchData['orderby'] = $query->getOneOrNullResult(); // 新着順の商品情報3件取得 $qb = $this->productRepository->getQueryBuilderBySearchData($searchData); $query = $qb->setMaxResults(3)->getQuery(); $products = $query->getResult(); return $products; } catch (\Exception $e) { return null; } return null; } }
となっています。
ヒントだけでも頂けたらと思います。
図々しくて申し訳ございません。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/20 10:47
2019/07/21 01:41