カテゴリー
EC-CUBE osCommerce PHP

WordPressにEC-CUBEのカテゴリとか表示するチート技の実験

はい。これはマジでチートです。
ってゆーか、CMSとかDB使ってんのに何やってんだ?ってぐらい原始的かつ急場凌ぎ的なモノです。ええ。

今俺ンとこで準備してるEC-CUBEがあって、その公開ディレクトリ(htmlの方)にWordPressをインストールしてます。
EC-CUBEはヘッダのイメージ下にカテゴリの表示を含むドロップダウンナビゲーションを表示してます。
WordPress側はEC-CUBEに合わせてテーマをこしらえてるんですが、普通にやってればWordPressのテーマにEC-CUBEのSmartyでもって生成してる部分はリアルタイムで反映できません。
色々小難しいことやると可能なんですが、今の希望としてはEC-CUBEのドロップダウンナビゲーションをWordPressでも表示したいってコトで、特に商品のカテゴリ表示がしたいとします。

前提としてはEC-CUBEでブロック追加してカテゴリのリスト表示が出来てるコトで、その辺はスンゲー業師の方々がそこかしこで解説してらっしゃるのでココでは触れません。

とりあえずEC-CUBE側で下記みたいな感じにブラウザ表示されてると思いねぇw
ブラウザで表示したEC-CUBE画面を右クリックしてソース表示すればイイです。
まぁ別にカテゴリだとかリストタグだとかもあんまり関係ないんですけどネ。ええ。
※表示コードはEC-CUBEのカスタマイズによって変りますのでこの通りでは有りません。

</div>
<!--▲HEADER-->
<div id="container">
<div id="topcolumn">
<!-- ここからカテゴリ -->
<ul>
<li> <a href="http://hogehoge.com/products/list.php?category_id=7"> カテゴリA</a>
<ul>
<li> <a href="http://hogehoge.com/products/list.php?category_id=42"> 子カテゴリ1</a> </li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=11"> 子カテゴリ2</a> </li>
</ul>
</li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=33"> カテゴリB</a>
<ul>
<li> <a href="http://hogehoge.com/products/list.php?category_id=37"> 子カテゴリ3</a> </li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=36"> 子カテゴリ4</a> </li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=35"> 子カテゴリ5</a> </li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=34"> 子カテゴリ6</a> </li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=38"> 生物</a> </li>
</ul>
</li>
<li> <a href="http://hogehoge.com/products/list.php?category_id=40"> カテゴリC</a>
<ul>
<li> <a href="http://hogehoge.com/products/list.php?category_id=41"> 子カテゴリ7</a> </li>
</ul>
</li>
</ul>
<!-- ここまでカテゴリ -->
</div>
<div id="leftcolumn">
<!-- ▼かごの中 -->
<div>

ようは<!– ここからカテゴリ –>から<!– ここまでカテゴリ –>までの間をWordPressに持って来れればイイんですよ。
何となく解ったと思いますが、その通りです。アレです。アレして希望のコードを引っぱってくる訳です。

で、そのアレですが、当初PHPの file_get_contents() でも使って http://hogehoge.com/index.php を取り込めばイイじゃんトカ安易に考えたんですが、そのままだとブラウザ表示じゃなくて生コードをそのまま持ってきてしまう様で使えませんでしたw
んでしかたがないのでいつもお世話になってる wget を php から使う方法でヤりました。

んじゃザクっと書きます

まずWordPressの管理ページから「外観」→「テーマ編集」に行って、カテゴリリストを表示したいテンプレートを選びます。
で、そこに wget に -O オプション付けてgetしたファイルを別名保存して、そいつを file_get_contents で読込んで preg_match_all で切り出すイメージで書きます。

<?php
exec('wget -O "menu-text" http://hogehoge.com/index.php');
$str = file_get_contents('menu-text');
preg_match_all('/<!-- ここからカテゴリ -->(.+?)<!-- ここまでカテゴリ -->/s',$str,$menu);
echo $menu[0][0];
?>

みたいな呪文を書きますw
exec(”) に wget コマンドを書いてEC-CUBEのブラウザで表示した状態のトップページをmenu-textって名前で保存してます。
で、そいつを改めて file_get_contents で読込むって寸法ですw
echo $menu[0][0] の部分にカテゴリリストが書き出されます。
preg_match_all で $str から切り出して $menu に array で格納されるので、該当箇所(<!– ここからカテゴリ –>から<!– ここまでカテゴリ –>まで)が複数あっても対応できてるんじゃないかと。
ただ多次元配列になってるので一度確認の為に print_r($menu) とかすると解りやすいと思います。
あと別に<!– ここからカテゴリ –>とかみたいなコメントじゃなくても<div>タグのIDやCLASS指定でもイイんじゃないかな?場合にもよるけどw

まぁコレって別にEC-CUBEやWordPressに限った話じゃないので色々利用できそうです。ええ。

なんかアヤシイけど大丈夫でしょうw
まぁそんな感じ。

%d