[WordPress] カスタムヘッダーをカルーセル表示に変更する

デフォルトだと画像1枚しか表示できないので、登録されているヘッダー画像をカルーセルでスライドショーしてやろうっていう改造についての覚書。
文中ではSwiperを利用する場合のソースになっているが、別のライブラリでもマークアップ変えたら動くと思う。

なおVer4.9&PHP7環境でこしらえたので他のバージョンでは動かないかもしれない。
(すくなくとも4.7以上は必須)
“[WordPress] カスタムヘッダーをカルーセル表示に変更する” の続きを読む

[WordPress] アーカイブで表示される記事の情報を配列で抽出する

以下は記事IDを配列にするサンプル

<?php 
$post_ids = array();

//@param WP_Post $p
//@param integer $i
array_walk($GLOBALS['posts'], function($p, $i) use(&$post_ids) {
  $post_ids[$i] = $p->ID;
});

var_dump($post_ids);
?>

グローバルにあるWP_Queryの$postsをループ処理すればget_postsとか使う必要はないなと思った。

先日の カスタムフィールドの値を配列で得る やつは、

<?php 
$custom_values= array();

//@param WP_Post $p
//@param integer $i
array_walk($GLOBALS['posts'], function($p, $i) use(&$custom_values) {
  $custom_values[$i] = get_post_meta($p->ID, 'your_key', true);
});

var_dump($custom_values);
?>

こうなる。

上記サンプルはPHP5.3以下だと動かない。

[js] iframeからのアクセスかブラウザでの直アクセスか判別する

同タイトルの質問より。
もうちょっと具体的にソースを書いてみる。

index.html(フレームを呼び出すページ)

iframeのsrc属性で、ファイル名に続けて適当にパラメーターをつける。

<iframe src="inner.html?frame=true"></iframe>

inner.html(フレームの中ページ)

JavaScript

<script type="text/javascript">
(function(){
	 if(location.search.indexOf("frame=true")!==-1){
		document.write("フレームからの呼び出しです");
	}else{
		document.write("直接アクセスしています");
	}
})();
</script>

JavaScriptの場合、パラメーターはlocationで拾えるのでindexOfとかmatchとかで調べる。
イベントハンドらはwindow.onloadとかでもいい。

コンテンツを非表示にしたいならstyleを弄るのが楽かな~。

<!DOCTYPE HTML>
<html lang="ja_JP">
<head>
	<meta charset="UTF-8">
	<title>inner.html(フレームの中ページ)</title>
	<script type="text/javascript">
	(function(){
		 if(location.search.indexOf("frame=true")!==-1){
			document.body.style.display="block";
		}
	})();
	</script>
	<style type="text/css">
		body{display:none}
	</style>
</head>
<body>
<h1>iframeからのアクセスかブラウザでの直アクセスか判別するテスト</h1>
<div style="background:#eee;height:400px">インラインフレームから見てね!</div>
</body>
</html>

PHP

<?php
if(isset($_GET&#91;"frame"&#93;)&&$_GET&#91;"frame"&#93;==ture){
	print "フレームからの呼び出しです";
}else{
	print "直接アクセスしています";
}
?>

PHPの場合はグローバル変数$_GETにパラメータがあるかどうか調べる。

PHPでコンテンツを見えなくするならページの先頭でdieしてしまうのが早いかな。

<?php
if(isset($_GET&#91;"frame"&#93;)&&$_GET&#91;"frame"&#93;!=ture){
	die("トップページからアクセスしてください");
}
?>
<!DOCTYPE HTML>
<html lang="ja_JP">
<head>
	<meta charset="UTF-8">
	<title>inner.html(フレームの中ページ)</title>
</head>
<body>
<h1>iframeからのアクセスかブラウザでの直アクセスか判別するテスト</h1>
<div style="background:#eee;height:400px">インラインフレームから見てね!</div>
</body>
</html>

location.href=”index.html”とかheader(“location:index.html”)とかで強制的に飛ばしてもいい。

[php + js]読み終えたページによって登場人物紹介ページの内容を変える

質問サイト見てたら面白いネタを発見!

私は今、長編小説をHPに公開しようと思っています。
キャラクター紹介のページを作ろうと思っているのですが、
読んだ読者さんによって表示される内容を変えたいのです。
例えば第一章で登場するAとBというキャラがいたとします。
読者さんが第一章を読んだらキャラ紹介のページにAとBのキャラクターの紹介が加わる。
という形にしたくて、cookieを使用しようと思うのですが、
なにぶんこのような操作ははじめてでしてどうしたらよいのかわかりません。
各章の最後のページにクッキーを食べさせるjavascriptを書いて、
キャラ紹介のページでクッキーを読み込み、キャラの説明文を表示したいです。

物語が進むにつれて、他キャラが増えたり、説明文に追記が加わるようにするにはどうしたら良いでしょう。
cookie使用があまりなく、調べましたがよくわかりませんでしたので詳しく教えていただけましたら幸いです。

独自CGI作ってもよさげな発想だと思ったんだけど、PHPとJavaScript使えば比較的簡単に出来るので、
デモとサンプルソース晒しときます。

ページ構成と概要

  • index.html
    小説のトップページ(つまり1ページ目 or 第一章)
  • 2.html
    2ページ目 or 第二章(以降、ページまたは章と同じファイル名で連番にする)
  • cast.php(cast.html)
    キャラクター紹介ページ
  • mychar.js
    クッキー発行スクリプトファイル

トップは1.htmlでもindex.htmでも何でもいいですが、
2ページ目より後のページを 番号+拡張子 にします。

サンプルはこちら

“読み終えたページによって登場人物紹介ページの内容を変える” の続きを読む

[Ajax + PHP] Web2.0的にHTMLソースを隠す方法

MooToolsで遊んでる時になんとなく思いついた。

HTMLソースを完全に隠すことは無理っちゃ無理だけど、サイトの内容をパクられたりしないように防御する事は出来る。
主要な柱は以下3つ。

  • ファイルの置き場所を隠す
  • ソースを読めなくする
  • アクセスを弾く

ロボット対策、右クリック禁止、Flashサイト化、HTMLソースそのものの暗号化するなど色々あるけど、
Web2.0とか言われている時代なのでAjaxを使う方法もアリなんじゃないかなと思ったわけです。

クローラーにキャッシュされず、メールアドレスも拾われず、右クリックしても無駄、「ソースを表示」選んでも主要部分は見えない。
それらの需要を大体カバーするサイト制作方法についての解説とサンプル。

簡単なデモを作ってみた
(デモはサンプルと構成が異なります)

サイト構成例

  • index.html
    メニューボタン、コンテンツ表示エリアを置く
  • style.css
    スタイルシート
  • view.js
    表示とかHTTPリクエストの制御をする
  • reqest.php
    view.jsからのリクエストを受けてページ内容を返す
  • page/about.php, gallery.php, contact.php
    表示するコンテンツページ

“[Ajax + PHP] Web2.0的にHTMLソースを隠す方法” の続きを読む

[php] FirefoxでローカルのPHPファイルが開けなくなった場合

HTMLと同じくPHPもローカルで表示できるFirefox。
いつものようにPHPをプレビューしようとしたら何故かダウンロードのダイアログが出る、そんな症状になった場合の対処法について。

  1. まずプロファイルフォルダを探す。XPだと下記にあると思う。
    C:\Documents and Settings\ユーザ名\Application Data\Mozilla\Firefox\Profiles\プロファイルID
  2. そのフォルダの中からmimeTypes.rdfを探してテキストエディタで開く。
  3. application/x-httpd-phpと書いてあるRDFを全部消す
  4. Firefox再起動

RDFの例

 <RDF:Description RDF:about="urn:mimetype:application/x-httpd-php"
                   NC:fileExtensions="php"
                   NC:description=""
                   NC:value="application/x-httpd-php"
                   NC:editable="true">
    <NC:handlerProp RDF:resource="urn:mimetype:handler:application/x-httpd-php"/>
  </RDF:Description>

[mootools&PHP] Ajax.Request でファイルの読み書きをする

mootoolsのRequestクラスを使うとXMLHttpRequestが簡単に行えます。
jQueryやprototype.jsもやり方は大体同じです。(クラスの名前からして似てる)
公式サイトのDemoにAjax.Requestのサンプルがいくつかありますが、
送受信だけでは面白くないので、簡単にファイルの読み書きをして掲示板っぽいものを作ってみようー。


直接見る »

▼用意するもの(カッコ内は説明とzipで使ってるサンプルの名前)

  • HTMLファイル(index.html)
    この記事にコピペ用ソースがあります
  • PHPファイル(sample.php)
    <?php ?>が書いてあればいい
  • テキストファイル(data.txt)
    空ファイル。拡張子はなんでもいい
  • mootools ver1.2のコアファイル(mootools.js)
    圧縮したのでもなんでもいい。moreはいらない

※文字コードは全てUTF-8にすること。

Step-by-Step形式で書いています。(全10ステップで2ページ分割)
“[mootools&PHP] Ajax.Request でファイルの読み書きをする” の続きを読む

[PHP]サイト内のページに外部のRSSを表示する

前にwordpressでRSSを取得して表示という記事を書いたが、普通のWebサイトでもRSSの表示は出来る。
ヘッドラインとしてトップページにブログのRSS表示するもよし、ニュースリンクとしてランダム表示するもよし。
使うのはWordpressで使われてるのと同じRSSパーサーMagpieRSSです。

手っ取り早く動作を見てみる::

  1. magpierss-0.72ダウンロードして解凍
  2. 表示したいページと同じ階層にフォルダUP
  3. 表示したいページをPHPにする
  4. 表示したいページにrequire('magpierss-0.72/rss_fetch.inc');を書く
  5. $rss = fetch_rss($url);として、$urlに表示したいRSSのフルパスを書く
  6. print_r($rss);を書く

cacheディレクトリは自動的に作成される。(magpierssフォルダ内の不必要なものは削除してもいい)
ずらずらっとRSSが表示されると思います。が、多分文字化けしてるはず。
“[PHP]サイト内のページに外部のRSSを表示する” の続きを読む

[PHP]テンプレートエンジンとベンチマーク

PHPで動作するテンプレートエンジンはちょっと使いたいだけならクラスタイプが便利ですが、速度が気になるところ。
Smarty Benchmarksで主なテンプレートエンジンのベンチマークサンプルが見れます。
使われてるベンチマークのソースも入手できるので自分で比較を試したい時に便利かも。

テンプレートベンチマーク
上の画像はvar_loop 50 iterationsの結果。
10と比べると順位が入れ替わってるんですが、smartyは高機能だから仕方ない感じだろうか。

“[PHP]テンプレートエンジンとベンチマーク” の続きを読む

[XHTML]buttonタグの挙動について

フォーム送信などするときに使うボタンはinputとbuttonがあります。
ボタン要素にもnameとvalueをつければ、ほかのフォームエレメントと同じように値を送信することが出来ます。

buttonタグだと、ボタン要素そのものにつける値とボタンに表示するラベルを違うものに出来るので、
送信ボタンとか作るときには便利なんですが、IEだけ挙動が違うので注意が必要です。

<input type="submit"  name="test" value="send" />

<button type="submit" name="test" value="send">submit</button>

“[XHTML]buttonタグの挙動について” の続きを読む

[PHP]オブジェクト指向プログラミング

初心者な自分用メモ、みたいなもんです…。
把握までの過程をメモってるので同じく初心者には分かりやすいかも?
考え方はJavacriptも同じだと思う。

名称

とりあえず呼び方がややこしい。初心者はまずここが覚えられない。

  • メソッド(method)
    クラス内にある関数(function)のこと
  • プロパティ(property)
    クラス内の変数(variable)のこと。メンバ変数も同じ意味
  • コンストラクタ(Constructor)
    初期化用のメソッド。オブジェクト生成時にやりたいことを入れる
  • 継承(Inheritance)
    クラスを元に新しいクラスを作る。上手いこと作らないとかえって面倒なことになるらしい

“[PHP]オブジェクト指向プログラミング” の続きを読む

XHTML&UTF-8なメールフォームphpを晒してみる

自分好みのメールフォームが欲しかった。ので作った。

なんか配布されてるのってHTMLにEUCじゃないですか。
最近組むサイトは99%の割合でXHTMLにUTF-8なので、お問い合わせフォームだけ文字コード変えたりdocktype変えたりしなきゃいけないのは面倒くさい。
なら自分に都合のいい条件で作ればいいじゃない!と妖精さんが。

説明とかはこっち(ZeroMail)に。
テスト環境が狭いので何かしらバグはあるんじゃないかな…多分。
見つかれば出来る限り潰します。ので教えてください。是非。

余談…
Templateカテゴリにあるformサンプルは全部これの初期設定だったり。