‘Web Design’カテゴリーの記事

DISTINCT »

CakePHP といえば、このあいだ早速けつまづいたことがあったので、書き留めておく。

あるフィールドの値を重複なしですべてリスト化したかったのだが、

$keyLists = array();
$SQLStr = 'SELECT DISTINCT column FROM dbTables ORDER BY forSortColumn ASC';
if ($Res = mysql_query($SQLStr)) {
    while ($Row = mysql_fetch_row($Res)) {
        $keyLists[] = $Row[0];
    }
}

これを、findAll() とかでできるかと思ったら、DISTINCT をどう指定していいのかわからなくて、結局上記コードのままになっている。で、これをメソッドとしてモデルに追加したのだが……こういう場合、これで正解? それとも別の手がある?

追記

自前のクエリを発行する場合は query() が使えるということがわかった。これならコントローラーで気軽に(?)使える。この場合、返ってくるのはCakePHPモデルの他のAPIを使った時と同様の構造を持つ配列。
ただ、これを使用した場合の新たな疑問は、DBテーブル名にプレフィックスを付加している場合、他のAPIではプレフィックスを意識せずに使えるけれど、query() の場合は意識しないといけないらしい、ということ。
ビュー内で使用する時、常にこのプレフィックスを付けて($Variable['PreFix_Table']['Column'] とか)呼び出すのは、何だかちょっと気持ち悪い感じがする……。統一して $Variable['Table']['Column'] のように使いたい場合はどうすれば?
というわけで、それが解決するまでは、自前メソッドのままの方が使いやすいので、query() の使用は保留。

さらに追記── AS の使用 (080701)

もしかしたら、下記でいけるかもしれない。未確認。そのうち試してみよう。

$this->User->query('SELECT DISTINCT column FROM prefix_users AS User ORDER BY forSortColumn ASC');

Tail-Lagoon @ 15:39   |   PageUp

CakePHPの命名規則 »

CakePHPシステムデザイン(最新規約)

まず何か作ってみようと思って、真っ先に困惑したのが命名規則。データベースのテーブル名やらモデル名やらコントローラとか……ある命名規則があって、必ずしも遵守する必要はないけれど、守っておけば作りやすい(簡単便利?)らしい。というわけで、フォーラムの中にちょうどこれに関する記事を見つけたので、ブックマーク。

CakePHPシステムデザイン(最新規約)

Tail-Lagoon @ 18:29   |   PageUp

WordPressのある特定の投稿に、固有のCSSを適用したい »

WordPress

(カスタムフィールドの利用)

 WordPressで記事を書いていて、その記事投稿の一部分にのみ独自のCSSを適用したい、という要求がしばしば発生する。その場合の対処は、

  1. 独自のidもしくはclassを割当て、style.css等の共用CSSファイルにその部分を記述する。
  2. 適用したいタグの中に直接 style="…" とアトリビュートとして記述する。
  3. 投稿部分に <style> タグを記述する。
  4. JavaScript を用いるなどして、強引にスタイルを変更する。
  5. WordPressのカスタムフィールド欄にCSS文を記述し、テンプレートファイルでカスタムフィールドを <head> 内の任意の場所に出力できるように修正する。

 といった方法が考えられる。しかし……

続きを読む… »

Tail-Lagoon @ 17:56   |   PageUp

CakePHP 関連リンク »

CakePHP

これからちょっとフレームワークを使ってみようかな、と思って……。
いろいろ調べたところ、CakePHPが最もとっつきやすそうなので、これを使うことに決めた。

Tail-Lagoon @ 11:46   |   PageUp

ブログに検索機能をつけた(ver.2) »

 以前の記事で、TypePad に独自の記事検索機能がないことを書いた。そして、サポートの勧めに従い Google カスタムサーチを設置して試してみた(これが ver.1)が、やはり幾つかの欠点が気になっていた。

  • 記事の新規追加・修正が検索結果にリアルタイムで反映されず、Google への登録待ちになる。
  • しかも、すべての記事が Google に登録されるとは限らない。
  • ページまるごとインデックスされるので、メニューやナビゲーションの文言まで検索対象となり(ノイズが混じり)、的確な検索結果が得られない。

続きを読む… »

Tail-Lagoon @ 01:22   |   PageUp

文字整形 »

 日本語を含む文字列で、全角英数字やアルファベット大文字を半角小文字に変換および半角カナを全角カナに変換する関数。検索キーワードを統一したい場合などに有効。(検索文字列および対象文字列の双方を変換してマッチさせる。ただし、表示する文字は変換前のものをそのまま使用したい場合は、データを二重化し、変換前と後をそれぞれ用意する必要あり)

<?php
function ABC2abc($Word) { // 文字列のうち英数文字を半角・小文字に統一
    $Word = mb_strtolower($Word, 'UTF-8');
    $Word = mb_convert_kana($Word, 'KVa', 'UTF-8');
    // option  K:半カナ→全カナ  V:濁点文字を一文字  a:全英数→半英数
    $Word = mb_strtolower($Word);
    return $Word;
}
?>

 例 : Japan2008, JAPAN2008 などの文字列を一律 japan2008 に変換

補足

 mb_convert_kana について、上記のように文字コードを指定するか、あるいはPHPスクリプトの内部エンコーディングを最初から指定しておく(下記例)かしないと、うまく機能しない場合がある。

<?php
mb_internal_encoding("UTF-8");
?>

Tail-Lagoon @ 15:31   |   PageUp

XOOPS を簡単に始めたい »

 XOOPS は初心者泣かせの CMS ツールだと思う。
 まずインストールした後の使い方を調べるのに泣かされる。そもそもインストール直後は空っぽだから、目的に応じてモジュールを追加インストールしなければいけないのだが、では「例えばこういう使い方をしたい場合はどのモジュールを使えばいいのか」というような基本的なことからまずわからないのである。
 こういう場合、正直「XOOPS Cube 日本サイト」は、あまり初心者には向いていないと思う。よくわからないけど有用そうな情報がたくさんある。でもある程度 XOOPS を使った経験と知識がないうちは、さっぱり要領を得ない。

 で、色々悪戦苦闘しているうち見つけたのが、「ホダ塾」というサイトで提供している「ホダ塾ディストリビュージョン」である。最初から、サイト構築に必要そうなモジュールが組み込まれていて、XOOPS インストールと同時にモジュールまでインストールできる。少なくとも、わけもわからずモジュールを調べ回ったり捜したりバージョンの互換性を気にしたりといったことから開放される。あとは各モジュールを自分で試してみて、要らなければ削除していけばいい。(それから、インストール時に UTF-8 が選択できる点も、ありがたい。普通に Japanese としてインストールすると文字コードが EUC になってしまうのだが、やはり UTF-8 を使いたいじゃないか)
 しかも「うさぎにもできるXOOPS Cube入門♪」というサイトがあって、こちらでは「ホダ塾ディストリビュージョン」のインストールから使い方の基礎まで解説してくれている。
 新規インストールする場合、今後はこの2つのサイトを活用しようと思っている。

リンク

  • ホダ塾
    2008年3月3日、ホダ塾ディストリビューション"HD1.0 for XCL2.1"リリース
    (XCL って何だろうと思ったが、よくよく考えたら XOOPS Cube Legacy の頭文字だった)
  • うさぎにもできるXOOPS Cube入門♪
  • XOOPS Cube 日本サイト
    (一応こちらもリンクはしておこう。ある程度習熟してからなら、きっと色々お世話になるはず)

Tail-Lagoon @ 19:03   |   PageUp

TypePad テンプレートに関するメモ »

インデックス・テンプレートは、出力するファイル名が決まっている=1ページのみ作られるファイル用のテンプレート。つまり、新たに追加した場合、自分でファイル名を決定し、アクセス方法はそのファイル名にリンクすればよいということになる。

※これに対して、アーカイブ・テンプレートは、出力するファイル名が決まっていない=複数ページ作られるファイル用のテンプレート。テンプレートの種類と数は既にシステムで決められているので、新たにテンプレートを追加することはできない。既存テンプレートファイルの変更修正のみ可能。

グローバル属性(どのMTタグにも使えるアトリビュート)
    remove_html="1"
        文字列からHTMLタグを取り除く
        ex. あいうえお<br />かきくけこ → あいうえおかきくけこ
    generate="1"
        (現時点では不明。何かねこれ?)

【エントリーの一覧表示関連】

<MTEntries> のソートに関する属性(アトリビュート)
    sort_by
        表示順の並べ替えを行うフィールドを指定。
        オプション値は、title, status, modified_on, author_id, excerpt のいずれか。
        (注 : この属性を記述しない場合は、投稿順ソートとなるため、
           通常は無記述で構わない)
        ex. sort_by="title"

    sort_order
        表示順の設定。ascend(昇順)もしくは descend(降順)。
        ex. sort_order="ascend"

    ex. <MTEntries sort_order="ascend">

テンプレート・モジュールについては、ナレッジ・ベースよりもマニュアルページの方が詳しいようだ。ナレッジ・ベースでは掲載されているモジュール数が少ない。

記事概要表示
    ex. <$MTEntryExcerpt remove_html="1" encode_xml="1"$>
    通常RSS出力で使用。特に概要記事を別に用意しない場合は、むしろ下記の方が良いか?

記事本文表示
    ex. <$MTEntryBody words="N"$>
    記事本文をN文字分表示(かつ、HTMLタグは除去される)。全文を表示したい場合は属性不要。

Tail-Lagoon @ 02:00   |   PageUp

Windows IE でレンダリングがおかしい時 »

Look at the 1st line
Sample

 動的出力をするページで、時々、ドキュメントタイプ宣言(!DOCTYPE)より前──つまりソースの第1行──にHTMLコメント文などを出力するプログラムがあるが、これをやると Windows IE の描画がおかしくなることがある。

 散々HTMLソースやらCSSをあちこち確認したあげく、原因がこれだとわかった時の虚脱感はなんともいえないものだ。

 対策は、とりあえずプログラムの該当箇所をコメントアウトして何も出力させないようにするか、DOCTYPE より後になるように調整すれば済むことだけど、プログラム作者が自分じゃない場合などは、バージョンアップの際に元に戻ってしまったりして、しかもこちらもそんな対策をしたことなどすっかり忘れてしまってたりするから、思い出すまであれやこれやするはめになるのだ。

 もし他にどこにも原因になりそうな箇所がないのに、どういうわけか WinIE で表示が変だという場合、ソースの第1行がどうなっているか見落としてはいけない。忘るべからず。

Tail-Lagoon @ 20:01   |   PageUp

htaccess による PHP の設定 »

.htaccess ファイルを用いて、Webサーバ(Apach)における PHP その他の動作設定を変更することはよくあるが、大概サイト構築時の初期の段階において行い、あとは殆ど顧みることがないため、そのうちすっかり忘れてしまうものだ。そして毎回新しいサイトを作るたび、何だったっけ? と探し回るはめになるので、下記に記録。

デフォルトで表示されるページのファイル名を変更したい

DirectoryIndex sample.php index.php index.html
(先に記述したものほど表示の優先順位が上になる)

拡張子 .html のままで PHP を走らせたい

AddType application/x-httpd-php .html .htm

セキュリティ上、下記項目は必ず phpinfo() で値をチェックし、違っていたら下記値で設定すること(必須)

php_flag register_globals Off
php_flag track_vars On
php_flag display_errors Off

  • register_globals オプションを無効にするのは、EGPCS(Environment, GET, POST, Cookie, Server)変数のグローバル変数登録を不可にするため。
  • その代わりに track_vars オプションを有効にして、上記変数をグローバル連想配列 $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER として参照可にする。
  • display_errors はエラー表示するかしないかの設定。テスト環境では有効にしておいた方が開発しやすいのだが、本番(公開)環境では、エラー表示により重要なパスや変数名が表示されてしまうのを防ぐために無効化する。
  • ついでに書いておくと、チェックで使用した phpinfo() のファイルは、必ず削除しておくこと!

※ PHP の httpd オプションについては下記サイトに詳しい。
http://jamesthornton.com/php/japanese/configuration.directives.html

***

↓以下は、PHP じゃないけど、htaccess 関連としてついでに書いておくと

拡張子 .html のままで SSI を使いたい

Options +Includes
AddType text/x-server-parsed-html .shtml .html .htm

(Options は SSI 実行可能領域を設定するのだが、もともと実行可なら必要なし)

※ httpd の設定に関する参考サイト
http://www.tagindex.com/other/htaccess.html

Tail-Lagoon @ 16:03   |   PageUp