EC-CUBE4でページ管理から画面作成時にURLからuser_dataを無くす方法
EC-CUBE Advent Calendar 2018 18日目の記事です。
EC-CUBE4にあるページ管理より新しいページを作成した場合、URLには必ずuser_data
が含まれます。
http://example.com/user_data/hoge
というようになります。
user_dataは別にあっても問題はありませんが、今までカスタマイズしてきた要望の一つとしてuser_dataを無くしたいという方もいました。 そこでこのuser_dataをなくす方法を説明します。
EC-CUBE4.0.1を対象にします。
EC-CUBE4からはEC-CUBE3と異なり、URL定義はアノテーションへと変更されました。そのため、対象となるアノテーションを変更します。
まず、UserDataControllerにあるuser_dataを定義しているルーティングの箇所を変更します。
- src/Eccube/Controller/UserDataController.php
/** * @Route("/%eccube_user_data_route%/{route}", name="user_data", requirements={"route": "([0-9a-zA-Z_\-]+\/?)+(?<!\/)"}) */
から
/** * @Route("/{route}", name="user_data", requirements={"route": "^(?=([0-9a-zA-Z_\-]+\/?)+(?<!\/))(?!logout|%eccube_admin_route%/logout|install).*$"}) */
と %eccube_user_data_route%
を無くし、ログアウトも除外できるように追加します。
また、管理画面でのURL表記を変更するため、page_edit.twigも修正します。
- Resource/template/admin/Content/page_edit.twig
・91行目 {{ url('homepage') }}{{ eccube_config.eccube_user_data_route }}/ ↓ {{ url('homepage') }}
こちらはuser_dataを表示上からなくしているだけです。
以上の作業を行うことで、ページ管理から新たなページを作成した場合、URLからuser_data
はなくなります。
[追記] もう一箇所修正する箇所がありました。プラグイン利用時にプラグイン側でルーティングの定義をされていた場合、 先にUserDataControllerが参照されてしまい正常に動作しません。
そのため、Kernel.phpにあるconfigureRoutes関数の内容を一部変更します。
- src/Eccube/Kernel.php
// 有効なプラグインのルーティングをインポートする. $plugins = $container->getParameter('eccube.plugins.enabled'); $pluginDir = $this->getProjectDir().'/app/Plugin'; foreach ($plugins as $plugin) { $dir = $pluginDir.'/'.$plugin.'/Controller'; if (file_exists($dir)) { $builder = $routes->import($dir, '/', 'annotation'); $builder->setSchemes($scheme); } }
と記述されている箇所を152行目に移動させて以下の様にします。
- src/Eccube/Kernel.phpのconfigureRoutes変更後
protected function configureRoutes(RouteCollectionBuilder $routes) { $container = $this->getContainer(); $scheme = ['https', 'http']; $forceSSL = $container->getParameter('eccube_force_ssl'); if ($forceSSL) { $scheme = 'https'; } $routes->setSchemes($scheme); $confDir = $this->getProjectDir().'/app/config/eccube'; if (is_dir($confDir.'/routes/')) { $builder = $routes->import($confDir.'/routes/*'.self::CONFIG_EXTS, '/', 'glob'); $builder->setSchemes($scheme); } if (is_dir($confDir.'/routes/'.$this->environment)) { $builder = $routes->import($confDir.'/routes/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob'); $builder->setSchemes($scheme); } // 有効なプラグインのルーティングをインポートする. $plugins = $container->getParameter('eccube.plugins.enabled'); $pluginDir = $this->getProjectDir().'/app/Plugin'; foreach ($plugins as $plugin) { $dir = $pluginDir.'/'.$plugin.'/Controller'; if (file_exists($dir)) { $builder = $routes->import($dir, '/', 'annotation'); $builder->setSchemes($scheme); } } $builder = $routes->import($confDir.'/routes'.self::CONFIG_EXTS, '/', 'glob'); $builder->setSchemes($scheme); $builder = $routes->import($confDir.'/routes_'.$this->environment.self::CONFIG_EXTS, '/', 'glob'); $builder->setSchemes($scheme); }
上記のようにルーティングの読み出す順序を変更することで対応可能です。
EC-CUBE3の時は色々とめんどくさいことをしなければいけませんでしたが、EC-CUBE4では簡単にできます。
上記対応を行っても反映されないなどがあれば、[ECCUBEROOT]/var/cache ディレクトリを削除してからお試しください。
必要な方には必要なカスタマイズだと思いますので、user_dataをURLから無くしてしまいたい!という方は是非ご利用ください。