// MT設定読み込み $line = ''; $line = file("../app/mt/mt-config.cgi"); $i = 0; while($line[$i]!=""){ // マッチしたら変数化 if (preg_match("/Database/",$line[$i])) { $DB_NAME = explode(' ', $line[$i]); $DB_NAME = trim($DB_NAME[1]); } if (preg_match("/DBUser/",$line[$i])) { $DB_USER = explode(' ', $line[$i]); $DB_USER = trim($DB_USER[1]); } if (preg_match("/DBPassword/",$line[$i])) { $DB_PASSWORD = explode(' ', $line[$i]); $DB_PASSWORD = trim($DB_PASSWORD[1]); } if (preg_match("/DBHost/",$line[$i])) { $DB_SERVER = explode(' ', $line[$i]); $DB_SERVER = trim($DB_SERVER[1]); } $i ++; } //------------------------------------------------------ // MT_DBに接続開始 $db = mysql_connect($DB_SERVER,$DB_USER,$DB_PASSWORD); mysql_query("SET NAMES utf8"); // DB指定(確認用) if(!mysql_select_db($DB_NAME, $db)){ echo "<div style=\"color:red;\">\nメインデータベースに接続できません。</div>\n"; }elseif(mysql_select_db($DB_NAME, $db)){ // echo "<div style=\"color:green;\">\nDB指定OK!(".$DB_NAME.")</div>\n\n\n"; } // EOF/MT_DBに接続開始 //------------------------------------------------------
カテゴリー: OpenSource
MTサイトマップ
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" style="color:red; width:1000px;display:block;"> <url> <loc><$MTBlogURL encode_xml="1"$></loc> <lastmod><$MTDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> <changefreq>daily</changefreq> </url> <MTIfArchiveTypeEnabled archive_type="Individual"> <MTEntries lastn="9999"> <url> <loc><$MTEntryPermalink encode_xml="1"$></loc> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> <priority>1.0</priority> </url> </MTEntries> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Monthly"> <MTArchiveList archive_type="Monthly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Weekly"> <MTArchiveList archive_type="Weekly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Daily"> <MTArchiveList archive_type="Daily"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Author"> <MTArchiveList archive_type="Author"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Author-Daily"> <MTArchiveList archive_type="Author-Daily"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Author-Weekly"> <MTArchiveList archive_type="Author-Weekly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Author-Monthly"> <MTArchiveList archive_type="Author-Monthly"> < url> <loc><$MTArchiveLink encode_xml="1"$></loc> < MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Author-Yearly"> <MTArchiveList archive_type="Author-Yearly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Category"> <MTArchiveList archive_type="Category"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Category-Daily"> <MTArchiveList archive_type="Category-Daily"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Category-Weekly"> <MTArchiveList archive_type="Category-Weekly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Category-Monthly"> <MTArchiveList archive_type="Category-Monthly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Category-Yearly"> <MTArchiveList archive_type="Category-Yearly"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> <MTIfArchiveTypeEnabled archive_type="Page"> <MTArchiveList archive_type="Page"> <url> <loc><$MTArchiveLink encode_xml="1"$></loc> <MTEntries lastn="1" sort_by="modified_on"> <lastmod><$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$></lastmod> </MTEntries> </url> </MTArchiveList> </MTIfArchiveTypeEnabled> </urlset>
MTの管理画面をカスタマイズする
再構築ダイアログのテンプレートファイル
tmpl/cms/popup/rebuild_confirm.tmpl を修正する
その他、管理画面のテンプレートは「mt/lib/MT/L10N/ja.pm」を参照すると書いてある。
商品ステータスで一覧表示
Error404
The file is not found.
EC-CUBEのデザイン管理で、勝手にエスケープされる
EC-CUBEを地価鯖(チカッパサーバー)で運用していると、
管理画面から編集したときに「”」が勝手にエスケープされてしまう。
「”」→「¥”」
対応策
magic_quotes_gpc が ON ならば OFF にする。
対応策というより「常識」です。
チカッパでは、”,htaccess” に “php_flag magic_quotes_gpc 0” と書いても効きません。
コントロールパネル → php.ini設定
で設定します。
ブロックを表示するタグ
カスタムブロックを読む込み場合は、PHPで書いてしまえば早いのだが、
Smartyらしく書くとこんな感じになる。
<!--{include_php file=`$smarty.const.HTML_PATH`frontparts/bloc/best5.php}-->
カテゴリLevrl1 ならリンクしない、それ以外はリンクする
<!-- カテゴリLevrl1 ならリンクしない、それ以外はリンクする --> <!--{php}-->$hoge = ($this->get_template_vars('level')); if($hoge == 1){<!--{/php}--> <!--{$arrTree[cnt].category_name|escape}--> <!--{php}-->}else{<!--{/php}--> <a href="<!--{$smarty.const.URL_DIR}-->products/list.php?category_id=<!--{$arrTree[cnt].category_id}-->"<!--{if in_array($arrTree[cnt].category_id, $tpl_category_id) }--> class="onlink"<!--{/if}-->> <!--{$arrTree[cnt].category_name|escape}--> </a> <!--{php}-->}<!--{/php}-->
Smarty 変数を PHP変数へ渡す
$hoge = ($this->get_template_vars('<strong>level</strong>')); echo '★'.$hoge;
カテゴリ毎の商品登録数
<!--{$arrTree[cnt].product_count|default:0}-->
新規投稿・編集のテキストエリアのサイズ調整
EC-CUBEパンくずモジュール
カスタムフィールドの値の取り出し方。
これだけのこと。
<?php get_post_meta($post->ID,'住所',true);?>
カスタムフィールドの削除方法
テーブル wp_postmeta の該当レコードを削除する。
基本セットとして必須のレコードもあるので要注意!
サイトマップ生成プラグイン
WordPressでサイトマップ自動生成プラグイン
Dagon Designのがよさそうなので Download
プラグインを有効にしたら、サイトマップ用に固定ページをつくって一行書くだけ!
<!-- ddsitmapgen -->
※ハイフンとddsitmapgenの間にスペースがないと動作しないようだ。
もう少々高度なことをしたい場合、
テーマディレクトリに”sitmap.php”を作る。
内容は下記のように記述する。
<?php /* Template Name: SITEMAP */ ?> <?php get_header();?> <div id="sitemap"> <?php echo ddsg_create_sitemap(); ?> </div> <?php get_footer(); ?>
固定ページをつくる。
タイトル"サイトマップ" パーマリンク"https://mint123.tokyo/technology/sitmap"
本文は空でよい。
ページのテンプレートに ‘SITEMAP” を選択する。
あとは、テンプレートでお好きなようにどうぞ!!
・・・カスタマイズしないとイマイチなプラグインかもしれないことに気付いてしまった。
オープンソースなのだから、汎用性を言うことを考えれば、この程度の(作りこんでいない)ベースになるものがいいのかもしれない。
記事IDから親カテゴリ情報抽出
wordpress のDB構成というのはとても洗練された無駄の無いものです。
その反面、記事IDからカテゴリを抽出しようとすると、3重の逆ループをかけなければなりません。
3重逆ループってどこかで聞いたような…ルービックキューブの公式を見出すことと同じです。
覚えるとか慣れるということではなく、出すことと同じ難易度ということになります。
これができると一人前の数学者かもしれません。
<?php // MySQLに接続 ------------------ $sql="SELECT * FROM `tech_posts` WHERE `post_status` = 'publish' ORDER BY `ID` DESC"; $hack .= '<br>'.$sql.'<br>'; $rs = mysql_query($sql,$db); $i = 0; while($item = mysql_fetch_assoc($rs)){ $hack .= '■'.$item[ID].'■'; if($i <= 9){ // カテゴリID抽出 $sql2="SELECT * FROM `tech_term_relationships` WHERE `object_id` = '$item[ID]'"; // post_id がマッチしたら $rs2 = mysql_query($sql2,$db); $item2 = mysql_fetch_assoc($rs2); if( ($item2[term_taxonomy_id] >= "2") && ($item2[term_taxonomy_id] <= "8") ){ $sql3="SELECT * FROM `tech_term_relationships` WHERE `object_id` = '$item[ID]'"; $rs3 = mysql_query($sql3,$db); $item3 = mysql_fetch_assoc($rs3); // カテゴリID整形 $idid1 = '00'.$item3[term_taxonomy_id].'-';
「現在、商品はございません。」のカスタマイズ
[該当ファイル]
data/Smarty/templates/default/frontparts/search_zero.tpl
カート内の商品情報
商品IDを採取する場合
$_SESSION[cart][カート内番号][id][0]
ただの連想配列にすぎない。
新規に作成したページのエラー
下記のようなエラーを吐いて何も表示されない。
Warning: Unknown: SAFE MODE Restriction in effect. The script whose gid is 1000 is not allowed to access /virtual/ドメイン名/public_html/xxxx/user_data/guide.php owned by uid 1000 in Unknown on line 0 Warning: Unknown: SAFE MODE Restriction in effect. The script whose uid is 1000 is not allowed to access /virtual/ドメイン名/public_html/xxxx/user_data/guide.php owned by uid 1000 in Unknown on line 0 Warning: Unknown: failed to open stream: Success in Unknown on line 0 Fatal error: Unknown: Failed opening required '/virtual/ドメイン名/public_html/xxxx/user_data/guide.php' (include_path='.:/usr/local/lib/php') in Unknown on line 0
user_dataのパーミッションは777
user_data内のphpファイルの権利者がapacheになっています。
これを、他のファイルと同じように変更すると回避できる。
帳票のロゴ画像を変更する
data/pdf/logo.png
↑これが正解
user_data/packages/default/img/pdf/logo.png
↑ここにも同じ画像があるが、用途は不明?
XoopsでGnaviに投稿できない
gnavi で記事を書く権限がない???
「各グループの権限設定」が初期値はノンチェックでした。
カスタムフィールドのプラグイン
Custom Field Gui Utility
これは結構便利だが、プラグインを有効化すると、その時点で必須項目が増えてしまう。
「サイトを開く」のリンクを新しいタブで開くようにする。
[File] wp-admin/admin-header.php
[Line] 104
<a href="<?php echo trailingslashit( get_bloginfo('url') ); ?>" target="_blank" title="<?php _e('Visit site') ?>"></
なんだこんなこと?と馬鹿にしないでください。
2クリックか?1クリックか?
作業は倍か半分かというとても大きな違いです。
コレラが積み重なると大きなボトルネックなになります。
気がつくたびに、小さなことでもクリアしていかないと、最速の開発はできません。
カテゴリ枠を広げてみよう!
帳票右上ロゴの変更
html/admin/order/pdf.php
data/page_extends/admin/order/LC_Page_Admin_Order_Pdf_Ex.php
data/class_extends/page_extends/admin/order/LC_Page_Admin_Order_Pdf_Ex.php
data/class/pages/admin/order/LC_Page_Admin_Order_Pdf.php
data/class/SC_Fpdf.php
関数 SC_Fpdf
この辺を探れば比較的簡単だ!
子カテゴリーを表示する
tpl_subtitleに親カテゴリー+子カテゴリーを表示する
[修正ファイル EC-CUBE2系]
data/class/pages/products/LC_Page_Products_List.php
[修正前]
$arrFirstCat = $objDb->sfGetFirstCat($arrCategory_id[0]); $tpl_subtitle = $arrFirstCat['name'];
[修正後]
$tpl_subtitle = $objDb->sfGetCatCombName($arrCategory_id[0]);
とすることで、親カテゴリー+子カテゴリーも表示する事が出来ます。
EC-CUBEのデータベースの文字化け
管理画面では化けないが、データベースをのぞくと化けてしまう。
これがEC-CUBEの仕様のようです。
そこで回避策ですが…
サーバー環境により異なりますので、一例としてご覧ください。
- 普通にインストール
- データベースのテーブルを全て削除
- お決まりの「UTF-8化おまじない」を行う
- 再度eccubeインストール
たったこれだけで、EC-CUBEが快適に利用できます。
データベースでも化けていないので、
メンテナンスも、サーバー移転も心配がありません。
オープンソースとは、完全でないからオープンソースです。
完璧にするのは利用者自身に委ねられています。
皆さんも挑戦してね!
ログインしているときには、編集へのリンクを表示
単一記事の投稿 (single.php) の任意の場所に以下のように書く。
<?php edit_post_link(__('Edit this entry', 'kubrick'),'','.'); ?>
商品をカートに入れる処理
商品を買い物カゴに入れる処理
// 新カートID $new_no = カート内の番号;// product_id $_SESSION[cart][$new_no][id][0] = (string)$product_id; // 規格1 $_SESSION[cart][$new_no][id][1] = (string)$stsize; // 規格2、指定がない場合は「0」 $_SESSION[cart][$new_no][id][2] = (string)0; // 数 $_SESSION[cart][$new_no][quantity] = 1; // カート番号 $_SESSION[cart][$new_no][cart_no] = カート内の番号; // 価格 $_SESSION[cart][$new_no][price] = $price02; // ポイントレート $_SESSION[cart][$new_no][point_rate] = $point_rate;
このようにしてセッションに登録すれば、カートに入ったことになる。
しかし、注視すべき点が一つある。
(string)のようにするのが重要!
配列の型が適切でないと、決済の最後の処理で、「申し訳ございませんが、ご購入の直前で売り切れた商品があります。この手続きは無効となりました」としかられてしまう。
もとファイルを変更するなら
/data/class/SC_CartSession.php
WordPress の バックアップ
WordPress Database Backup というプラグインがある。
ダウンロードサイトは、http://www.ilfilosofo.com/blog/wp-db-backup
これは、とても素晴らしい!
他のプラグインは、あっても困らないが、無くても困らないものばかり。
これは、一度使ったら、手放せない。
30分もあれば作れる簡単なプラグインだが、配布してくれるのがうれしい。
いや、違う、まともなプラグインを作る輩が存在することが嬉しい!
サーバー内にバックアップしたところで、サーバがとまればそれまで、
主導でダウンロードしようものなら、そのうちに飽きてしまう。
しかし、設定しだいでは、毎日、バックアップしメールで送ってくれるしカラクリのようだ。
望むならば、1時間毎にも設定できる。
まあ、普通は1週間が妥当かもしれない。
自分の場合は、1日一回にした。
2日分もデータが飛んだら、大きな損失になる。
1時間に一回は多いような気がするので、
昼間、仕事をしている時間帯、つまりデータが次々と更新される時間帯に限り、
2時間に一回、バックアップをメールで送信にカスタマイズしようとも考えている。
…目視確認、DBに再インポートできるか確認、というのも、わずらわしいので、
受信して、DB検証をしてくれる、サーバーでも作ろうか。。。?
「最新の投稿」のMAXを変える
wp-includes/default-widgets.php
542行目付近
if ( !$number = (int) $instance['number'] ) $number = 10; else if ( $number < 1 ) $number = 1; else if ( $number > <strong>15</strong> ) $number = <strong>15</strong>;
同ファイル内に15という数値が沢山あるので、一括置換してしまおう!
バージョンによっては、1っ箇所の場合もある、その辺は、自分でソースコードをきちんと読んでから変更してください。
※ ソースコードを理解しないまま、見たり聞いたりした情報だけで作業を行うことは、とても危険です。
joomla!その2
インストールでphpの設定が違うと怒る
.htaccrss で設定すれば良いのは分かるが、
こう少し、サーバー側の設定に依存しない書き方をしなければ、オープンソースとしては、生き残れないだろう。
joomla!はユーザ登録できない仕様です。
Joomla! 1.0.15JP Stable での不具合
管理画面からのユーザー登録はOK
フロント画面からのユーザー登録は登録ボタンを押しても何も変化がない。
エラーにもならない。
ページも変わらない。
登録そのものが行われない。
こんなオープンソースなぜ配布しているのか?
/components/com_registration/registration.html.php の64行目を修正する。
このようにかかれていますが、明らかな構文違いです。
} else if (r.exec(form.username.value) || form.username.value.length < 3) || mb.exec(form.username.value)) {
カッコだけにしてみると
} else if ( () || <span style="color: #ff0000;">)</span> || ()) {
明らかに閉じカッコが多い
下記のように修正すれば動きます。
} else if (r.exec(form.username.value) || form.username.value.length < 3 || mb.exec(form.username.value)) {
Joomla!って結構面白そうだし、見た目はとてもよくできている。
しかし、このような致命的なバグを放置したりするから、人気が出ないのかもしれない。
少々直して動いたが、それ以上使う気にはなれない。
少なくなった在庫をメールで知らせてくれる機能
/html/shopping/complete.php (/data/class/pages/shopping/LC_Page_Shopping_Complete.php)
// 在庫を減らす処理 function lfReduceStock($objQuery, $arrID, $quantity) { $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; $arrRet = $objQuery->select("stock, stock_unlimited", "dtb_products_class", $where, $arrID); // 売り切れエラー if(($arrRet[0]['stock_unlimited'] != '1' && $arrRet[0]['stock'] < $quantity) || $quantity == 0) { $objQuery->rollback(); sfDispSiteError(SOLD_OUT, "", true); // 無制限の場合、在庫はNULL } elseif($arrRet[0]['stock_unlimited'] == '1') { $sqlval['stock'] = null; $objQuery->update("dtb_products_class", $sqlval, $where, $arrID); // 在庫を減らす } else { $sqlval['stock'] = ($arrRet[0]['stock'] - $quantity); if($sqlval['stock'] == "") { $sqlval['stock'] = '0'; } $objQuery->update("dtb_products_class", $sqlval, $where, $arrID); } <div style="color:tomato;"> // 在庫数が0の場合はNULL if( ($sqlval['stock'] <= 5) && ($arrRet[0]['stock_unlimited'] != '1') ){ // メール送信先 $stock_mail = "zaiko@domain.com"; // 件名 $stock_sub = "商品在庫が少なくなりました。"; // メッセージ $stock_msg = "商品ID:".$arrID[0]."(".$arrID[1].",".$arrID[2].")"."の商品が少なくなりました。"; // メールを送信します。 mb_send_mail($stock_mail, $stock_sub, $stock_msg); } </div> }
受注管理でスターテスをリセットする
受注管理でスターテスをリセットするSQL文
UPDATE `dtb_order` SET `status`='1', `deliv_no`='', `commit_date`='0000-00-00 00:00' LIMIT 20
EC-CUBEのカスタマイズ(ファイルのPath)
テンプレート
CLASS_EX_PATH/page_extends/
ソースファイル
CLASS_PATH/page/
帳票のカスタマイズ
pdf関連モジュール
EC-CUBEでは、FPDF というモジュールでPDFを生成している。
fpdf.php は、 data/pdf/ 配下にある。
EC-CUBEのログインチェック(裏技)
カスタマイズによる追加管理画面を別窓で開く場合、SESSIONを引っ張ってきてログインチェックをするのが正しい方法だが、
これでもいいじゃないか?
『「/admin/」からのリンクアクセスのみ許可する』方法でも、セキュリティ的には、変わらない。
しかもソースコードは短くなるので、重宝しています。
//------------------------------------------------------ // LOGIN_CHECK if (preg_match("/admin/", $_SERVER[HTTP_REFERER])){ }else{ echo "<html><head></head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" /><body><div style=\"color:red;\">\n不正なアクセスです。</div></body></html>\n"; exit(); } // EOF >> LOGIN_CHECK //------------------------------------------------------
変数の表示
「POST, GET, SESSION, SERVER」などの変数を表示する。
echo '<pre><h3>_GET</h3>'; var_dump($_GET); echo '<h3>_POST</h3>'; var_dump($_POST); echo '<h3>_SESSION</h3>'; var_dump($_SESSION); echo '<h3>_SERVER</h3>'; var_dump($_SERVER);
書いたり、消したりがめんどうなので、こんな感じです。
EC-CUBEの場合
<!--{php}--> if($_GET[hack] != ""){ $_SESSION[hack] = 1; } if($_SESSION[hack] == 1){ echo '<pre style="text-align:left;"><h3>_GET</h3>'; var_dump($_GET); echo '<h3>_POST</h3>'; var_dump($_POST); echo '<h3>_SESSION</h3>'; var_dump($_SESSION); echo '<h3>_SERVER</h3>'; var_dump($_SERVER); echo '</pre>'; } <!--{/php}-->
調整)ECCUBE、商品詳細の画像表示
ECCUBEの文字化け
サーバ移転や、試験環境などの構築で、文字化けが発生することがしばしばある。
データベース接続まわりを除いてみると、大切な記述が欠けている。
ファイル名: /data/class/SC_DbConn.php
65行付近
$this->conn = $objDbConn; $this->conn->query("SET NAMES utf8"); $this->error_mail_to = DB_ERROR_MAIL_TO; $this->error_mail_title = DB_ERROR_MAIL_SUBJECT; $this->err_disp = $err_disp; $this->dbFactory = SC_DB_DBFactory_Ex::getInstance();
$this->conn->query("SET NAMES utf8");
を追記すれば解決する。
※ この作業を行うタイミングが重要です。
インストールのどのタイミングで行うか、DB接続直後です。
注意
エンコード関連を変更した後は、キャッシュファイルのクリアを忘れるべからず。
解説
php.ini のエンコード関係は、あまり指定しないのがサーバー屋の流儀である。
その場合、データベースの読み書きは、サーバーのデフォルト・エンコードで行われる。
サーバーのエンコードは、
最近は、UTF-8が多くなってきたが、以前はEUCが主流だった。
DBのエンコードとPHPファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。
wordpress_メディア・アップロードの設定
初期設定は「wp-content」と書いてあるが、初期設定は「wp-dontent」になっている。このへんの曖昧さがオープンソースらしい。
phpBBオフィシャル
http://www.phpbb.com/
WP-Cumulus を導入
WP-Cumulus を導入してみた。ググッて見たが 、日本語で静的URLを利用していると、リンク情報がエンコードの関係(文字化け)で正しいリンク先にならないようだ。
日本語をグルグル回しても、格好良いとは思わない。
どこかで予算が付いたら、対応してみよう。
ファイル・アップロード・モジュール
「jpg、gif、png」などの画像は、SMLの3サイズで自動保存されます。
動画ファイルやCSVファイルなども、利用アップロード可能なモジュールです。
データベース汎用化モジュール
データベースを汎用化的概念で操作することに成功しました。
メリットは、ブログなどの小規模開発から、業務管理システムやECサイトなどの中規模開発程度まであってもあれば、データベース設計が不要になります。
また、開発の大半を占めるデータベースの
- 読み込み
- 登録
- 更新
- ソート抽出
の開発が半自動化されます。
デメリットは回避できる設計を施してありますので、フレームワークなどのように動作が 重くなることはございません。
複合階層ユーザー管理モジュール
WebMaster、Shop、EndUser の3階層の新規登録、プロフィール管理、ログイン管理をモジュール化して保有しております。
これにより、開発時間の大幅な短縮が可能となっております。
PukiWiki 公式サイト
Path(URL)の変更
WordPress
管理画面へアクセス使用としても、元のPath(URL)へリダイレクトされてしまう。
URLの設定間違い、サーバー移転など、この情報を必要な場面は多い。
対処方法
データベースの
wp_options を修正する。
EC-CUBE ヴァージョン 2.3.4 のClass名が変
EC-CUBE ヴァージョン 2.3.4
同じバージョンでありながら、試験環境の最新のものと実稼動サーバーの仕様が違う。
w(°o°)w おおっ!!
レイアウトも全く同じになのに表示が大きく乱れる。
管理画面から編集できるソースではない場所に書かれているクラス名が違うのには驚いた。
統一性とか、管理体制に劣ることがまた立証されてしまった。
オープンソースだから仕方ない。
言い換えれば、「EC-CUBE Myバージョン」の完成度が上がっていくだけのことだ。
EC-CUBEでRSSの日時を反映させる
EC-CUBEのRSSでは、日付けと日時が反映されないバグがあります。
バグというよりは、製作途中のようなソースコードなのですが、この機会に機能させてみましょう。
[対象ファイル1]
data/class/pages/rss/LC_Page_Rss.php
71行目付近の
「$this->timestamp = SC_Utils…」を削除します。
lfGetNewsという関数を丸ごと書き換えます。
[対象ファイル2]
data/Smarty/templates/default/rss/index.tpl
49行目あたりの「<!–{* <pubDate><!–{“r”|sf_mktime:$arrNews[cnt…」を削除
50行目あたりの「 <pubDate><!–{$arrNews[cnt].news_date|escape}–></pubDate>」を変更します。
保護中: EC-CUBEでRSSの日時を反映させる(全文)
保護中: EC-CUBEパンくずモジュール(ソースコード)
CSSで画像リサイズ
<style type=”text/css”>
.image-resize {
max-width: 200px;
max-height: 200px;
}
</style>
EC-CUBEでIEでSSLのエラー
EC-CUBEでIEでSSL接続した場合、どのページに飛んでもセキュリティ情報のアラームが毎回表示される場合の修正方法です。
「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。 保護されていない項目を表示しますか?」
次のページはSSL(https)なのに、http://○×□▽… というように、http:// でファイルや画像を読み込んでいませんか?
WordPressの記事本文をPHP変数に代入する
これだけ!
$hoge = $post->post_content;
【例】 記事の最初の画像を抽出する。
list($gomi, $hoge) = explode('<img', $hoge); list($hoge, $gomi) = explode('>', $hoge); echo '<img'.$hoge.'>';
カートページの変数表示
global $objPage; $hoge = ($objPage->arrData); var_dump($hoge);
WordPressで日付に曜日を表示する
$kizi_id = $post->ID; // echo $kizi_id.'<br>'; // Config読込み include $_SERVER[DOCUMENT_ROOT]."/wp-config.php";// MySQLに接続 ------------------ $db = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD); //mysql_query("SET NAMES utf8″); // DB指定(確認用) if(!mysql_select_db(DB_NAME, $db)){ // echo '<div style="color:red;">メインデータベースに接続できません。</div>'; }elseif(mysql_select_db(DB_NAME, $db)){ // echo '<div style="color:green;">DB指定OK!('.DB_NAME.')</div>'; } // < EOF > MySQLに接続 ------------------ $sql="SELECT * FROM `tech_posts` WHERE `ID` = '$kizi_id'"; $rs = mysql_query($sql,$db); $item = mysql_fetch_assoc($rs); // var_dump($item); $date = $item[post_date]; list($date, $gomi) = explode(' ', $date); // echo $date.'<br>'; list($year, $month, $mday) = explode('-', $date); // echo $yy.'=='.$mm.'=='.$mday.'<br>'; //日付から曜日を判定する関数 function date2wday($year, $month, $mday) { if($month == 1 || $month == 2) { $year--; $month += 12; } $wday = ($year + intval($year/4) - intval($year/100) + intval($year/400) + intval((13*$month+8)/5) + $mday) % 7; return $wday; } $wday = date2wday($year, $month, $mday); $arr_wday = array("日", "月", "火", "水", "木", "金", "土"); $str_wday2 = $arr_wday[$wday]; $str_wday2 = $str_wday2 . "曜日"; // echo $str_wday2;↑こういうことをしなくても、↓これでできる。
<?php the_date("Y年 n月 j日 l"); ?>
EC-CUBE カスタム・デモINDEX
- 日替わりイベント
- EC-CUBEで送料無料
- 料金表
- 商品登録項目の追加
- パンくず
- 会員ランクで価格を変える
- 会員ランクを設ける
※ スペースの都合で一部公開
受注内容の登録
data/class/pages/shopping/LC_Page_Shopping_Complete.php
カスタムフィールドを抽出して条件分岐
カスタムフィールドの値により様々なアイコンを表示する。
コンナ感じかな?
<?php // echo post_custom('施工実績(ジャンル)'); $hoge = post_custom('施工実績(ジャンル)'); // echo $hoge; if($hoge == '新築'){ $echoimg = 'icon_mini_new.png'; }elseif($hoge == 'リフォーム'){ $echoimg = 'icon_mini_rehome.png'; }elseif($hoge == '外構・ミニハウス'){ $echoimg = 'icon_mini_gaikou.png'; }elseif($hoge == '店舗'){ $echoimg = 'icon_mini_shop.png'; } ?> <img src="<?php bloginfo('template_directory'); ?>/images/<?php echo $echoimg; ?>">