会社概要やトップページをWordpress、商品販売ページをECCUBEとして利用している方も多くいると思います。しかし困ってくるのがトップページなどに新着情報(WordPressの投稿)と新着商品(ECCUBEの商品)を同時に掲載したい場合。この方法ではWordpress内でECCUBEの商品RSSを取得して表示します。ECCUBEにWordpressの投稿を表示させるプラグインなどはあるようですが、ページを簡単に作れるWordpressの方をメインに使いたい場合などに便利です。また、外部にECCUBEがある場合にもこの方法は利用できるため、ショップ専用のサーバから取得することもできます。
RSSの取得
以下の参考URLを参考に、ECCUBEの商品RSSを取得するためのPHPコードになります。
参考URL:http://daisukebe.net/php-rss/
SimpleXml関数を利用します。詳しくはまだ知りませんが、XMLデータを簡単にオブジェクト化してくれるもののようです。
「simplexml_load_string」にRSSのURLを入れることによってRSSを配列として取得できます。しかし、ラピッドサイトのVPS-Sプランではうまく動作しなかったため調べてみたところ、以下の参考URLをもとに修正したら表示されました。
参考URL:http://seoaffiliate.org/archives/2544.html
1 2 3 4 5 6 7 8 9 10 11 12 |
function curl_get_contents( $url, $timeout = 60 ){ $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $ch ); curl_close( $ch ); return $result; } $result = curl_get_contents('http://sample.com/rss/products.php' , 120); $rssData = simplexml_load_string($result); |
RSSの表示
$rssDataに商品RSSの配列が入っているのでforeachで回して表示させます。リンクやタイトルなども表示できます。print_r($rssData);などで確認してみるといいと思います。$RssMaxを最大値としてループを途中で抜けるようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $RssMax = 10; $RssCnt = 0; ?> <?php foreach($rssData->channel->item as $item) : ?> <div class="Box"> <?php echo $item->description; ?> </div> <?php $RssCnt++; if ($RssCnt == $RssMax) { break; } endforeach; ?> |
新着商品RSSの編集
出力するHTMLのクラスなどを編集したい場合は、テンプレートの「/data/Smarty/templates/default/rss/」内のproducts.tplを編集したらできるかと思います。
また、取得する際の順番や表示件数を変更したい場合は「/data/class/pages/rss/LC_Page_Rss_Products.php」を編集します。
ECCUBE商品RSSの順番を変える
このままではID順になっているので、順番を変える方法になります。ECCUBEのコアな部分かと思うので、サイト移転やアップグレードなどする際は注意や必要です。
以下のファイルを修正します。
/data/class/pages/rss/LC_Page_Rss_Products.php
283行目からを変更します。
参考URL:http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=10873&forum=10
修正前
1 2 3 4 5 6 7 |
public function lfGetProductsAllclass(&$objQuery) { // --- 商品一覧の取得 $objProduct = new SC_Product_Ex(); $objQuery->setWhere($objProduct->getProductDispConditions()); $objQuery->setOrder('product_id'); $arrProductLsit = $objProduct->lists($objQuery); |
修正後
1 2 3 4 5 6 7 |
public function lfGetProductsAllclass(&$objQuery) { // --- 商品一覧の取得 $objProduct = new SC_Product_Ex(); $objQuery->setWhere($objProduct->getProductDispConditions()); $objQuery->setOrder('create_date DESC');//作成日順に変更 $arrProductLsit = $objProduct->lists($objQuery); |
また、「create_date DESC」の部分でソートしています。
更新日順:’update_date DESC’
作成日順:’create_date DESC’
ECCUBE商品RSSの取得件数を変更
このままではすべての商品を取得するので、商品が多くになるにつれ重くなっていきます。また、この方法では商品RSSを変更することになるので、新しいRSSを用意した方がいいかもしれません。
ECCUBEのコアな部分かと思うので、サイト移転やアップグレードなどする際は注意や必要です。
順番の変更と同じく、以下のファイルを修正します。
/data/class/pages/rss/LC_Page_Rss_Products.php
283行目からを変更します。
参考URL:http://aerocompact.blog91.fc2.com/blog-entry-44.html
修正前
1 2 3 4 5 6 7 |
public function lfGetProductsAllclass(&$objQuery) { // --- 商品一覧の取得 $objProduct = new SC_Product_Ex(); $objQuery->setWhere($objProduct->getProductDispConditions()); $objQuery->setOrder('product_id'); $arrProductLsit = $objProduct->lists($objQuery); |
修正後
1 2 3 4 5 6 7 8 |
public function lfGetProductsAllclass(&$objQuery) { // --- 商品一覧の取得 $objProduct = new SC_Product_Ex(); $objQuery->setWhere($objProduct->getProductDispConditions()); $objQuery->setOrder('product_id'); $objQuery->setlimit(9);//LIMITを追加 $arrProductLsit = $objProduct->lists($objQuery); |
「setlimit(9)」の括弧内の数字を変えることで取得件数を指定できます。
この場合だと9件取得します。
とても参考になりました!