2010年11月19日金曜日

 

【WordPress】ギャラリー機能を便利に使うメモ

使いづらいWordPressのギャラリーをけっこう使えるギャラリーにする方法 - Web Design Recipes

使い方とパラメータなど。

ラベル:


 

【WordPress】プラグイン-WP Custom Fields Search で全角スペースの複数ワード検索

テンプレートを変更する方法

[WP Custom Fields Search] で全角スペースでも検索できるようにしたい - WordPress > フォーラム
/* テンプレート「function.php」追加 */
function replace_double_byte_space_cs_query_string() {
    $_REQUEST['cs-all-1'] = str_replace( ' ', ' ', $_REQUEST['cs-all-1'] );
}
add_action( 'init', 'replace_double_byte_space_cs_query_string' );

リンク先では、テンプレートに関数を追加してフォームの全角スペースを半角スペースに置換して対応してます。
$_REQUEST['cs-all-1']」はWP Custom Fields Searchのフォーム要素の「name」。
(全てのカスタム・フィールドを対象に、ボックスの0から始まるフォーム要素数:cs-all-1)

プラグインを変更する方法

上記の方法だとテキストフォームが複数あったら、その分だけ追加しなくてはいけないので、WP Custom Fields Searchのファイルを変更するようにしました。

/* プラグイン「wp-custom-fields-search」ディレクトリ内「extra_search_fields.php」 */
class WordsLikeComparison extends LikeComparison {
    function addSQLWhere($field,$value) {
        $value = trim(mb_convert_kana($value,'s','UTF-8'));
        $words = explode(" ",preg_replace('/\s+/u', ' ', $value));
        $like = array(1);
        foreach($words as $word) {
            $like[] = $this->getLikeString($field,$word);
        }
        return "(".join(" AND ",$like).")";
    }
    function describeSearch($value){
        $value = trim(mb_convert_kana($value,'s','UTF-8'));
        return sprintf(__(' contains "%1$s"','wp-custom-fields-search'),join('"'.__(" and ",'wp-custom-fields-search').'"',explode(" ",preg_replace('/\s+/u', ' ', $value))));
    }
}

preg_replace('/\s+/u', ' ', $value)」で空白文字(連続した場合も)を半角スペースに変換します。
trim()」で先頭と末尾の空白文字を削除します。
mb_convert_kana()」はテンプレートの文字エンコードがUTF-8でプラグインはShift-JISなので空白を発見できなくなるため。
preg_replace()」は1つ以上の連続した空白文字を半角スペースに置換します。

ラベル:


2010年11月13日土曜日

 

【PHP】携帯でセッション【モバイル】

第5回 携帯サイトでセッションを取り扱う - gihyo.jp > 初めての携帯サイト構築
携帯でuse_trans_sidを使ったセッションの扱い 前編 - 携帯サイトをつくろう。
PHPでケータイからセッションを使う場合の設定方法 - ke-tai.org

リンクの内容は大体同じです。

方針

・Cookie未対応の携帯(Docomoとか)を考慮してURLにセッションIDを付加する
・セッションIDはアクセスごとに変更する

セッションの設定

「.htaccess」で設定する場合
php_flag session.use_only_cookies Off
php_flag session.use_trans_sid On
「php.ini」で設定する場合
session.use_only_cookies= 0
session.use_trans_sid = 1
PHPファイルで設定する場合

コードの一番最初に記述します(「session_start()」より前)。

ini_set('use_only_cookies' , '0');
ini_set('session.use_trans_sid', '1');

セッションIDの再生成

続いて、PHPのコードは以下のようにします。
これによりセッションののっとりを防ぎます。

PHP5の場合
session_start();
session_regenerate_id(true);
PHP4の場合
session_start();
// セッションを退避
$sess_tmp = $_SESSION;

session_destroy();
// セッションIDを再生成
session_start();
session_regenerate_id();
// セッションを元に戻す 
$_SESSION = $sess_tmp;

ini_set(‘session.use_trans_sid’, 1)とすると全てのフォームもリンクもセッションIDを付加してくれるが、URLをhttp://~の絶対パスで記述すると付加してくれません。外部サーバは不可。
同様にSSLを使ってhttp://~とhttps://~を行き来することも出来ません。サイトの全てをどちらかで作る必要が有ります。

今日のメモ「携帯におけるセッションとセキュリティ(PHP)」 - -OASIS-
携帯電話向けWebアプリのセッション管理はどうなっているか - ockeghem(徳丸浩)の日記

session_regenerate_id()」を使うと通信が途切れたり、戻るボタンでセッションが継続出来ないデメリットも有ります。
その場合、セッションIDの再発行は行わず、Zend FrameworkやPEAR::Net_UserAgent_Mobileで判別して、Cookieが使えない場合は上記の方法を取ります。

ラベル: ,


2010年11月9日火曜日

 

【WordPress】プラグイン-More Fields

More Fields - WordPress
[WordPress]More Fields - www.gnnk.net
・日本語化ファイル
More Fieldsの使い方 - wordpressを極メル Heaven


カスタムフィールドを『ボックス』というグループとして纏めて扱います。『Detail』と『more-fields』のボックスが有ります。


『Add new input box』で追加する画面です。カスタムフィールドを投稿用・ページ用、又は両方に使うか選べます。ボックス名はテンプレートで使うかもしれないので、日本語ではない方が良いのかもしれません。


『edit』でカスタムフィールドを編集します。『Add new Field』で追加します。


カスタムフィールドの設定をします。


『Field title』はフォームのラベルの様なものです。『Custom field key』はテンプレートで値を取得する時に使うかもしれないので、日本語ではない方が良いかもしれません。『Caption』はフィールドの説明です。フォーム要素の下に表示されます。


セレクト・ラジオ・チェックボックスの選択要素は「,」で区切って、デフォルト値には「*」をつけます。


ボックスにカスタムフィールドが追加されました。


ページの新規追加ではこのように表示されます。ボックス名の『more-fields』、『Field title』の『所在地』、『Field type』はセレクト、『Caption』が表示されてます。
『Values』に入力したリストが選択出来ます。デフォルト値は『関東』です。

テンプレートでの使い方
設定した日本語の『Field title』を使いたいので、このようになります。
テンプレートを編集するのが苦でなく、キーと値だけ使うのであれば普通のカスタムフィールドの使い方で良いと思います。
「More Fields」の関数がいくつか有りますが、クラスの仕様が変わったのか、そのままでは使えませんでした。

/* テンプレートファイル */
  $mf =$more_fields->data_loaded[_plugin]['more-fields'];
  foreach ($mf[fields] as  $value ) {
    $fields[$value['key']]=$value;
  }
    more_fields($fields['address']['key'],"<p>$fields['address']['label']:","</p>");
/* 出力例 */
<p>所在地:関東</p>

ラベル:


2010年11月8日月曜日

 

【PHP】HTMLパーサ関数

PHPメモ/HTMLの解析 - Walrus, Digit

色々なHTMLパーサ関数は有りますが、依存なしで、ただ解析するシンプルな関数です。

/* HTMLパーサの動作例 */
$html = "<p>Hello, World!</p>";
$result = parse_html($html);
print_r($result);

第1引数がHTMLソースで、第2引数が要素を分ける最大数。
返り値は、タグなら配列で、文字列はそのまま入ります。

/* 出力 */
Array
(
    [0] =< Array
    (
        [string] => <p>
        [tag] => p
        [is_tag] => 1
        [is_start] => 1
        [is_end] => 
    )
    [1] => Hello, World!
    [2] => Array
    (
        [string] => </p>
        [tag] => p
        [is_tag] => 1
        [is_start] => 
        [is_end] => 1
    )
)

タグごとに処理とかは以下のような感じでしょうか。

/* HTMLパーサの動作例 */
$html = "<p><b>Hello, World!</b><br /><i>Hello, World!</i></p>";
$result = parse_html($html);
$allow_tag = array('b', 'br');
foreach ($result as $parse ) {
    if (is_array($parse) !== true)
        $str .= $parse;
    else if( in_array($parse['tag'], $allow_tag) === true)
        $str .=  strtr($parse['string'], array("'" => "&#039;", '"' => "&quot;")) ;
    else
        $str .= htmlspecialchars($parse['string'], ENT_QUOTES, 'UTF-8');
}
echo $str;
/* 出力 */
&lt;p&gt;<b>Hello, World!</b><br />&lt;i&gt;Hello, World!&lt;/i&gt;&lt;/p&gt;

>br /<」の解析結果は次の様になります。

Array
(
    [string] => >br /<
    [tag] => br
    [is_tag] => 1
    [is_start] => 1
    [is_end] => 1
)

ラベル:


This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google