EC-CUBE3でページ管理から画面作成時にURLからuser_dataを無くす方法
EC-CUBE3にあるページ管理より新しいページを作成した場合、URLには必ずuser_data
が含まれます。
http://hogehoge/user_data/hoge
というようになります。
user_dataは別にあっても問題はありませんが、中には無くしてしまいたいという方もいると思います。以下のカスタマイズを行うことで実現可能となります。
EC-CUBE3.0.14を対象に説明します。
まず、FrontControllerProviderにあるuser_dataを定義しているルーティングの箇所をコメントアウトします。
// user定義 // $c->match('/'.$app['config']['user_data_route'].'/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '([0-9a-zA-Z_\-]+\/?)+(?<!\/)')->bind('user_data');
ページ作成時にuser_dataの定義がなくても動作するように、PageControllerとPageLayoutRepositoryを修正します。
- src/Eccube/Controller/Admin/Content/PageController.php
・120行目 // ファイル生成・更新 $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath($editable); ↓ $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath(false); ・156行目 $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath($editable); ↓ $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath(false); ・187行目 $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath(true); ↓ $templatePath = $app['eccube.repository.page_layout']->getWriteTemplatePath(false);
というようにそれぞれ$app['eccube.repository.page_layout']->getWriteTemplatePath(false);
と変更します。
- src/Eccube/Repository/PageLayoutRepository.php
public function getReadTemplateFile($fileName, $isUser = false) { if ($isUser) { $readPaths = array( $this->app['config']['user_data_realdir'], ); } else { $readPaths = array( $this->app['config']['template_realdir'], $this->app['config']['template_default_realdir'], ); } ・ ・ ・
と記述されている箇所を
public function getReadTemplateFile($fileName, $isUser = false) { if ($isUser) { $readPaths = array( $this->app['config']['template_realdir'], $this->app['config']['user_data_realdir'], ); } else { $readPaths = array( $this->app['config']['template_realdir'], $this->app['config']['template_default_realdir'], ); } ・ ・ ・
と$this->app['config']['template_realdir'],
を263行目に追加します。
また、管理画面でのURL表記を変更するため、page_edit.twigも修正します。
- app/template/admin/Content/page_edit.twig
・59行目 {{ url('top') }}{{ app.config.user_data_route }}/{{ form_widget(form.url) }} ↓ {{ url('homepage') }}{{ form_widget(form.url) }}
こちらはuser_dataを表示上からなくしているだけです。
ここまで対応すればほぼ完了なのですが、FrontControllerProviderからuser_dataへルーティング定義を削除してしまったため、新たに定義してあげる必要があります。どこに定義するのかというと、index.phpで定義してあげます。
- html/index.php
// インストールされてなければインストーラにリダイレクト if (isset($app['config']['eccube_install']) && $app['config']['eccube_install']) { $app->initialize(); $app->initializePlugin(); if ($app['config']['http_cache']['enabled']) { $app['http_cache']->run(); } else { $app->run(); } } else { ・ ・ ・
と記載されている箇所を
// インストールされてなければインストーラにリダイレクト if (isset($app['config']['eccube_install']) && $app['config']['eccube_install']) { $app->initialize(); $app->initializePlugin(); // ページレイアウトのカスタマイズに伴う修正 $front = $app['controllers_factory']; // 強制SSL if ($app['config']['force_ssl'] == \Eccube\Common\Constant::ENABLED) { $front->requireHttps(); } $front->match('/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '([0-9a-zA-Z_\-]+\/?)+(?<!\/)')->bind('user_data'); $app->mount('', $front); if ($app['config']['http_cache']['enabled']) { $app['http_cache']->run(); } else { $app->run(); } } else { ・ ・ ・
というように新たにuser_data用のルーティング定義を行います。
以上の作業を行うことで、ページ管理から新たなページを作成した場合、URLにはuser_data
はなくなります。
必要な方には必要なカスタマイズだと思いますので、user_dataをURLから無くしてしまいたい!という方は是非ご利用ください。