PHP関連

入力フィールドを複数追加できるタイプのカスタムフィールドを扱う際の注意点

Custom Field Templateプラグインを使用すると、投稿時に入力フィールドを任意に増やせるカスタムフィールドを作ることが出来ます。

↓こういうの

WS000013

追加ボタンを押すことで、フィールドを増やしていけるわけですが、入力はともかく、取り出し方には注意が必要です。

通常、カスタムフィールドを取り出す場合

<?php $meta_values = get_post_meta($post_id, $key, $single); ?>

$post_id:投稿ID
$key:カスタムフィールド名
$single:取得方法。配列ならfalse、1つめだけならtrue

というふうに取り出すのですが、これで取り出すと、複数フィールドの並び順がばらばらで取得されてしまいます。

しかも投稿を編集するたびに並び順が変わるという困った状態に。

なぜ上から順に取り出してくれない・・・

ということで、検索したところ、こちらの方法で解決しました。

Custom Field Template(カスタムフィールドテンプレート) | WordPress 編

複数フィールドを上から順に取り出す場合はsqlをつかって取り出します。

複数フィールドのカスタムフィールド名が「Hoge」とした場合


<?php
global $wpdb;
$query = "SELECT * FROM ".$wpdb->postmeta." WHERE post_id = ".get_the_ID()." AND meta_key = 'Hoge' ORDER BY meta_id ASC";
$cf = $wpdb->get_results($query, ARRAY_A);

$Hoge = array();
if($cf){
foreach($cf as $row){
$Hoge[] = $row['meta_value'];
}
}
?>

これで複数フィールドの並び順(meta_id)順でデータを取得することができます。

nandani | 2013年05月18日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連

cakePHP2.x系をレンタルサーバで運用する祭の注意点

テスト環境で作成したcakePHP2.xを使用したウェブシステムを、レンタルサーバにアップしたところ

Error: SQLSTATE[HY000] [2005] Unknown MySQL server host ’(ホスト名):(ポート番号)′ (3) requires a database connection

というエラーが出てしまいました。

調べてみたところ、どうやらcakePHPはバージョン2からPDOを使ってデータベース接続を行っているらしい。

ってことはこのレンタルサーバはPDOが使えない・・・?

おまけにユーザが勝手にインストールできないタイプのサーバだから、詰んだ!\(^0^)/と思ったのですが、phpinfoを見る限り、モジュール入ってるし、実際問い合わせたところ使用は可能ですよ、とのこと。

その回答いわく、PDOでデータベースに接続する場合は、ホスト名とポート名を別々に指定する必要があるそうです。

つまり、

'host' => '127.0.0.1:3306',

という風に記述するのではなく(↑↓ホスト名とポート名は適当です)

'host' => '127.0.0.1',
'port' => '3306',

と、ポートはポートで記述しなくてはならなかったわけです。

テスト環境ではポートは気にしなくても大丈夫だったので盲点でした。

 

参考サイト

CakePHP2系とCakePHP1系のDB設定周りの違い | ミラボ

nandani | 2013年05月18日 | コメント(0) | トラックバック(0) | PHP関連

cakePHPでvalidatesを使う場合の注意事項

cakePHPにて

$this->(モデル名)->validates();

を使用する場合は、事前に

$this->(モデル名)->set();

を忘れずに設置する。

$this->(モデル名)->set();
$this->(モデル名)->validates();

setが無いとなんでもtrueで返ってきてしまいます。

nandani | 2013年04月12日 | コメント(0) | トラックバック(0) | PHP関連

TwitterのAPIの仕様変更

Twitterのタイムラインを

http://twitter.com/statuses/user_timeline.xml?id=(アカウント名)

でデータ取得していたのですが、仕様変更に伴い上記では取得できなくなったです。

調べたところ、URLにバージョン情報を含まないといけなくなったみたい。

以降は

http://api.twitter.com/1/statuses/user_timeline.xml?id=(アカウント名)

で取得するようにしましょう。

 

参考サイト

Twitter APIの仕様変更によってあちこちのアプリでエラーが出てるみたいなので、その対処方法の話。 &raquo; とりあえず9JP

Twitter REST APIでタイムラインを取得して、Twitter-text-phpでアンカー表示 | はるる*Weblog

nandani | 2012年10月15日 | コメント(0) | トラックバック(0) | API関連 | PHP関連

WordPressでページネイション

このプログラムは、コリスさんのサイトにある「WordPressにプラグイン無しでページネーションを設置する方法」を少し改造したものです。

(さらに…)

nandani | 2012年09月04日 | コメント(0) | トラックバック(1) | CMS関連 | PHP関連

マップ表示用スクリプトをバージョンアップしました[バージョン1.4b4]

コメントにてバグ報告をいただいたため、マップ表示用スクリプト【Google Map API v3版】を1点修正しました。

■今回修正されたバグ
緯度経度がマイナスになることを考慮していなかったため、一部地域のみに複数マーカーが集中して表示されると、中心地がおかしくなる。

修正前のスクリプトで表示した場合

修正後のスクリプトで表示した場合

※なお、マーカーが日本のみにある場合は、旧バージョン(v1.3b)をお使いでもこの問題は起きません。

ダウンロードはこちら(最新バージョン:version1.4b4)

■使い方を見る:マーカー個別版マーカー複数板

location.href (Javascript)と $_SERVER['HTTP_REFERER']; (PHP)

PHPで

$_SERVER['HTTP_REFERER'];

を実行すると、リンク元のURLを取得することが出来ます。

これを利用するとダイレクトアクセスを防いだり、どこから飛んできたのかを調べることが出来るのですが、Javascriptの

location.href = "リンク先URL";

で飛んでこられると、取得できない場合が有ります。

どういう場合かというと、「IE8以下」の場合。

またお前か・・・

素直に「a href="リンク先URL"」を使うか、formのsubmit、PHPの「header("リンク先URL");」などの方法で飛ばすことにしましょう。

最近はIE9やFirefoxでチェックしてしまうので、見落としがちになってしまいます。注意せねば。

MTのデータベースの文字コード変換【Movable Type】

サーバ移転の話が続きますが、MTを移転すると、管理画面に入ったとき、文字化けしているときがあります。

大体そういう場合は、データベースの文字コードがおかしかったりします。

特に「latin1_swedish_ci」の場合。

最近のレンタルサーバであれば「utf8_general_ci」に自動的になってくれたりするところもあるのですが、専用サーバなどの場合、phpMyAdminなどで何も考えずにデータベースを作ると大体この「latin1_swedish_ci」になります。

それでも、これからMTをインストールする分には、特に文字化け問題は発生しないのですが、問題はサーバを移転したとき。

以前のサーバでは「latin1_swedish_ci」でも正常に表示できていたはずなのに、移転した途端文字化けが発生したりします。

というわけで、このような場合は、「utf8_general_ci」に文字コードを変換してあげましょう。(MTの文字コード設定がUTF-8の場合)

(さらに…)

nandani | 2012年06月02日 | コメント(0) | トラックバック(0) | CMS関連 | PHP関連

プラグイン作るときは自動保存に注意【WordPress】

WordPressにて投稿フォームに設置するようなプラグインを作る場合は、自動保存に注意しましょうというメモ。

投稿フォームに設置するということは

add_action('save_post', 'hoge_save');
function hoge_save( $post_id ) {
	$wpdb->query("UPDATEやINSERTのSQL");
}

みたいな保存用のプログラムを書くことになると思うのですが、問題は自動保存。

この「add_action('save_post', '実行する関数名');」というのは、ボタンを押して保存するタイミングだけでなく、自動保存時にも実行されてしまうのです。

(さらに…)

nandani | 2012年05月25日 | コメント(0) | トラックバック(2) | CMS関連 | PHP関連

WordPressのサイトマップを作る【プラグインなし】

WordPressのサイトマップといえば「Sitemap Generator」プラグインが有名でいつもお世話になってますが、今回はプラグインなしで作ってみることにしました。

早速ですが、出来上がったものがこちら。

(さらに…)

Copyright(c) 2010 - 2024 ダリの雑記