EC-CUBEではページ管理で管理画面から自由にページを追加することができます。これは一般的にuser_dataページと呼ばれているもので、静的なページを作成するためのものです。
user_dataページの問題として、URLの設計を自由に決めにくく、検索条件によって変化するようなロジックを持たせた動的なページが作りにくいという問題があります。
この記事ではuser_dataを使わずURLを自由に決めることができて、動的なロジックを持たせることができるページを作る方法をご紹介します。(Controller付き)
下記のような条件で追加していきます。
URL | /new_page |
ルート名 | new_page_route_name |
テンプレート | new_page.twig |
ページ名 | 追加する新規ページ |
1. Controller追加
新規ファイル:app/Customize/Controller/NewPageController.php
<?php
/*
* This file is part of EC-CUBE
*
* Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
*
* http://www.ec-cube.co.jp/
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Customize\Controller;
use Eccube\Controller\AbstractController;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Routing\Annotation\Route;
class NewPageController extends AbstractController
{
/**
* @Route("/new_page", name="new_page_route_name", methods={"GET"})
* @Template("new_page.twig")
*/
public function index()
{
return [];
}
}
2. twigテンプレート追加
新規ファイル:app/template/default(テンプレートコード)/new_page.twig
testとだけ表示する簡単なテンプレートになっています。
{#
This file is part of EC-CUBE
Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
http://www.ec-cube.co.jp/
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
#}
{% extends 'default_frame.twig' %}
{% set body_class = 'front_page' %}
{% block stylesheet %}
{% endblock %}
{% block javascript %}
{% endblock javascript %}
{% block main %}
test
{% endblock %}
3. データベースにレコード追加
SQLを直接実行してページ管理にページを追加します。サーバーのコントロールパネルに用意されているphpMyAdminなどを使って次の2つのSQLを実行してください。
実行後、dtb_pageとdtb_page_layoutというテーブルにレコードが追加され、ページ管理に「追加する新規ページ
」というページが追加されていることを確認してください。
INSERT INTO dtb_page (master_page_id, page_name, url, file_name, edit_type, create_date, update_date, meta_robots, discriminator_type)
VALUES(null, '追加する新規ページ', 'new_page_route_name', 'new_page', 1, NOW(), NOW(), '', 'page');
INSERT INTO dtb_page_layout (page_id, layout_id, sort_no, discriminator_type)
VALUES(
(SELECT id FROM dtb_page WHERE url = 'new_page_route_name'),
2, /* 下層ページレイアウト */
1, /* sort_noは特に重要な用途はないので最大値でなく1でもよいはず */
'pagelayout'
);
以上で/new_pageというURLへアクセスすることができます。EC-CUBEでは自分で新規ページを追加してカスタマイズしていくことが基本手ですのでぜひ試してみてください。
場合によっては最後にキャッシュ管理でキャッシュを削除する必要があります。
注意事項
※この記事はページ管理で追加したページ(user_dataページ)のURLからuser_dataという文字を取り除くためのものではありません。user_dataとは別の方法でページを追加するための記事です。
下記の記事でもふれていますが、user_dataページのURLからuser_dataを取り除くことはEC-CUBEの基本的な設計に反しているためおすすめしていません。
参考:新規作成ページのURLに入る/user_data/を変更する方法
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。