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

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

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

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

Symfony

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

EC-CUBE

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

Q&A

解決済

1回答

4842閲覧

EC-CUBE4 user_data/xxxでヘッダ部分、フッタ部分が表示されない

ma33

総合スコア10

PHP

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

Symfony

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

EC-CUBE

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

0グッド

0クリップ

投稿2018/12/11 03:59

前提・実現したいこと

EC-CUBE2で構築していたECサイトをEC-CUBE4に移行します。
EC-CUBE2でuser_data/test1.phpで実現していたページをEC-CUBE4でuser_data/test1で表示したいです。
ただし、既存test1.phpではDBアクセス等あり単純なページ表示というわけではありません。

src/Eccube/Controller/UserDataController.phpをapp/Customize/Controller/UserDataControllerにコピーしてtest1用のメソッドを追加しました。(将来的にはここにDBアクセスを呼んだりする予定です。)

user_data/test1にアクセスするとデフォルトのヘッダ部分やフッタ部分が表示されません。
ちなみにuser_data/test3という新規ページを作成しアクセスするとデフォルトのヘッダ部分やフッタ部分が表示されます。

user_data/test1にアクセスしてデフォルトのヘッダ部分やフッタ部分が表示できるようにするためにはどのような処理を追加すると良いのでしょうか?

発生している問題・エラーメッセージ

上記記述のとおりuser_data/test1にアクセスしてデフォルトのヘッダ部分、フッタ部分が表示されないのが問題です。

■user_data/test1
イメージ説明
■user_data/test3
イメージ説明
※デフォルトのヘッダ部分とは上図の「ECショップ」とか「新入荷」とかの部分です。
※デフォルトのフッタ部分とは上図の「当サイト」とか「EC4ショップ」とかの部分です。

該当のソースコード

■app/Customize/Controller/UserDataController

php

1class UserDataController extends AbstractController 2{ 3 : 4 : 5 /** 6 * @Route("/%eccube_user_data_route%/{route}", name="user_data_test1", requirements={"route": "test1(?<!/)"}) 7 */ 8 public function test1(Request $request, $route) 9 { 10 $Page = $this->pageRepository->findOneBy( 11 [ 12 'url' => $route, 13 'edit_type' => Page::EDIT_TYPE_USER, 14 ] 15 ); 16 17 if (null === $Page) { 18 throw new NotFoundHttpException(); 19 } 20 21 $file = sprintf('@user_data/%s.twig', $Page->getFileName()); 22 23 $event = new EventArgs( 24 [ 25 'Page' => $Page, 26 'file' => $file, 27 ], 28 $request 29 ); 30 $this->eventDispatcher->dispatch(EccubeEvents::FRONT_USER_DATA_INDEX_INITIALIZE, $event); 31 32 log_error('デバッグ:test1-file',[var_export($file,true)]); 33 return $this->render($file); 34 } 35 36 /** 37 * @Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+/?)+(?<!/)"}) 38 */ 39 public function index(Request $request, $route) 40 { 41 $Page = $this->pageRepository->findOneBy( 42 [ 43 'url' => $route, 44 'edit_type' => Page::EDIT_TYPE_USER, 45 ] 46 ); 47 48 if (null === $Page) { 49 throw new NotFoundHttpException(); 50 } 51 52 $file = sprintf('@user_data/%s.twig', $Page->getFileName()); 53 54 $event = new EventArgs( 55 [ 56 'Page' => $Page, 57 'file' => $file, 58 ], 59 $request 60 ); 61 $this->eventDispatcher->dispatch(EccubeEvents::FRONT_USER_DATA_INDEX_INITIALIZE, $event); 62 63 log_error('デバッグ:index-file',[$file]); 64 return $this->render($file); 65 } 66} 67

※src/Eccube/Controller/UserDataController.phpをコピーしてfunction test1()を追加しています。
※/user_data/test1はfunction test1()を通過し、/user_data/test3はfunction index()を通過しています。

■app/template/user_data/test1.twig

twig

1{% extends 'default_frame.twig' %} 2 3{% block main %} 4テスト 5 6 7{% endblock %}

■app/template/user_data/test3.twig

twig

1{% extends 'default_frame.twig' %} 2 3{% block main %} 4テスト3 5 6 7{% endblock %}

sql

1MariaDB [eccube4]> select id,page_name,url,file_name,edit_type from dtb_page where id between 46 and 47; 2+----+--------------+-------+-----------+-----------+ 3| id | page_name | url | file_name | edit_type | 4+----+--------------+-------+-----------+-----------+ 5| 46 | テスト1 | test1 | test1 | 0 | 6| 47 | テスト3 | test3 | test3 | 0 | 7+----+--------------+-------+-----------+-----------+ 82 rows in set (0.000 sec) 9 10MariaDB [eccube4]> select page_id,layout_id from dtb_page_layout where page_id between 46 and 47; 11+---------+-----------+ 12| page_id | layout_id | 13+---------+-----------+ 14| 46 | 2 | 15| 47 | 2 | 16+---------+-----------+ 172 rows in set (0.000 sec) 18 19MariaDB [eccube4]>

試したこと

app/Customize/Controller/UserDataControllerのtest1()を削除して/user_data/test1をapp/Customize/Controller/UserDataControllerのindex()を通過させるとデフォルトのヘッダ部分、フッタ部分が表示されます。
このことよりDB設定、twigには落ち度はないのかなぁと思っています。

補足情報(FW/ツールのバージョンなど)

PHP 7.1
EC-CUBE 4.0
MariaDB 10.3

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
■src/Eccube/EventListener/TwigInitializeListener.php

php

1 public function setFrontVariables(GetResponseEvent $event) 2 { 3 $request = $event->getRequest(); 4 /** @var \Symfony\Component\HttpFoundation\ParameterBag $attributes */ 5 $attributes = $request->attributes; 6 $route = $attributes->get('_route'); 7 if ($route == 'user_data') { 8 $routeParams = $attributes->get('_route_params', []); 9 $route = isset($routeParams['route']) ? $routeParams['route'] : $attributes->get('route', ''); 10 }

php

1 public function setFrontVariables(GetResponseEvent $event) 2 { 3 $request = $event->getRequest(); 4 /** @var \Symfony\Component\HttpFoundation\ParameterBag $attributes */ 5 $attributes = $request->attributes; 6 $route = $attributes->get('_route'); 7 if ($route == 'user_data' || $route == 'user_data_test1') { //■■■ ここでuser_dataの場合、何か特別な処理をやっているっぽい ■■■ 8 $routeParams = $attributes->get('_route_params', []); 9 $route = isset($routeParams['route']) ? $routeParams['route'] : $attributes->get('route', ''); 10 }

と変更するとデフォルトのヘッダ部とフッタ部が表示されるようになりました。

このプログラムはコアな部分なので変更を加えていけません。
なので/user_data/test1にオリジナルな処理を入れるのは諦めようと思います。
/sample/test1としてSamplePageControllerなどを作ろうと思います。

投稿2018/12/11 08:20

ma33

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問