テンプレート内で関数処理する

2006/12/05 | Smarty

smartyのテンプレート内で関数を使う必要が生じた。単に「関数で処理して表示」というわけではなく、いったんプログラムで処理して処理した戻り値をsmarty変数に返す、という処理をしたい。
いろいろ調べた結果、関数群を記述したクラスからオブジェクトを生成し、smartyオブジェクトに登録する、という方法が有効だとわかった。
具体的には、

class myClass
{
 function myfunc($params,&$objSmarty){
  return (戻り値);
 }
}

とクラスを定義しておき、これを以下の手順で登録する。

$myObj=new myClass;
$objSmarty->register_object(‘myObj’,$myObj);

テンプレート内で上記関数を呼び出して戻り値を変数に格納するには以下のように記述する。

{myObj->myfunc assign=returnValue}

何がやりたかったかというと、smartyに対して文字列で与えられた変数を分割して、生成した配列を個別に扱いたかった、ということ。
きっと、もっとスマートな方法があると思うのだが思いつかなかった。まぁ、これでもできているので、とりあえず解決。

Read the rest of this entry »

想定外の文字にマッチしてしまう

2006/12/03 | MySQL

mysqlで用語集を作ってみたのだが、ちょっとした問題がでた。
この仕組みでは読み仮名を登録するようにしてあるのだが、五十音で整理したいため、読み仮名の最初の文字を取り出して別カラムで格納している(例えば「ガチョウ」という単語があった場合は、そのままでは「ガ」になってしまうが、ちょっと処理をして「カ」を取り出している)。
ここで問題。「ツ」という文字を検索するときに「ツ」で検索して表示されるのはもちろんだが「テ」で検索しても表示されてしまう。また「ル」という文字を検索するときに「ト」で検索しても表示されてしまう。なぜ?、なぜ?。
理由を突き詰めなかったが、なんとなく想像がついたのでカラムをbinaryとして保存するよう変更した。これで解決。
きっと少し考えれば理由もわかるとは思うがあえて調べない(面倒だし、理由を知らなくても直感でわかることだから)。でももし親切に教えてくれる人がいらっしゃるようでしたら、コメントに残してください。

アクセス解析でリファラ取得(久々のアクセス解析ネタ)

2006/12/02 | アクセス解析

久々のアクセス解析ネタ。といっても目的はアクセス解析ソフトではない。
自分のサイトを訪れてくれる人がどういったキーワードで検索してきたか調べて、動的にコンテンツを入れ替える手法を実現することが目的。
いまやアクセス解析といえばGoogle Analytics。普通にアクセス解析するならこれにまさるものはないだろう。なんといってももともと商用利用されていたものをGoogleが買収して無償で提供しているのだから。しかし超多機能なためどこから手をつけていいのか迷うのは事実だ。
あと一般によく使われているのは忍。ウェブを見て小さい手裏剣のアイコンがくるくるまわっているのを見たことがある人も多いだろう。こちらはもっとお手軽で初心者でも使いやすい。
余談はさておき、これらのアクセス解析ツールはJavaScriptのコードを埋め込んで解析を実施する。これによりリファラ(ウェブサイトの参照元)取得を実現できるからだ。リファラを取得できるということは、検索で使用されたキーワードを取得できるということになる。
JavaScriptでは以下のコードでリファラを取得できる。

var ref=document.referrer;

これをPHPに渡せばよい。具体的にはこんな感じ。

<script type="text/javascript">
document.write("<script type=’text¥/javascript’ src=’logging.js?ref=" + document.referrer + "’><¥/script>");
</script>

何をやっているかというと、JavaScriptからJavaScriptを呼び出すコードを書いている。しかし実際呼び出しているlogging.jsは単なるJavaScriptではなくPHPで記述することになる(拡張子jsでphpが動作するように設定しておく必要あり)。ここは拡張子phpのファイルを呼び出してもいい。要はphpで必要な処理をしてJavaScriptを出力しておくようなコードを書くわけだ(ちなみに忍はここで広告を表示するJavaScriptを書いている)。

結局上記のコードでは$_GET[‘ref’]にリファラが入ることになるが、このままでは実はNG。php内で処理する際には勝手にキーワードが日本語に変換されているからだ。一見便利そうだが、後で処理に手間取ることになる。
よって検索結果のURLのごとく%AB%6C・・・といったURLのまま取得したいわけだが、JavaScriptからphpに渡す際にエンコードして渡せばいい。
具体的には、document.referrerで渡しているところを以下のように、
escape(document.referrer)
として渡せばよい(escapeはJavaScriptのURLエンコード関数)。なおここでエンコードしたからといって、うっかり受け取り側のphpプログラムでデコードしてはいけない。元の木阿弥だ。受け取ったリファラのURLから必要な部分のみ取り出して、そこだけをデコードする。これでキーワードの取得が容易になる(はず)。

いつかはアクセス解析プログラムに手を出したい(暇になれば・・・)。

ウェブ運用作業管理ツール

2006/12/01 | その他

ウェブは「いったんつくったらそれで終わり」ということは少なくて、ほとんどの場合更新作業が発生する。更新作業のやり方はさまざまで、初回構築時にCMSツールまで作りこんで、更新作業は基本的に業者に発注しない・・・ということはまず少ない。たいていの場合はウェブの持ち主(発注者)は制作者(受注者)に依頼して更新作業をしてもらうことがおおいはずだ。またその場合作業内容はメールやファックス、電話等で依頼することが多い。こうなると更新作業が多くなってきた場合に「どの作業が完了でどの作業がまだか」といったことの管理が煩雑になり、ひいては「あっ、この作業やり忘れてた」なんてことになりかねない。
いろいろ考えて、作業管理ツールを作ってみた。いってみれば掲示板のようなものなのだが、いろいろ付加機能をつけてみた。

○ログイン機能
 関係者のみしか見る必要がないので。
○依頼書き込み機能
 書き込みがあると関係者全員にメールを配信して通知する(いわばML機能)。
○返信機能
 依頼に対しての質問や作業報告などをおこなう機能(投稿があると関係者全員にメール配信)。
○ファイルアップロード機能
 資料をファイルで渡す場合に、この掲示板にアップロードして渡す機能。
○完了フラグ機能
 作業が完了した依頼に対して完了フラグを設定可。これにより未完了の作業一覧を表示できる。

こういった仕組みをつくってみた。今、とあるお客さんとのやり取りにこれを使っているのだが、すごく便利!。今後昨日拡張しようかと思っている次第。

もしどなたかこの仕組みに興味をもたれた方がいたらコメントでも残してください。無償で提供しますから。どうぞ遠慮なくお気軽に。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net