質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Twig

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

EC-CUBE

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

Q&A

解決済

1回答

5221閲覧

EC-CUBE4 新着商品を自動取得

dreamfactory

総合スコア20

PHP

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

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

Twig

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

EC-CUBE

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

1グッド

1クリップ

投稿2019/07/20 09:40

表題の通り、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; } }

となっています。

ヒントだけでも頂けたらと思います。

図々しくて申し訳ございません。

よろしくお願いします。

okina👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

CustomizeNewProductが不明だと言われています。

TwigExtension.phpの内容は問題なさそうなので、
正しい場所( app/Customize/Twig/Extension/TwigExtension.php )に作成されているかご確認ください。

間違いなく正しい場所にあるのであれば、キャッシュの影響かと思うのでvar/cache配下をすべて削除してみてください。

投稿2019/07/20 10:41

xenbeat

総合スコア4258

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

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

xenbeat

2019/07/20 10:47

TwigExtension.phpの最初に「<?php」がないのも気になりますがコピペミスですよね? そういうのも含め、TwigExtension.phpが正しく作成されているか再度ご確認ください。
dreamfactory

2019/07/21 01:41

お早いご回答を頂きありがとうございます。 <?php がないのはコピペミスでした。すいません。 昨日ご指摘いただいたところすべてやってみたところ何も変わらず、今日違うパソコンでキャッシュを削除したら正常に動くようになりました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問