ECCUBEなどにWordPress等の新着記事を表示(画像有) | WEBlo-気ままにあれこれ

WEBlo-気ままにあれこれ

WEB&デザイン

こちらでは気ままにメモ&ブログを書いてます。
WPネタが多いかも
(なんでもっと早くしなかったんだろ・・・;;)

最近、ショッピングサイトはEC-CUBE制作、
サイト内の新着情報はWordPressで構成していくことが多くなってきました。

EC-CUBEはショッピングサイトとしての使い勝手は良いけれど、新着情報などをブログ感覚でやりたい人にはちょっとだけ不向き。
新着情報編集PHPのエディタ部分にプラグインを入れてもいいけど、育成される新着情報ページはシンプルすぎて
件数が多くなればとってもとっても見にくいです(笑)
かといって、新着ページをWPのような見栄えに制作・追加となると、触らなきゃいけないファイルが・・・最低4つかな?それにDBも。
結構大変なのです(笑)
なので、商品部分と新着情報(ブログ)は切り離して管理したほうが効率もよくてグッドなのです。

ということで、WPの新着情報(RSS)を取得して表示する方法をご紹介

試行錯誤し、やっと安定してくれましたよ。

1、表示したいページの<head>内にhttps://www.google.com/jsapiを読み込む

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

2、以下スクリプトを<head>内に記入、もしくは外部JSで読み込む

※ファイルの保存形式はUTF-8にしないと、文字化けしてしまうので、ご注意!

<ココから>
google.setOnLoadCallback(initialize);

google.load("feeds", "1"); //APIを読み込む

function initialize(){
 
 var feed = new google.feeds.Feed("読み込みたいRSSのURL");
 var noPhoto = ("<img src='画像がなかった場合のNo-Image画像URL' />");
 
 feed.setNumEntries(5); //読み込む件数を設定
 feed.load(dispfeed);
 
 function dispfeed(result){

  if(!result.error){
   var container = document.getElementById("feed"); //HTMLに書き出す対象のIDを指定

   for (var i = 0; i < result.feed.entries.length; i++) {

    var entry = result.feed.entries[i];

    var entryDate = new Date(entry.publishedDate); //日付を取得(以下二桁処理)
    var entryYear = entryDate.getYear();
    if (entryYear < 2000){
     entryYear += 1900;
    }
    var entryMonth = entryDate.getMonth() + 1;
    if (entryMonth < 10) {
     entryMonth = "0" + entryMonth;
    }
    var entryDay = entryDate.getDate();
    if (entryDay < 10) {
     entryDay = "0" + entryDay;
    }
    var date = entryYear + "/" + entryMonth + "/" + entryDay + "";

    var entryImg = "";
    var imgCheck = entry.content.match(/(src="http:)[\S]+((\.jpg)|(\.JPG)|(\.jpeg)|(\.JPEG)|(\.gif)|(\.GIF)|(\.png)|(\.PNG))/); //画像のチェック(拡張子はここで増やす)
    if(imgCheck){
     entryImg += '<img ' + imgCheck[0] + '">';
     } else {
      entryImg += noPhoto;
    }

    container.innerHTML += entryImg 
    + '<h3><a href="' + entry.link + '">'
    + entry.title + '</a></h3>'
    + '<p>'+ date + '</p>'
    + '<p>' + entry.contentSnippet.substring(0,120)
    + '<a href="' + entry.link + '">・・・続きを見る</a></p></div>';
   }

   var linkBlank = container.getElementsByTagName('a'); // リンクに'_blank'を設定
   for (var j = 0, l = linkBlank.length; j < l; j++) {
    linkBlank[j].target = '_blank';
   } //target'_blank'ここまで
  }
 }
}
google.setOnLoadCallback(initialize);



5、HTMLに出力

<div id="feed"></div>

ECーCUBEであれば、新規ブロックを作成して<div id="feed"></div>と記入。


4、CSSで見栄えを整える

HTMLへの出力は

    container.innerHTML += entryImg
+ '<h3><a href="' + entry.link + '">'
+ entry.title + '</a></h3>'
+ '<p>'+ date + '</p>'
+ '<p>' + entry.contentSnippet.substring(0,120)
+ '<a href="' + entry.link + '">・・・続きを見る</a></p></div>';

の部分なのでclass属性を追加してあげるといいですよ。

entryImg・・・画像
entry.title ・・・タイトル
date・・・日付
entry.contentSnippet.substring(0,120)・・・抜粋本文
entry.link・・・記事へのURL


サンプル)画像のみ左へ、他本文は右へ、であれば

    container.innerHTML += '<div class="left">' + entryImg +'</div>'
    + '<div class=right><h3><a href="' + entry.link + '">'
    + entry.title + '</a></h3>'
    + '<p>'+ date + '<br /><br />'
    + entry.contentSnippet.substring(0,120)
    + '<a href="' + entry.link + '">・・・続きを見る</a></p></div><div class=clear></div>';

<css>

#feed{
 width:300px;
}
#feed h3{
 margin: 0;
}
#feed img{
 width:100px;
}
.left{
 float:left;
 width:100px;
 height:100px;
 overflow:hidden;
}
.right{
 float:right;
 width:200px;
 height:100px;
 padding:0 0 20px 10px;
}
.clear{ clear:both; border-bottom:1px solid #FF9;}

いろいろな書き方を試してみたけど、これが一番安定してますね。
※試しているのはWPだけ

本日のメモでした(*^_^*)