以前「ECCUBEのお問い合わせフォームの複製/別作成 増やし方」で紹介もしましたが。
WordPressも実装しているのであればコチラのContactform7を入れたいくらいです。
主な機能は下記。
基本的なお問い合わせフォーム機能はもちろんのこと。
メール形式チェック
入力必須項目の実装
CAPTCHA(画像認証)
ファイル添付機能
などなど、カスタマイズ性には特化しているかと思います。
なのですが・・・ファーストサーバーで文字化けする・・・orz
クリエイターと名乗ってみた。
以前「ECCUBEのお問い合わせフォームの複製/別作成 増やし方」で紹介もしましたが。
WordPressも実装しているのであればコチラのContactform7を入れたいくらいです。
主な機能は下記。
基本的なお問い合わせフォーム機能はもちろんのこと。
メール形式チェック
入力必須項目の実装
CAPTCHA(画像認証)
ファイル添付機能
などなど、カスタマイズ性には特化しているかと思います。
なのですが・・・ファーストサーバーで文字化けする・・・orz
新規DBを下記のように設定します。
MySQL の文字セット: UTF-8 Unicode (utf8)
MySQL 接続照合順序: UTF-8 Unicode_ci
作成後に変更しても直らないので再インストールになります。
■PHP MyAdminで文字コードを utf8_general_ci に変更
※PHP MyAdminでデータベースを選択後、操作タブ→照合順序 で変更可能
↓
■文字化けが直っていればOK
ですが、もしその手順でインストールしていた、やってみたが直っていなければ下記の手順も試してみましょう。
■.htaccessに、
AddHandler .php
suPHP_ConfigPath
■php.iniを、.htaccessと一緒に指定した階層に置く。
参考サイト↓
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=9044&forum=10
もう一つの方法が
■下記のUTF-8の部分が別の物になっていれば、修正してからインストール
/data/class/SC_Query.php の79行目、
//$this->conn->setCharset(CHAR_CODE);
$this->conn->setCharset(‘utf8′);
/data/module\MDB2/Driver/mysql.php の539行目、
//if (!empty($this->dsn[‘charset’])) {
//$result = $this->setCharset($this->dsn[‘charset’], $connection);
$result = $this->setCharset(‘utf8′, $connection);
if (PEAR::isError($result)) {
$this->disconnect(false);
return $result;
}
//}
参考サイト↓
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=7678&forum=2&post_id=37349
eccube2.11.4 インストール方法 一回やりましたがもう既に忘れたのでもう一度トライするところから。
まず、データベースを構築するところからですが user_eccube と適当に設定。
空のDBを作成したら、 EC-CUBE Version 2.11.4(zip)をダウンロード。
この時、不具合修正ファイルの最新版も同時にダウンロード。
上記のうち、ECサイトそして機能するのに必要なデータは「data」「html」の2つのフォルダだけなので他は無視。
セットアップ前に、不具合修正ファイル内にある「data」「html」をeccube-2.11.4の中に入れて上書きしてください。
テンプレートをパッケージングしながら作成中です。
テンプレ用に格納場所と概要を寄せ集めてみました。
デフォルトの状態では、下記に格納されています。
[html gutter=”false” highlight=”1,2″]
root/data/Smarty/templates/default
root/user_data/default
[/html]
以下フォルダ構成
“EC-CUBE テンプレートのファイル構成” の続きを読む
MacからLinux系サーバへSSH接続(コマンド入力)する方法。
ECCUBEをアップロードする際にどうしてもデスクトップ上での解凍だとパーミッションが変更されてしまうのでサーバー上で解凍するためにSSH接続。
Finder上でShift+cmd+U でユーティリティーフォルダを開きターミナルを起動
$ ssh -l <ユーザ名> <ホスト名>
ユーザー名はサーバーのアカウントホスト名はアドレス等
後はパスワードを聞かれるので入力。
(パスワードはキーボード押しても何も表示されないので注意)
コレでMacOSXからサーバー上でコマンド入力が可能。
以下追記2011.11.24
cmd+U←ではなくShift+cmd+Uでユーティリティーフォルダが開きました。
ちなみにShift+cmd+Aでアプリケーションフォルダが開きます。
まず管理画面にログインして、デザイン管理>PC>レイアウト設定 から、ページを新規入力します。
URLは review_list.php として、以下のコードを貼り付けて保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<div id="customervoice_area"> <h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_product_voice.jpg" alt="この商品に対するお客様の声" /></h2> <!--{if count($arrReview) > 0}--> <ul> <!--{section name=cnt loop=$arrReview}--> <li> <!--{$arrReview[cnt].title|h}--> <!--{$arrReview[cnt].create_date|sfDispDBDate:false}--> 投稿者:<!--{if $arrReview[cnt].reviewer_url}--><a href="<!--{$arrReview[cnt].reviewer_url}-->" target="_blank"><!--{$arrReview[cnt].reviewer_name|h}--></a><!--{else}--><!--{$arrReview[cnt].reviewer_name|h}--><!--{/if}--> おすすめレベル:<span class="recommend_level"><!--{assign var=level value=$arrReview[cnt].recommend_level}--><!--{$arrRECOMMEND[$level]|h}--></span> <!--{$arrReview[cnt].comment|h|nl2br}--> </li> <!--{/section}--></ul> <!--{/if}--></div> |
次に、html/user_data/review_list.php を開いて、次のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<!--?php require_once '../require.php'; require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Ex.php'; /** * ユーザーカスタマイズ用のページクラス * * 管理画面から自動生成される * * @package Page */ class LC_Page_User extends LC_Page_Ex { /** * Page を初期化する. * * @return void */ function init() { parent::init(); $masterData = new SC_DB_MasterData_Ex(); $this--->arrRECOMMEND = $masterData->getMasterData("mtb_recommend"); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); $this->action(); $this->sendResponse(); } /** * Page のアクション. * * @return void */ function action() { //レビュー情報の取得 $this->arrReview = $this->lfGetReviewData(); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } //商品ごとのレビュー情報を取得する function lfGetReviewData() { $objQuery =& SC_Query_Ex::getSingletonInstance(); //商品ごとのレビュー情報を取得する $col = "t1.create_date, t1.reviewer_url, t1.reviewer_name, t1.recommend_level, t1.title, t1.comment, t2.product_id, t2.name, t2.main_list_image"; $from = "dtb_review as t1 left join dtb_products as t2 using (product_id)"; $where = "t1.del_flg = 0 AND t1.status = 1 ORDER BY t1.create_date DESC"; $arrReview = $objQuery->select($col, $from, $where, $arrval); return $arrReview; } } $objPage = new LC_Page_User(); register_shutdown_function(array($objPage, 'destroy')); $objPage->init(); $objPage->process(); |
data/Smarty/templates/default/user_data/review_list.tpl を以下のように変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_product_voice.jpg" alt="この商品に対するお客様の声" /></h2> <!--{if count($arrReview) > 0}--> <ul> <!--{section name=cnt loop=$arrReview}--> <li> <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrReview[cnt].product_id|u}-->"> <img src="{$smarty.const.ROOT_URLPATH}resize_image.php?image={$arrReview[cnt].main_list_image|sfNoImageMainList|h}&width=40&height=40" alt="<!--{$arrReview[cnt].name|h}-->" /></a> <a href="<!--{$smarty.const.HTTP_URL}-->products/detail.php?product_id=<!--{$arrReview[cnt].product_id|u}-->"><!--{$arrReview[cnt].name|h}--></a> <!--{$arrReview[cnt].title|h}--> <!--{$arrReview[cnt].create_date|sfDispDBDate:false}--> 投稿者:<!--{if $arrReview[cnt].reviewer_url}--><a href="<!--{$arrReview[cnt].reviewer_url}-->" target="_blank"><!--{$arrReview[cnt].reviewer_name|h}--></a><!--{else}--><!--{$arrReview[cnt].reviewer_name|h}--><!--{/if}--> おすすめレベル:<span class="recommend_level"><!--{assign var=level value=$arrReview[cnt].recommend_level}--><!--{$arrRECOMMEND[$level]|h}--></span> <!--{$arrReview[cnt].comment|h|nl2br}--> </li> <!--{/section}--></ul> <!--{/if}--> |
以上。
ブロック化は以下。
デザイン管理>PC>ブロックの設定新規ブロックで下記を作成。
ブロック名:お客様の声一覧
ファイル名:review_list_bloc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<div id="customervoice_area"> <h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_product_voice.jpg" alt="お客様の声一覧" /></h2> <!--{if count($arrReview) > 0}--> <ul> <!--{section name=cnt loop=$arrReview}--> <li> <a href="<!--{$smarty.const.P_DETAIL_URLPATH}--><!--{$arrReview[cnt].product_id|u}-->"> <img src="{$smarty.const.ROOT_URLPATH}resize_image.php?image={$arrReview[cnt].main_list_image|sfNoImageMainList|h}&width=40&height=40" alt="<!--{$arrReview[cnt].name|h}-->" /></a> <a href="<!--{$smarty.const.HTTP_URL}-->products/detail.php?product_id=<!--{$arrReview[cnt].product_id|u}-->"><!--{$arrReview[cnt].name|h}--></a> <!--{$arrReview[cnt].title|h}--> <!--{$arrReview[cnt].create_date|sfDispDBDate:false}--> 投稿者:<!--{if $arrReview[cnt].reviewer_url}--><a href="<!--{$arrReview[cnt].reviewer_url}-->" target="_blank"><!--{$arrReview[cnt].reviewer_name|h}--></a><!--{else}--><!--{$arrReview[cnt].reviewer_name|h}--><!--{/if}--> おすすめレベル:<span class="recommend_level"><!--{assign var=level value=$arrReview[cnt].recommend_level}--><!--{$arrRECOMMEND[$level]|h}--></span> <!--{$arrReview[cnt].comment|h|nl2br}--> </li> <!--{/section}--></ul> <!--{/if}--></div> |
トップページのブロックで表示する場合、html直下のindex.php下記のような感じで書き換え。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
require_once './require.php'; require_once CLASS_EX_REALDIR . 'page_extends/LC_Page_Index_Ex.php'; // }}} // {{{ generate page //$objPage = new LC_Page_Index_Ex(); //register_shutdown_function(array($objPage, "destroy")); //$objPage->init(); //$objPage->process(); /** * ユーザーカスタマイズ用のページクラス * * 管理画面から自動生成される * * @package Page */ class LC_Page_User extends LC_Page_Ex { /** * Page を初期化する. * * @return void */ function init() { parent::init(); $masterData = new SC_DB_MasterData_Ex(); $this->arrRECOMMEND = $masterData->getMasterData("mtb_recommend"); } /** * Page のプロセス. * * @return void */ function process() { parent::process(); $this->action(); $this->sendResponse(); } /** * Page のアクション. * * @return void */ function action() { //レビュー情報の取得 $this->arrReview = $this->lfGetReviewData(); } /** * デストラクタ. * * @return void */ function destroy() { parent::destroy(); } //商品ごとのレビュー情報を取得する function lfGetReviewData() { $objQuery =& SC_Query_Ex::getSingletonInstance(); //商品ごとのレビュー情報を取得する $col = "t1.create_date, t1.reviewer_url, t1.reviewer_name, t1.recommend_level, t1.title, t1.comment, t2.product_id, t2.name, t2.main_list_image"; $from = "dtb_review as t1 left join dtb_products as t2 using (product_id)"; $where = "t1.del_flg = 0 AND t1.status = 1 ORDER BY t1.create_date DESC"; $arrReview = $objQuery->select($col, $from, $where, $arrval); return $arrReview; } } $objPage = new LC_Page_User(); register_shutdown_function(array($objPage, 'destroy')); $objPage->init(); $objPage->process(); |
基本的には同じ作業。
画像とかは適当にかえましょう。
(レビュー自体未投稿だと空欄なので適当に用意しておきましょう。)
下記のコード追加でPHPをインクルード可能。
1 2 3 |
<!--{php}--> include('/XXXXpath/index.php'); <!--{/php}--> |
またはSmartyからPHPを実行することが出来ます。
パスは開いたときのURLからの相対パスorサーバーの絶対パス。
ファイルパスは下記で調べる。
1 2 3 |
// 1つ上のディレクトリにある index.php のサーバー上の絶対パスを取得し表示します。 $path = realpath("../index.php"); echo $path; |
コレで別のPHPアプリも起動可能。掲示板/Blogなど。
今日、特商法の部分を記入していたら文字数制限に到達w
なのでいじりましたw
/data/mtb_constants_init.php
/data/class/pages/admin/basis/LC_Page_Admin_Basis_Tradelaw.php
/data/Smarty/template/admin/basis/tradelaw.tpl
この3つを主にいじります。
手順は二段階。
1.もともとの入力制限数を解除
2.文字数チェック自体要らないので削除
3.入力時に文字をカウントしてるので解除
1./data/mtb_constants_init.phpの変更点
1 2 3 4 |
/** 長い項目の文字数 (住所など) */ define('MTEXT_LEN', 200); /** 長中文の文字数 (問い合わせなど) */ define('MLTEXT_LEN', 1000); |
下記に変更。多分250行から260行付近です。
1 2 3 4 |
/** 長い項目の文字数 (住所など) */ define('MTEXT_LEN', 6000); /** 長中文の文字数 (問い合わせなど) */ define('MLTEXT_LEN', 2000); |
MTEXT_LEN が特商法の入力で一番文字数の必要なところ。
配送や返品に関してだと思います。
なのでありったけの文字数突っ込みましたw
2./data/class/pages/admin/basis/LC_Page_Admin_Basis_Tradelaw.php
入力して多かったらまた入力してくれ!みたいなことを行っている部分を削除します。
125から145行目あたりで解除したい項目の下記のコードを削除
「,」も削除してください。じゃないとエラーになるはず。
,”MAX_LENGTH_CHECK”
となりの「”EXIST_CHECK”」は未入力チェックっぽいのでいじらずw
3./data/Smarty/template/admin/basis/tradelaw.tpl
入力時のフォームで文字数をカウントしてるのでいっそのこと解除。
Smartyの都合か1.で変更してもなぜかすぐに反映されなくて、じれったかったので文字カウントごと消してやりました。
maxlength=””
この文が書いてあるような箇所で文字数増やしたいところを片っ端から削除。
これ消せばOKですが、あとはお好みで下記の文章も消しましょう。
(上限文字)
今日、もらった文章をそのままコピペで行こうかと思って突っ込んだら文字数制限で、ちょっとイラっとしながらも、どうせDBで制御してんだろ!とか思いながらDBのぞいてましたが見当たらず。
なので、ググりながらいじりながらようやく正解が出ましたよw
代引きとか配達方法の文言入れるの考えたらどうやったって200文字以上いくw
あとできれば古物商とか許可番号とかいろいろ増やせれば楽なのにねw
一応、特定商取引法の項目の追加も一度やっているのであとで書きます・・・・記憶のあるうちにw
ECCUBEのお問い合わせフォームの増やし方eccube2.11版
3時間くらい悩んだ末に解決w
まず、contactを総べてコピペでcontact2に変更後、最後に苦戦したのが、pagelayoutのDBを追加すること。
これやんないと表示されませんでした。
●data/class/page/contact→contact2を作成。
ファイル中の2つのphpのなかでcontactもcontact2に変更。
LC_Page_Contact_Complete 44行目付近。多分これ。
1 2 3 4 5 |
function init() { parent::init(); $this->tpl_title = 'お問い合わせ(完了ページ)'; $this->tpl_mainno = 'contact2'; } |
LC_Page_Contact.php 44行目付近もかな??
1 2 3 4 5 6 7 8 9 10 11 12 13 |
function init() { parent::init(); if (SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE) { $this->tpl_title = 'お問い合わせ'; } else { $this->tpl_title = 'お問い合わせ(入力ページ)'; } $this->tpl_page_category = 'contact2'; $this->httpCacheControl('nocache'); $masterData = new SC_DB_MasterData_Ex(); $this->arrPref = $masterData->getMasterData('mtb_pref'); } |
●data/class_extends/page_extends/contact→同様にcontact2を作成。phpの作業は同上。
LC_Page_Contact_Complete 28行目付近。多分これ。
1 |
require_once CLASS_REALDIR . 'pages/contact2/LC_Page_Contact_Complete.php'; |
LC_Page_Contact.php 28行目付近もかな??
1 |
require_once CLASS_REALDIR . 'pages/contact2/LC_Page_Contact.php'; |
●data/Smarty/templates/default/contact→contact2を作成。
フォルダ中の3つのtplで指定されているcontactをcontact2に変更。
contactの文字が見当たらなかった気がするのでパスw
●html/contact→contact2を作成。フォルダ中の2つのファイルのcontactをcontact2に変更。
complete.php 26行目付近
1 |
require_once CLASS_EX_REALDIR . 'page_extends/contact2/LC_Page_Contact_Complete_Ex.php'; |
index.php 25行目付近
1 |
require_once CLASS_EX_REALDIR . 'page_extends/contact2/LC_Page_Contact_Ex.php'; |
tpl作成まではこれで完了。
とここまでなら簡単にできましたが。
dbの追加が問題w
どこなのかわからなくて苦労しましたがw
phpMyAdminでみると、dtb_pagelayoutで挿入しました。
device_type_id =10(PC用)
page_id =29(デフォルトで行くとこのページレイアウトナンバー)
url =contact2/index.php(コピペした場所)
filename =contact2/index(拡張子なし)
あとはそのままでOKで実行ボタン押しました。
これをcompleteページ分も追加で表示されるようになりました。
URLはhttp://ドメイン/contact2/index.php
DBいじるので自己責任で加工願います、とくにやる前はDBのバックアップを。
挿入するところ間違えて削除ボタン押してDB復旧させましたよ・・・・w
で、つぎは加工しないとただのコピーで終わってしまうので、それはまたあしたやろーっとw
(一応アンケートフォームにしようかと思ってますw)
出来れば添付ファイルもつけれるといいなぁw
どこで編集したか忘れそうになるので、備忘録。
編集ファイルの場所data/Smarty/site_frame.tpl
META tag 編集 title keywords description などを下記から編集できます。
で、問題は初期状態で、各ページ編集できるようになっていたかなのですが。
多分???初期状態からできたはず。
一応コードも↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<!--追記--> <!--{if $tpl_title == "商品一覧ページ"}--> <title><!--{$tpl_subtitle|escape}-->商品一覧用タイトル</title> <meta name="keywords" content="" /> <meta name="google-site-verification" content="0OvRjVOkgdX_SX3jk1OKnIR4YyCwtRowtyPIFYh_ahU" /> <meta name="description" content="" /> <!--{elseif $tpl_title == "TOPページ" || $tpl_title == ""}--> <title>トップページ用タイトル</title> <meta name="keywords" content="" /> <meta name="description" content="" /> <!--{elseif $tpl_mainpage=="shopping/index.tpl"}--> <title>ログイン|サイト名を表示します。</title> <meta name="keywords" content="ログイン,AAA,BBB,CCC,DDD" /> <meta name="description" content="ログインページ。ここにログインページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/card.tpl"}--> <title>クレジットカード決済|サイト名を表示します。</title> <meta name="keywords" content="クレジットカード決済,AAA,BBB,CCC,DDD" /> <meta name="description" content="クレジットカード決済ページ。ここにクレジットカード決済ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/complete.tpl"}--> <title>ご注文完了|サイト名を表示します。</title> <meta name="keywords" content="ご注文完了,AAA,BBB,CCC,DDD" /> <meta name="description" content="ご注文完了ページ。ここにご注文完了ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/confirm.tpl"}--> <title>ご入力内容のご確認|サイト名を表示します。</title> <meta name="keywords" content="ご入力内容,ご確認,AAA,BBB,CCC,DDD" /> <meta name="description" content="ご入力内容のご確認ページ。ここにご入力内容のご確認ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/convenience.tpl"}--> <title>コンビニ決済|サイト名を表示します。</title> <meta name="keywords" content="コンビニ決済,AAA,BBB,CCC,DDD" /> <meta name="description" content="コンビニ決済ページ。ここにコンビニ決済ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/deliv.tpl"}--> <title>お届け先の指定|サイト名を表示します。</title> <meta name="keywords" content="お届け先の指定,AAA,BBB,CCC,DDD" /> <meta name="description" content="お届け先の指定ページ。ここにお届け先の指定ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/nonmember_input.tpl"}--> <title>お客様情報入力|サイト名を表示します。</title> <meta name="keywords" content="お客様情報入力,AAA,BBB,CCC,DDD" /> <meta name="description" content="お客様情報入力ページ。ここにお客様情報入力ページのディスクリプションが表示されます。" /> <!--{elseif $tpl_mainpage=="shopping/payment.tpl"}--> <title>お支払い方法、お届け時間等の指定|サイト名を表示します。</title> <meta name="keywords" content="お支払い方法,お届け時間,AAA,BBB,CCC,DDD" /> <meta name="description" content="お支払い方法、お届け時間等の指定ページ。ここにお支払い方法、お届け時間等の指定ページのディスクリプションが表示されます。" /> <!--{else}--> <title><!--{$tpl_title|escape}-->|サイト名を表示します。</title> <meta name="keywords" content="<!--{$tpl_title|escape}-->,<!--{$arrPageLayout.keyword|escape}-->" /> <meta name="description" content="<!--{$tpl_title|escape}-->。<!--{$arrPageLayout.description|escape}-->" /> <!--{/if}--> <!--追記終了--> |
追記とか書いてるしw
んん~、自分で書いたか忘れましたw
それか、どっかから拾ってきたらしい。。。。。
元ネタサイトのかたすいません><。。
備忘録として使わせてもらいましたw