タグ: プラグイン
【EC-CUBE】各種設定
基本的には、管理画面のシステム設定内、パラメータ設定で、値を変えればよい。
パラメータ設定で変わらないとき、該当するファイルは、
/data/mtb_constants_init.php
/data/cache/mtb_constants.php (キャッシュファイル)
を修正すればOK。さらに、phpMyAdminでDBの、mtb_constantsテーブルを探し、該当するフィールドを直接編集すればOK。
- メルマガの配信予約をしたいときは、この中の値、MELMAGA_BATCH_MODEをtrureに設定すると配信設定が日時予約画面に変わる。(cronが必要)
- 仮会員登録制にする場合は、CUSTOMER_CONFIRM_MAILをtrueに設定する。
- カスタマイズ中にエラーの原因を特定したいときは、DEBUG_MODEをtrueにすると、エラーメッセージが表示される。
【EC-CUBE】パンくずリストの実装
VER.2.3RC1の場合。
1)/data/class_extends/helper_extends/SC_Helper_DB_Ex.php の編集。
「class SC_Helper_DB_Ex extends SC_Helper_DB」の中にコードを仕込む。
37行目(”{“と”}”の間)に以下を追加。
function sfGetTopicPath($category_id){
// 商品が属するカテゴリIDを縦に取得
$objQuery = new SC_Query();
$arrCatID = $this->sfGetParents($objQuery, “dtb_category”, “parent_category_id”, “category_id”, $category_id);
$TopicPath = ” > “;// カテゴリー名称を取得する
foreach($arrCatID as $key => $val){
$sql = “SELECT category_name FROM dtb_category WHERE category_id = ?”;
$arrVal = array($val);
$CatName = $objQuery->getOne($sql,$arrVal);
if( $val != $category_id){
$TopicPath .= ‘‘ . $CatName . ‘ > ‘;
}else{
$TopicPath .= $CatName;
}
}return $TopicPath;
}
function sfGetTopicPath2($category_id){
// 商品が属するカテゴリIDを縦に取得
$objQuery = new SC_Query();
$arrCatID = $this->sfGetParents($objQuery, “dtb_category”, “parent_category_id”, “category_id”, $category_id);
$TopicPath = ” > “;// カテゴリー名称を取得する
foreach($arrCatID as $key => $val){
$sql = “SELECT category_name FROM dtb_category WHERE category_id = ?”;
$arrVal = array($val);
$CatName = $objQuery->getOne($sql,$arrVal);
$TopicPath .= ‘‘ . $CatName . ‘ > ‘;
}
return $TopicPath;
}
2)/data/class/pages/products/LC_Page_Products_List.php の編集。 (L112に2行追加。)
// タイトル編集
$tpl_subtitle = “”;
if ($_GET[‘mode’] == ‘search’) {
$tpl_subtitle = “検索結果”;
} elseif (empty($arrCategory_id[0])) {
$tpl_subtitle = “全商品”;
} else {
$arrFirstCat = $objDb->sfGetFirstCat($arrCategory_id[0]);
$tpl_subtitle = $arrFirstCat[‘name’];
$TopicPath = $objDb->sfGetTopicPath($arrCategory_id[0]); ←追加
$this->tpl_topicpath = $TopicPath; ←追加
}
3)/data/class/pages/products/LC_Page_Products_Detail.php の編集。 (L229に2行追加。)
// サブタイトルを取得
$arrCategory_id = $objDb->sfGetCategoryId($arrRet[0][‘product_id’], $status);
$arrFirstCat = $objDb->sfGetFirstCat($arrCategory_id[0]);
$this->tpl_subtitle = $arrFirstCat[‘name’];$arrTopicPath = $objDb->sfGetTopicPath2($arrCategory_id[0]); ←追加
$this->tpl_topicpath = $arrTopicPath; ←追加// 関連カテゴリを取得
$this->arrRelativeCat = $objDb->sfGetMultiCatTree($tmp_id);
4)パンくずリスト用新規ブロックの追加。
デザイン管理→ブロック編集 で新規ブロックをつくり、下記コードを適当な名前で保存。(ブロック名:「パンくずリスト」、ファイル名:「topicpath」で保存。でも、分かれば、なんでもいい。)
<!–{if $tpl_topicpath != “”}–>
<a href=”<!–{$smarty.const.SITE_URL}–>index.php”>TopPage</a>
<!–{$tpl_topicpath}–>
<!–{$arrProduct.name|escape}–>
<!–{/if}–>
デザイン管理→レイアウト編集 にパンくずリストのブロックが出来ているので、パンくずリストを実装したいページ(一覧ページや詳細ページ)の該当箇所にパンくずリストのブロックを設定すればOK。
参考:http://www.gnnk.net/20080113050103/
注意! 「カテゴリの説明やビジュアルを追加する」とアタる!
下記のやり方で、LC_Page_Products_List_Ex.phpを使用する場合、こちらのパンくず実装を先にやるか、LC_Page_Products_List_Ex.phpで実装しないと、マージされないので注意!すること。
http://www.eccube-school.jp/products/detail43.html
http://www.bton.net46.net/?p=313 (←こっちのほうは、_EXを使ってないので、同じファイルを上書きすることになるから問題ない。でも、本来は、_EXを使ったほうがいいので、_EXのファイルのほうで、パンくずを実装するってほうがいいのかも。メモメモ。)
【EC-CUBE】SEO対策。メタの記載内容を個別ページごとに入れ替える。
EC-CUBEでは、METAタグは、基本設定で一括して決められてしまう(現状仕様)が、商品の個別ページなどは、その商品向けにそれぞれ別途登録したいことも多い。
んで、個別のキーワードやディスクリプションを設定できるようにカスタマイズする。
1)/data/Smarty/templates/site_frame.tpl の<title>タグと、<description>タグと、<keyword>タグを置き換える。
- トップページ
<title>ショップ名 | 基本設定:SEO管理で入力したトップページ用description</title>
<description>基本設定:SEO管理で入力したトップページ用description</description>
<keyword>基本設定:SEO管理で入力したトップページ用keyword</keyword> - 商品一覧ページ(カテゴリ未選択時)
<title>基本設定:SEO管理で入力した商品一覧用description | ショップ名</title>
<description>基本設定:SEO管理で入力した商品一覧用description</description>
<keyword>基本設定:SEO管理で入力した商品一覧用keyword</keyword> - 商品一覧ページ(カテゴリ選択時)
<title>カテゴリ名 | ショップ名</title>
<description>基本設定:SEO管理で入力した商品一覧ページ用description</description>
<keyword>基本設定:SEO管理で入力した商品一覧ページ用keyword</keyword> - 商品詳細ページ
<title>商品名 | ショップ名</title>
<description>商品登録の「一覧-メインコメント」 </description>
<keyword>商品登録の「検索ワード」 </keyword> - その他
<title>ページ名 | ショップ名</title>
<description>基本設定:SEO管理で入力したdescription</description>
<keyword>基本設定:SEO管理で入力したkeyword</keyword>
「/data/Smarty/templates/site_frame.tpl」をFTPでダウンロードし、編集。
<title>、<meta name=”description”~ 、<meta name=”keywords”~ の3項目を削除。<meta name=”author” のみ残す。(ver.2.3rc1の場合、34行目あたりから)
<title><!–{$arrSiteInfo.shop_name|escape}–>/<!–{$tpl_title|escape}–></title> ←削除
<meta name=”author” content=”<!–{$arrPageLayout.author|escape}–>” />
<meta name=”description” content=”<!–{$arrPageLayout.description|escape}–>” /> ←削除
<meta name=”keywords” content=”<!–{$arrPageLayout.keyword|escape}–>” /> ←削除
TITLEタグを削除した場所に、下記のコードを追加。
<!–{assign var=top value=”`$smarty.const.URL_DIR`index.php”}–>
<!–{assign var=list value=”`$smarty.const.URL_DIR`products/list.php”}–>
<!–{assign var=detail value=”`$smarty.const.URL_DIR`products/detail.php”}–><!–{if $smarty.server.PHP_SELF==$top}–>
<!–トップページ–>
<title><!–{$arrSiteInfo.shop_name}–> | <!–{$arrPageLayout.description|escape}–></title>
<meta name=”description” content=”<!–{$arrPageLayout.description|escape}–>” />
<meta name=”keywords” content=”<!–{$arrPageLayout.keyword|escape}–>” /><!–{elseif $smarty.server.PHP_SELF==$list}–>
<!–商品一覧ページ–>
<!–{if $tpl_subtitle != “全商品”}–>
<title><!–{$tpl_subtitle}–> | <!–{$arrSiteInfo.shop_name}–></title>
<!–{else}–>
<title><!–{$arrPageLayout.description|escape}–> | <!–{$arrSiteInfo.shop_name}–></title>
<!–{/if}–>
<meta name=”description” content=”<!–{$arrPageLayout.description|escape}–>” />
<meta name=”keywords” content=”<!–{$arrPageLayout.keyword|escape}–>” /><!–{elseif $smarty.server.PHP_SELF==$detail}–>
<!–商品詳細ページ–>
<title><!–{$tpl_title|escape}–> | <!–{$arrSiteInfo.shop_name}–></title>
<meta name=”description” content=”<!–{$arrProduct.main_list_comment|escape|regex_replace:”/[\r\t\n]/”:””}–>” />
<meta name=”keywords” content=”<!–{if $arrProduct.comment3}–><!–{$arrProduct.comment3|escape|regex_replace:”/[\r\t\n]/”:””|regex_replace:”/、/”:”,”}–>
<!–{/if}–>” /><!–{else}–>
<!–その他の場合–>
<title><!–{$tpl_title|escape}–> | <!–{$arrSiteInfo.shop_name}–></title>
<meta name=”description” content=”<!–{$arrPageLayout.description|escape}–>” />
<meta name=”keywords” content=”<!–{$arrPageLayout.keyword|escape}–>” />
<!–{/if}–>
2)/data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.phpを修正する。
“vw_products_allclass_detail” に main_list_commentを追記(mySQLの場合)。
PostgreSQLの場合は、データベースに記録されるようなので、データベース上でフィールドを追加する。
(ver.2.3rc1の場合、438行目あたりから)
“vw_products_allclass_detail” => ‘
(SELECT product_id,price01_min,price01_max,price02_min,price02_max, stock_min,stock_max,stock_unlimited_min,stock_unlimited_max,del_flg, status,name,comment1,comment2,comment3,main_list_comment,deliv_fee, main_comment,main_image,main_large_image, sub_title1,sub_comment1, sub_image1,sub_large_image1,以下省略・・・(※「,」の後ろで半角スペースが入っているところは、実際は入れなくていい。ブログの表示用に便宜上いれてるだけ。)
これで、管理画面の基本情報のなかのSEO設定に入力した、全ページ共通のMETAやタイトルだけではなく、個別の商品情報の中で設定した検索用のキーワードや一覧用の商品説明も、各ページのMETA情報として追加されるようになった。
表示される内容を変えたい場合は、「/data/Smarty/templates/site_frame.tpl」のなかで、表示したい変数を埋め込むようにすればOK。
さらに、2.3バージョンでは、GOOGLE SITEMAP用にサイトマップを書き出せるようになっているので、こちらのサイトマップのURLも静的HTMLで書き出されるように編集しておく。
/data/class/pages/LC_Page_Sitemap.php
$page = array(“url” => SITE_URL . sprintf(“%sproducts/list.php?category_id=%d”, $mobile, $result[$i][‘category_id’]));
これを↓↓↓このように編集。(Ver.2.3Rc1の場合、240行目あたり)
$page = array(“url” => SITE_URL . sprintf(“%sproducts/list%d.html”, $mobile, $result[$i][‘category_id’]));
さらに、
$page = array(“url” => SITE_URL. sprintf(“%sproducts/detail.php?product_id=%d”, $mobile, $result[$i][‘product_id’]),
これを↓↓↓このように編集。(Ver.2.3Rc1の場合、264行目あたり)
$page = array(“url” => SITE_URL. sprintf(“%sproducts/detail%d.html”, $mobile, $result[$i][‘product_id’]),
【EC-CUBE】ページのURLを静的HTMLで表示するには。
SEOに有効な静的HTML表示にPHPページのURLを変換する。
1)/products/以下に「.htaccess」ファイルを設定する。
mod_rerwiteを利用するので、「.htaccess」ファイルに、下記のように記述して、FTPで/productsディレクトリにアップロードする。
RewriteBase /products ←これは、要らないサーバもある。
RewriteEngine on
RewriteRule ^detail([0-9]+).html+ products/detail.php?product_id=$1 [L]
RewriteRule ^list([0-9]+).html+ products/list.php?category_id=$1 [L]
http://www.ドメイン/products/detail.php?product_id=○○
というURLを
http://www.ドメイン/products/detail○○.html
と変換して、どちらのURLでアクセスしても、同じページが表示されるようにすることになる。
変換されるほうのURLの表示を変えたいときは、RewriteRuleの表記を変えればOK。
例えば、
RewriteRule detail\/([0-9]+)\/? products/detail.php?product_id=$1[L]
とすれば、「products/detail/○○」となる。
この時点で、
http://www.ドメイン/products/detail○○.html
でアクセスできていれば、ここまでの設定はOK。
もし、アクセスできなければ、サーバの設定を確認するなどで、対応。
2)EC-CUBEの管理画面で、システム管理メニューからパラメータを変更する。
半分より下あたりに「DETAIL_P_HTML」という文字列があるので探す。検索したほうが早い;
「DETAIL_P_HTML」の初期値で入っている、
『URL_DIR . “products/detail.php?product_id=”』 を
『URL_DIR . “products/detail”』 に書き換える。
3)テンプレ変更
/data/Smarty/templates/default/list.tpl
/data/Smarty/templates/default/bloc/best5.tpl
/data/Smarty/templates/default/bloc/category.tpl
/data/Smarty/templates/default/mypage/history.tpl
を変更するけれど、管理画面から変更できるので、確認しながらやるべし。
ローカルでファイルを修正してFTPでアップロードする場合は、アップロードしてから、デザイン管理→テンプレート設定の画面で、「この内容で登録する」ボタンをクリックして、テンプレを適用させること。(FTPアップロードしただけでは反映されない)
該当する「/products/detail.php?product_id=」の部分を、「details」に変え、その変数の後ろに「.html」を挿入し。DETAIL_P_HTMLが入っているところも同じように変更。さらに、「/products/list.php?category_id=」も。検索しながら良く見て変更すること。
デザイン管理→ページ詳細設定→「商品一覧ページ」を選択してコードを表示させ、修正。
DETAIL_P_HTMLのある場所を検索して、その後ろの変数の後に、「.html」を追加。3箇所ある。(ver.2.3rc1の場合、L97,L117,L130)
終わったら、「商品詳細ページ」も同様に修正。4箇所ある。(同じく、L324,L330,L349,L359)
<a href=”<!–{$smarty.const.DETAIL_P_HTML}–><!–{$arrProducts[cnt].product_id}–>.html“ ←追加。
「MYページ」はなぜか管理画面から変更できないので、後で直接ファイルを変更してFTPで上げる。
/data/Smarty/templates/default/mypage/history.php
(ver.2.3rc1の場合、L53)
<td><a href=”<!–{$smarty.const.URL_DIR}–>products/detail.php?product_id=<!–{$arrDisp.product_id[cnt]}–>”>
これを↓↓↓へ。
<td><a href=”<!–{$smarty.const.URL_DIR}–>products/detail<!–{$arrDisp.product_id[cnt]}–>.html”>
次に、管理画面のブロック編集へ。「カテゴリ」ブロックを開く。(ver.2.3rc1の場合、L46)
最後に、「オススメ商品」も。4箇所修正。(ver.2.3rc1の場合、L37,L42,L68,73)
<a href=”<!–{$smarty.const.URL_DIR}–>products/detail.php?product_id=<!–{$arrBestProducts[cnt].product_id}–>”>
これを↓↓↓へ。
<a href=”<!–{$smarty.const.URL_DIR}–>products/detail<!–{$arrBestProducts[cnt].product_id}–>.html”>
以上。その他に同様の修正が必要なところがあれば(バージョンアップなどで発生する可能性もあるし。)同じように修正する。
<a href=”<!–{$smarty.const.URL_DIR}–>products/list.php?category_id=<!–{$arrTree[cnt].category_id}–>”
これを↓↓↓へ。
<a href=”<!–{$smarty.const.URL_DIR}–>products/list<!–{$arrTree[cnt].category_id}–>.html”
さらに。
4)GOOGLEサイトマップ用のXMLサイトマップも静的HTMLで出力したい。
GOOGLEサイトマップ用のXMLサイトマップ作成機能についても、同じように、「.html」の拡張子で表示させたい。
/data/class/pages/LC_Page_Sitemap.php
の240行目。(Ver.2.3RC1の場合。)
// :TODO: カテゴリの最終更新日を取得できるようにする
$page = array(“url” => SITE_URL . sprintf(“%sproducts/list.php?category_id=%d”, $mobile, $result[$i][‘category_id’])); ←これを変更。
$arrRet[$i] = $page;
↓↓↓このように変更。
// :TODO: カテゴリの最終更新日を取得できるようにする
$page = array(“url” => SITE_URL . sprintf(“%sproducts/list%d.html“, $mobile, $result[$i][‘category_id’]));
$arrRet[$i] = $page;
264行目も。
for ($i = 0; $i < count($result); $i++) {
$page = array(“url” => SITE_URL. sprintf(“%sproducts/detail.php?product_id=%d”, $mobile, $result[$i][‘product_id’]), ←これを変更。
“update_date” => $result[$i][‘update_date’]);
↓↓↓このように変更。
for ($i = 0; $i < count($result); $i++) {
$page = array(“url” => SITE_URL. sprintf(“%sproducts/detail%d.html“, $mobile, $result[$i][‘product_id’]),
“update_date” => $result[$i][‘update_date’]);
これで、GOOGLE用のXMLサイトマップもリンクは全て静的URLで書き出されます。