Labo

EC-CUBE3 分室

【3.0.12-p1】URLから「user_data」を省く方法

2016年11月26日 / 投稿者名:chiharu


今回はちょっと意味のあるプラグインです。
 
EC-CUBE3 では固定ページの作成も少し面倒です。
実際には作成したいページ毎にプラグインで追加していく方法があります。
 ※ 新規ページをプラグインで作成する方法は後日紹介したいと思います。
 
但し、この方法ではサイト運用者が簡単に固定ページを追加することが出来ません。
サイト運用者に登録して頂く方法は管理画面からの方が望ましいのではないかと思います。
その場合、以下のページから新規ページの追加が可能になります。
 
「管理画面 > コンテンツ管理 > ページ管理」
 該当のページの一番下に「新規入力」と云うボタンが表示されています。
 ボタンをクリックすることで「新規ページ」の登録画面があります。
 
  ※
  ちなみに新規ページを作成する場合「twig」の文法に沿って書かないと
  ヘッダー部やフッター部などの共通部分が表示されない状態です。
  最初はだいぶ戸惑いました。 
  この辺りの仕様は EC-CUBE2系の方が簡単で良かった気がします・・・
 
 今回登録した内容は以下の通りです。

{% extends 'default_frame.twig' %}
{% set body_class = 'none_user_data' %}

{% block main %}
    <p>ここが新規作成したページ内容です。</p>
{% endblock %}

 
 
さて、このまま「ページ一覧」にて作成したページの「レイアウト編集」を確認してみると「プレビュー」ボタンがあります。
一度プレビューを試してみると作成したページが無事に表示されました。
・・・う~ん、内容は問題無いのですが「user_data」フォルダが含まれています。
 
実は、この「user_data」はEC-UCBE2系のころからあります。
サイト運営者からは「user_data」のフォルダは省略したいと云う要望を良く頂きました。
システム的には他に影響がない様にするため処理ですが、サイト運営者からはとても不評です(笑)
 
と云うことで「user_data」のフォルダ名を削除するプラグインです。
但し、既存のフォルダ名は使用しない様に注意して下さい。
 
 
■プラグインファイル
 config.yml
 PluginManager.php
 ServiceProvider/NakwebTest003ServiceProvider.php
 
 ▼config.yml

name: 新規ページ「user_data」削除
code: NakwebTest003
version: 0.0.1
service:
    - NakwebTest003ServiceProvider

 
 ▼PluginManager.php

<?php
/**
 * This file is part of EC-CUBE
 */

namespace Plugin\NakwebTest003;

use Eccube\Plugin\AbstractPluginManager;

class PluginManager extends AbstractPluginManager
{

    public function install($config, $app)
    {
    }

    public function uninstall($config, $app)
    {
    }

    public function enable($config, $app)
    {
    }

    public function disable($config, $app)
    {
    }

    public function update($config, $app)
    {
    }
}

 
 ▼ServiceProvider/NakwebTest003ServiceProvider.php
 ※ServiceProviderフォルダに保存しています。

<?php
/**
 * This file is part of EC-CUBE
 */

namespace Plugin\NakwebTest003\ServiceProvider;

use Eccube\Application;
use Eccube\Common\Constant;
use Eccube\Entity\Master\DeviceType;
use Eccube\Entity\PageLayout;
use Silex\Application as BaseApplication;
use Silex\ServiceProviderInterface;

class NakwebTest003ServiceProvider implements ServiceProviderInterface
{
    public function register(BaseApplication $app)
    {
        // 追加済みの新規ページの取得
        $PageLayout = $app['eccube.repository.page_layout']->findBy(array(
            'DeviceType' => DeviceType::DEVICE_TYPE_PC,
            'edit_flg' => PageLayout::EDIT_FLG_USER,
        ));

        // URLを配列化
        if (is_array($PageLayout)) {
            foreach ($PageLayout as $layout) {
                $newPages[] = $layout['url'];
            }
        }

        // URLからuser_dataを削除
        $app->match('/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '^('.implode('|', $newPages).')$')->bind('user_data');
    }

    public function boot(BaseApplication $app)
    {
    }
}

 
 
今回、「PluginManager.php」は相変わらず何もしていませんが「config.yml」に「service」を記載しています。
新しく、ServiceProvider を読み込むためです。
実際には「ServiceProvider/NakwebTest003ServiceProvider.php」の内容を読み込む設定をしています。
 
では、実際に「NakwebTest003ServiceProvider.php」で何をしているかです。
とりあえず、簡単に言うと「レイアウト編集」で追加したページと一致するページに関しては
URLに「user_data」を含めない状態にして表示させる、と云うことです。
 
ここで注意して頂きたいのは、「user_data」が含まれる本来のページにアクセスしてもエラーとなることです。
もちろん、プレビューも出来なくなります。
 
もう一つは、複数階層の想定をしていません。
 
すぐにわかる問題点はそんな感じでしょうか
まぁ、基本的に大丈夫でしょう(笑)
 
 
ご要望が多ければ幾つかの問題点を改善して正式にプラグインとしてもいいかなぁ、とも思いますが既に他社が出している気もします。
 ※
 他社が公開しているかは調べてはいません。
 必要があればご連絡下さい(笑)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。