Moral Hazard!!

ドラマーが音楽やホームページやガラクタを作るよ。

WordPress REST APIから記事を取得して表示する(PHP)

No Comment html,css,php,wordpress,,

PHPで一度REST APIをサイト内に取り込み、静的ページのjsで取得することでクロスドメイン制限を回避。

log.php

$data = json_decode(file_get_contents('https://example.com/wp-json/wp/v2/posts?_embed'));

foreach ($data as $value) {
    $title = $value->title->rendered;
    $link =  $value->link;
    $year = substr($value->date, 0, 4);
    $month = substr($value->date, 5, 2);
    $day = substr($value->date, 8, 2);
    $date = $year . '/' . $month . '/' . $day;

    echo '<li><a href="' . $link . '" target="_blank">' . $date . ' ' . $title . '</a></li>';
}

javascript

	function HTML_Load(_html, replace) {

		var xmlhttp = new XMLHttpRequest();
		xmlhttp.open("GET", _html, true);
		xmlhttp.onreadystatechange = function () {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				var data = xmlhttp.responseText;
				var elem = document.getElementById(replace);
				console.log(elem);
				elem.innerHTML = data;
				return data;
			}
		}
		xmlhttp.send(null);
	}
	HTML_Load('log.php', 'id-name'); //挿入したいid名

WordPressブログから静的サイトに記事を取得し、javascriptで表示する (REST API)

No Comment html,css,php,wordpress,,,

静的サイト(example.com)にWordpressブログ(blog.example.com)から投稿記事を取得する備忘録。

例) 他Wordpressブログから、2020年の投稿記事を10件取得して2020年1月1日以降の記事を表示。

※クロスドメイン制約により、ドメインをまたいで取得することは出来ない。
(その場合はJSONPを使うなりPHP使うなりFeedから取り込むなり)

var root = document.getElementById("id-name");//読み込み先サイトのID

function getRequest(props) {
	var xhr = new XMLHttpRequest();
	xhr.open("GET", encodeURI(props.uri));
	xhr.onload = function () {
		if (xhr.status !== 200) {
			console.log('Status error');
		} else {
			props.callback(JSON.parse(xhr.responseText));
		}
	};
	xhr.send();
}

function forEach(props, callback) {
	for (var i = 0, max = props.length; i < max; i++) {
		callback(props[i], i)
	}
}

getRequest({
	uri: "https://blog.example.com/wp-json/wp/v2/posts?page=1&per_page=3&after=2020-01-01T00:00:00",
	callback: function (posts) {
		forEach(posts, function (post) {
			var title = post.title.rendered;
			var link = post.link;
			var year = post.date.substr(0, 4);
			var month = post.date.substr(5, 2);
			var day = post.date.substr(8, 2);
			var newElement = document.createElement("li");
			newElement.innerHTML = '<a href="' + link + '" target="_blank"><span>' + Number(month) + '/' + Number(day) + '</span><span>' + title + '</span></a>';

			root.appendChild(newElement);
		})
	}
});

出典

Zenlogicでphpのファイル変更が反映されるのに時間がかかる件

No Comment html,css,php

あのZenlogicを使っている案件があり、とにかくコンパネの使いにくさ、度重なるサーバ障害に辟易しているのだが。

現在稼働している他社開発のシステムがphp7で動かない上に、サーバ上で別verのphpを動作させることができない仕様のため、開発をphp5.6で行っている。

で、phpファイルへのキャッシュがかなりきつく、反映にやたら時間がかかるので、当該サイトのZend OPCacheを停止。

サイトルートの.htaccessの先頭に

php_flag opcache.enable Off

を付加。

EC-CUBE3 商品マスター、受注マスター、会員マスターページ表示時にデフォルトで全検索結果を表示

No Comment html,css,php,

EC-CUBE Version 3.0.16

商品マスター、受注マスター、会員マスターページでは、遷移してから「検索する」を押さないと全検索結果が表されないので、アクセス時に全検索結果が表示されるように改修。
/app/template/admin/Customer/index.twig
/app/template/admin/Product/index.twig
/app/template/admin/Order/index.twig

各ファイルのjavascriptが書かれている40行目
$(function() {
の次の行に

if($("#result_list_main").length == 0){
    $("#search_form").submit();
}

ペースト。
※/app/template/admin 以下が空の場合は、テンプレートファイル
/src/Eccube/Resource/template/admin/
の中身をコピーしてアップしておく。
上記ソースそのものを変更しないこと。
参考URL

Dreamweaver CS6ではphp5.4のシンタックスチェックをサポートしない件(雑翻訳)

No Comment html,css,php,

DreamweaverCS6でphp5.4から実装されている配列のショートハンドを書こうとしたらシンタックスエラーが出た。
Adobeのサイトで質問があったけど、要約すると

「CS6ではphp5.4以降はサポートしないからCC買え」

との事。
詳細は以下。

Q:PHPの配列でショートハンド使おうと思ったら構文エラーが出るんだけど?

A:そりゃそうさ、DreamweaverCS6はPHP5.3までしかサポートしないよ。
CCならショートハンドを含むphp5.4構文をサポートしてるよ。

Q:OK、CS6は今後アップデートしないってこと?

A:いいえ。CS6は買い切りで永久ライセンス、CCは期間契約(月額・年額)という違いがある。
貴方はCS6をこれ以上支払うことなく永久に使えるけど、これ以上アップデートしない。
CCはお金を支払い続けている間、アップグレードし続ける。

Q:なるほどね、サンキュー。

…こう考えると古いソフト使ってるなぁ…。
そろそろ環境変えないといけないとは思いつつ…

以下、原文。
https://forums.adobe.com/thread/1393664?tstart=0

If you use the shorthand [] in PHP for arrays, dreamweaver thinks it is syntax error.

That's correct. Dreamweaver CS6 supports only PHP 5.3 syntax.
Dreamweaver CC supports the 5.4 syntax (including shorthand array).

OK, so there will be no update for the CS6 version?

No. That's the difference between buying CS6 on a perpetual licence and CC on a subscription basis. You can use CS6 indefinitely without paying any more, but it will not be updated. CC gets regular updates, but is available only on a subscription basis.

OK, makes sense. Thank you.