freo 公式の更新情報を管理画面に表示する
【2017/05/23】従来のGoogle Feed API が2016/12/15以降使用できなくなったので、YQL APIによるJavascriptに変更しました。
【2019/06/18】さらにYQL APIが2019/01/03以降使用できなくなったので、自力でRSSを取得する方法に変更しました。
参考:Google Ajax Feed APIを使わないでRSSを取得してみた(メサイア・ワークス)
【2019/06/18】さらにYQL APIが2019/01/03以降使用できなくなったので、自力でRSSを取得する方法に変更しました。
参考:Google Ajax Feed APIを使わないでRSSを取得してみた(メサイア・ワークス)
なお、従来の js/gAjax.js は不要なので削除し、またtemplates/internals/admin/header.html に
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
と
<script type="text/javascript" src="{$freo.core.http_url}{$smarty.const.FREO_JS_DIR}gAjax.js"></script>
がある場合はその部分を削除してください。
RSS を取得する PHP
<?php
//明示的に時差を表記する
date_default_timezone_set('Asia/Tokyo');
// カレントの言語を日本語に設定する
mb_language("ja");
// 内部文字エンコードを設定する
mb_internal_encoding("UTF-8");
// RSSのソース元(RSS1=RDF専用)
$rss = simplexml_load_file("http://freo.jp/info/news/feed");
//RSSフィードの取得指定数
$rss_num = 5;
// NEWマークの表示日数
$mark_date = 15;
// RSSフィードの分だけループ
$i=0;
foreach ($rss->item as $item) {
//名前空間接頭辞の定義を取得
$dc = $item->children('http://purl.org/dc/elements/1.1/');
//タイトル・詳細・リンク・日付を、変数に格納する
$json[$i]['title'] = (string)$item->title;
$json[$i]['desc'] = (string)$item->description;
$json[$i]['link'] = (string)$item->link;
//日付の整形
$json[$i]['date'] = date("Y/m/d H:i", strtotime((string)$dc->date));
// NEWマークの表示
$json[$i]['check_date'] = (time() - (strtotime((string)$dc->date))) / (24 * 3600);
if($json[$i]['check_date'] <= $mark_date) {
$json[$i]['new_mark'] = '<em>New!</em>'; // NEWマークをつける場合に表示するHTML要素
} else {
$json[$i]['new_mark'] = '';
}
//指定数になったら、取得を止める
$i++;
if($rss_num <= $i) break;
}
//ヘッダーを吐き出して終了
header('Content-Type: application/json; charset=UTF-8');
echo $_GET['callback'] . "(" . json_encode($json). ")";
?>
これを update_rss.php という名前で freo の js ディレクトリに保存します(libs/freo ディレクトリだと403エラーが出るので不可)
PHP を表示させる Javascript
$.getJSON(
freo_path + "js/update_rss.php?callback=?",
function(json) {
//出力先要素(ID指定)を変数に格納
var container = document.getElementById("feed");
var htmlstr = '<ul>';
//フィードの分だけループ
for (var i = 0; i < json.length; i++) {
htmlstr += '<li><a href="' + json[i]['link'] + '" target="_blank" rel="noopener">' + json[i]['title'] + '</a> (' +json[i]['date'] + ')' + json[i]['new_mark'] + '<br />' + json[i]['desc'] + '</li>';
}
// 要素に出力
htmlstr += '</ul>';
container.innerHTML = htmlstr;
}
)
// 通信エラーの表示
.fail(function(jqXHR, textStatus, errorThrown ) {
$("#feed").append('<span class="attention">エラーが発生しました。</span>' + textStatus + ' ' + jqXHR.status + ' ' + jqXHR.statusText);
});
これを update_rss.js という名前で freo の js ディレクトリに保存します。
管理画面テンプレートを編集
- templates/internals/admin/default.html
- templates/internals/admin/header.html
を以下のように編集します。
templates/internals/admin/default.html の3行目に以下を挿入
<h2>freo 更新ニュース</h2>
<div id="feed"></div>
templates/internals/admin/header.html の </head> 直前に以下を挿入
<!--{if $smarty.request.freo.work == 'default' or $smarty.request.freo.work == 'status'}-->
<script type="text/javascript" src="{$freo.core.http_url}{$smarty.const.FREO_JS_DIR}update_rss.js"></script>
<!--{/if}-->
これで管理画面にログインした時のステータス画面でのみ freo 公式サイトの更新情報が表示されます。
元ネタは10pressに記載されていたもの
- 最終更新:2019-06-19 20:58:55