質問 > フロント機能 > トップページに商品一覧を出したい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nic |
投稿日時: 2019/2/6 0:06
対応状況: 確認中
|
半人前 ![]() ![]() 登録日: 2017/4/17 居住地: 投稿: 17 |
トップページに商品一覧を出したい ▼テンプレート
[EC-CUBE] 3.0.17 [レンタルサーバ] Xサーバー [OS] Linux [PHP] 7.1.18 [データベース] MySQL 5.7.16 [WEBサーバ] Apache [現象] ・やりたいこと トップページに商品一覧を出す。ただそれだけ ------------------------- ・試したこと ①「FrontControllerProvider.php」に以下を追加 $c->match('/', '\Eccube\Controller\ProductController::index')->bind('product_list'); 商品一覧ページのコントローラをパスを変えて設置 ②「TopController.php」を編集 トップコントローラーに、 商品系のコントローラ「ProductController.php」の中身をコピペ detailメソッドは使わないと思って削除 ③「index.twig」を編集 「Product/list.twig」の中身をコピペ ・結果 エラーが発生し、管理者に連絡せよとのこと・・・。 ログを見るもアクセスログだけで、それらしいものは見当たらず 「index.twig」の方を少しいじって、 上部のページナビや検索部分や 下部の「{% if pagination.totalItemCount > 0 %}」部分を消して、 商品出力の「{% for Product in pagination %}」のループ部分だけにしたら 表示だけはできました・・・が 商品がありませんと出ました。 ------------------------- ・試したこと その② だったらと、ブロックを追加 ①管理画面からブロックを作成「Block/item_list.twig」 アドミンからDBのフラグもびんびんに立てました ②先ほどと同様に 「FrontControllerProvider.php」に以下を追加 $c->match('/block/item_list', '\Eccube\Controller\Block\Item_ListController::index')->bind('block_item_list'); ③今度は新規でコントローラを作成 名称は「Item_ListController.php」 中身は「ProductController.php」を丸コピペ ④ブロックの中身はまたまた 「Product/list.twig」の中身をコピペ ⑤管理画面のレイアウトからブロックを挿入 ・結果 今度は何もでない ------------------------- コントロールの設定に不備があるのでしょうか? 御教授いただければ幸いです。 |
468 |
投稿日時: 2019/2/6 13:40
対応状況: −−−
|
神 ![]() ![]() 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: トップページに商品一覧を出したい 大まかな流れですが、作業に問題は無いように思えます。
元の記述をコピーされていますので、クラス名が重複していたりするのではないでしょうか? エラーの原因を調べるのに、 デバッグモードで動かして、エラーを確認されるのが確実かと思います。
|
nic |
投稿日時: 2019/2/7 19:49
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2017/4/17 居住地: 投稿: 17 |
Re: トップページに商品一覧を出したい 御教授ありがとうございます。
デバックモードで確認したところ、以下のような表示が出ました。 An exception has been thrown during the rendering of a template ("The autoloader expected class "Eccube\Controller\Block\Item_ListController" to be defined in file "/home/XXX/●●.com/public_html/shop/vendor/composer/../../src/Eccube/Controller/Block/Item_ListController.php". The file was found but the class was not in it, the class name or namespace probably has a typo."). ↑ おそらく、「ファイルとの紐づけはされてるけど、クラスがない。クラス名や名前空間が間違ってない?」とのこと。 プロバイダ「FrontControllerProvider.php」で $c->match('/block/item_list', '\Eccube\Controller\Block\Item_ListController::index')->bind('block_item_list'); 指摘された「Item_ListController.php」では、「ProductController.php」に習って ファイル冒頭の名前空間とクラス名を以下のようにしています。 ---------------------------------------------------- namespace Eccube\Controller; use Eccube\Application; use Eccube\Common\Constant; use Eccube\Event\EccubeEvents; use Eccube\Event\EventArgs; use Eccube\Exception\CartException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class Item_ListController { private $title; public function __construct() { $this->title = ''; } public function index(Application $app, Request $request) { ---------------------------------------------------- クラス名や名前空間はあってるとは思うのですが? プロバイダ「FrontControllerProvider.php」部分で何か間違いでもあるのでしょうか? |
468 |
投稿日時: 2019/2/7 21:18
対応状況: −−−
|
神 ![]() ![]() 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: トップページに商品一覧を出したい Controller/Blockディレクトリにコントローラークラスを配置されているのであれば、
namespace Eccube\Controller\Block; という記述になるのではないかと思います。 多分、そこがエラーの原因ではないかと思います。
|
nic |
投稿日時: 2019/2/8 14:13
対応状況: 解決済
|
半人前 ![]() ![]() 登録日: 2017/4/17 居住地: 投稿: 17 |
Re: トップページに商品一覧を出したい ありがとうございました。
無事、解決しました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |