【EC-CUBE】新規ページ追加方法 user_dataを省く 方法
【EC-CUBE】新規ページ追加方法 user_dataを省く
[ec-cube] ページ詳細設定から追加した新規ページのURLの「/user_data/」を排除する
EC-CUBE URL変更 EC-CUBE 新規に独自ページを追加 方法 ページ詳細設定 EC-CUBEのデフォルトは動的URLで作成されます,これを静的URLに変更してSEO 対策します。
【EC-CUBE2.12.0】新規ページ追加方法 user_dataを省く EC-CUBEで新規ページを作成する時、普通の場合だと管理画面から
「デザイン管理」>「PC」>「ページ詳細設定」
を選んで新しくページ(tpl)を作成します。
が、この方法で作成されたページはすべて「/user_data/」フォルダ直下に置かれURLがあまりかっこよくない感じになってしまいます。
なので今回はhttp://xxx.com/test/というURLになるようにする方法を紹介します。
手順
1:管理画面からページを新規追加
2:データベース(dtb_pagelayout)を修正
3:新規追加したページのファイルをFTPで移動
以上の3STEPでできます。超簡単です。
FTPで元からある「order」とかのファイルを見てみると「/data/class/pages/order/LC_Page_Order.php」みたいなPHPファイルを足さないといけないように見えますが別に必要ないっぽいです。
はじめにも言いましたが今回は例としてtestという新規ページを作るという前提でお話していきます。
1:管理画面からページを新規追加
まずは普通にページを新規追加します。
「デザイン管理」>「PC」>「ページ詳細設定」
から行なってください。
この時点ではファイルはデフォルトの通り「user_data」の下に作成されますが、それでOKです。
ヘッダーとフッターを共通~のチェックボックス入れるのをお忘れなく・・
2:データベース(dtb_pagelayout)を修正
次にデータベースを手動で修正します。
僕の場合はphpmyadminなのでそれを例にしていきます。
まずはサーバー管理画面からデータベース管理画面に行きます。
で左サイドバーから「dtb_pagelayout」というテーブルを探してクリック。
右側にいろいろとすでに入っているデータがでてきますね。その中から先ほど管理画面から作成したデータを見つけ出してください。
おそらく「user_data/test.php」という感じになっていると思います。
見つけたら「編集」をクリック!
以下のように3箇所を編集します。
・「/user_data/test.php」から「/test/index.php」に修正
・filenameの項目を「user_data/test」から「test/index」に修正
・update_urlの項目を「Null」(空白)に修正
(チェックボックスにチェックを入れてもOK)
例(クリックで拡大)
3:新規追加したページのファイルをFTPで移動
さきほどデータベースに設定した情報に合わせるようにFTPを使って作成されたファイルを移動します。
移動させるファイルは2つです。
/user_data/test.phpを
/test/index.phpに移動
/data/Smarty/templates/default/user_data/test.tplを
/data/Smarty/templates/default/test/index.tplに移動
もちろん必要に応じてディレクトリは新規作成してください。
以上で作業は完了です。
http://xxx.com/test/にアクセスしてきちんと表示されていればOKです。
うまく表示されないときはもう一度移動した場所とDBの変更がきちんとされてるかを確認してくださいね(・∀・)
※注意事項
・レイアウト設定は管理画面から、内容の編集はFTPから行なってください。
(内容の編集を管理画面からすると表示されなくなります。)
URLを設計する際の推奨ポイント SEO
URLを永続化させるためには、設計時から長く使えて検索エンジンが好むURLを設計しておくことが重要です。以下にポイントをまとめておきますので、設計時の参考にしてください。
URLに使用していい推奨記号は、「-(ハイフン)」と「_(アンダースコア)」
URLはすべて小文字にする
URLの長さはなるべく短くしつつ、可能であればURL中にキーワードを含める
ディレクトリの階層はなるべく浅くする
永続性さえ確保できれば、日本語URLも効果がある
番外. URLは拡張子ではなく、「/」で終える
EC-CUBE 2.13://URL [ec-cube] ページ詳細設定から追加した新規ページのURLの「/user_data/」を排除する
EC-CUBEの管理画面『デザイン管理 > PC > ページ詳細設定』で新規追加したページのURLを.htaccessで操作する。
1.「/user_data/」ディレクトリ排除
URLの「/user_data/」ディレクトリを排除するだけなら
.htaccessの記述
結果例
http://○○○○.co.jp/user_data/test.php
↓
http://○○○○.co.jp/test.php
2.任意のディレクトリ直下にあるように見せかける
URLの「/user_data/」ディレクトリを排除しつつ拡張子.phpを「/」に変えて、
任意のディレクトリ直下にある様に見せかける
.htaccessの記述
1 | RewriteEngine on |
2 | RewriteCond %{REQUEST_FILENAME} !-f |
3 | RewriteCond %{REQUEST_FILENAME} !-d |
4 | RewriteRule ^([a-z0-9\-\_\.]+)/ user_data/$1.php [L] |
結果例
http://○○○○.co.jp/user_data/test.php
↓
http://○○○○.co.jp/test/
ご注意
任意のディレクトリ直下にある様に見せかける場合には、
/products/、/cart/ 、/contact/ 、/abouts/、/order/、/guide/ 、/admin/ 等、
あらかじめ予約されているディレクトリ名は使わない様にしましょう。
また、正規表現で『 [a-z0-9-_.] 』としていますが、
これはファイル名に「半角英数字」の他に「ハイフン(-)」「アンダーバー(_)」「ドット(.)」も認識する、
という事を意味しています。
EC-CUBE 2.12 で新規ページを任意で作成
では、aboutsというページを参考に表示までの流れを追ってみます。
サイトURL/html/abouts/index.php
↓
data/class_extends/page_extends/abouts/LC_Page_Abouts_Ex.php
↓
data/class/pages/abouts/LC_Page_Abouts.php
↓
data/class_extends/page_extends/LC_Page_Ex.php
↓
data/class/pages/LC_Page.php
http://サイトURL/abouts/にアクセスすると、
data/class_extends/page_extends/abouts/LC_Page_Abouts_Ex.phpをrequireし、LC_Page_Abouts_Exクラスを呼び出します。
LC_Page_Abouts_Ex.phpは特に何もしておらず、親クラスLC_Page_Aboutsのinit(),process(),destroy()を実行しています。
以下はdata/class/pages/abouts/LC_Page_Abouts.phpの中身
<?php
/*
- This file is part of EC-CUBE
*
- Copyright© 2000-2012 LOCKON CO.,LTD. All Rights Reserved.
*
*
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
*
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// {{{ requires
require_once CLASS_EX_REALDIR . ‘page_extends/LC_Page_Ex.php’;
/**
- サイト概要のページクラス.
*
@package Page
@author LOCKON CO.,LTD.
@version $id:LC_Page_Abouts.php 15532 2007-08-31 14:39:46Z nanasess $
*/
class LC_Page_Abouts extends LC_Page_Ex {
// }}}
// {{{ functions
/**
- Page を初期化する.
*
- @return void
*/
function init() {
parent::init();
$this->tpl_page_category = ‘abouts’;
$this->tpl_title = ‘当サイトについて’;
$masterData = new SC_DB_MasterData_Ex();
$this->arrPref = $masterData->getMasterData(‘mtb_pref’);
}
/**
- Page のプロセス.
*
- @return void
*/
function process() {
parent::process();
$this->action();
$this->sendResponse();
}
/**
- Page のアクション.
*
- @return void
*/
function action() {
$this->objSiteInfo->data = SC_Helper_DB_Ex::sfGetBasisData();
$this->objSiteInfo->data[‘pref’] =
isset($this->arrPref[$this->objSiteInfo->data[‘pref’]])
? $this->arrPref[$this->objSiteInfo->data[‘pref’]] : ‘’;
}
/**
- デストラクタ.
*
- @return void
*/
function destroy() {
parent::destroy();
}
}
init()の中でテンプレートの定義をしていますね。
ここを任意に変える必要があるみたいです。
※これだけではテンプレートファイルに行き着かずエラーを吐き出していたので
ここにさらにテンプレートファイルの指定をする必要がありました。
$this->tpl_mainpage = ‘任意のフォルダ名/index.tpl’;
ファイルを作成する。
流れがわかったところで作成するファイルが見えてきましたね。
サイトURL/html/任意の名前/index.php
data/class_extends/page_extends/任意の名前/LC_Page任意の名前Ex.php
data/class/pages/任意の名前/LC_Page_任意の名前.php
data/class_extends/page_extends/LC_Page_Ex.php
data/class/pages/LC_Page.php
data/Smarty/templates/任意のテンプレート/任意の名前/index.tpl
classのファイル名は先頭大文字でもちろんclass名も同じように変えてやればおkです。
余談ですが、先頭大文字ならアンダースコアを省いてキャメル型にしたくなりますね。
管理画面から編集する
「ページも追加できてwktkしてページ編集画面行ったらさっき追加したページが一覧にないではないか。」
という方はDBのdtb_pagelayoutというテーブルに追加してやれば表示される。
INSERT INTO DB名
.dtb_pagelayout
(
device_type_id
,
page_id
,
page_name
,
url
,
filename
,
header_chk
,
footer_chk
,
edit_flg
,
author
,
description
,
keyword
,
update_url
,
create_date
,
update_date
)
VALUES (
‘10’, ‘新規ページID’, ‘ページタイトル’, ‘任意の名前/index.php’, ‘任意の名前/index’, ‘1’, ‘1’, ‘2’, NULL , NULL , NULL , NULL ,
CURRENT_TIMESTAMP , ‘0000-00-00 00:00:00’
);
こんな感じでいけた。