クリックで画像が指定したものに変わる

2007/10/23 | JavaScript/Ajax

画像クリックで、違う画像が表示される仕組みをJavaScriptで作っていた。最初は1枚の画像に対して、クリックで別画像が表示され、再クリックでもとの画像が表示されるという単純なものだった。しかしいろいろ考えていると
「画像が3枚とか4枚のローテーションになったらどうしよう」とか「スクリプトにファイル名を書き込んだら、画像変更の際はやっぱりプログラムを書き換える?」とか思ってしまい、結局関数にした。JavaScriptで汎用的に使えそうな関数を書くなんてめったにないのでメモっておく。

var overimg=0;
function clickChange(){
  property=clickChange.arguments;
  imgArray=new Array();
  for(i=0;i<property.length;i++){
    if(i==0){
      target=property[i];
    }else{
      imgArray[i-1]=property[i];
    }
  }
  overimg++;
  if(overimg>imgArray.length-1){
    overimg=0;
  }
  document.getElementById(target).src=imgArray[overimg];
}

使い方はこんな感じ。
<a href="javascript:clickChange(‘img1′,’a.jpg’,’b.jpg’,’c.jpg’);"><img src="a.jpg" id="img1" /></a>

第1引数:変化させたい画像のID値
第2引数:元の画像のURL
第3引数:1回目のクリックで表示させる画像のURL
第4引数:2回目のクリックで表示させる画像のURL


という感じで、ローテーションさせたい画像の数だけ引数に指定してやる。ローテーションが最後までいくと、再度もとの画像が表示され、そこから再び同じ手順で・・・。
JavaScriptは苦手なので、できたときはちょっとうれしい気分♪。

WordPressのカスタマイズで

2007/10/18 | SNS/CMS/ブログ

WordPress便利!、ということで現在とある案件をWordPressで構築中。MTでもなんでも同じだけど、テンプレートを作るときは専用のタグというものがある。WordPressの場合は特別なテンプレートエンジンというものもなく、単純にPHPの関数をはめ込んでいるだけだから、PHPユーザには大変親和性が高い。極端なお話になってしまうが、希望する関数がない場合はPHPで作っちゃえばいいからだ。
さて「関数をはめ込めばいい」といっても、WordPress内で定義されている関数は大量にある(軽く2000個以上ある)。そんなの全部把握できるわけがない。で、どんな関数があって、どう使えばいいんだろう、と考えてたら便利なサイトを見つけた。

http://wptags.com/

かなり最強の部類に入るサイト!。WordPressのテンプレートで使える関数の引数解説から使い方説明まで至れり尽くせり。すばらしい。

あともう一個。
http://aoina.com/archives/95

テンプレート作るときに、どんなファイル構成になるのか記録されている。ここで紹介されている記事はすごーい便利。うちでももう少し取りまとめてドキュメントを作りたいな。

フレームワーク関連本

2007/10/14 | マイPHPメモ
最近PHPのフレームワークに関連する本が多くなってきたのでピックアップしてみた。Ethna、Symfony、Zend Framework、cakePHPと主要なところがそろっているので入門にはお奨めだ。mapleはないけど・・・多分主要ではないということなのか・・・。個人的には現状cakePHPを使ってはいるが、今後のことはわからないので少し買ってみるつもり。
お試しとして「PHPフレームワーク完全マスター」がいいかもしれない。だってZend Framework、cakePHP、Symfonyのおすすめ3点セットみたいな感じだからね。
まずはこれから買ってみるとしよう。

でも、実は個人的に、今後の大規模アプリはEthnaかも、と思っている。もちろん大本命はZend Frameworkで間違いないと思うのだが・・・だ。cakePHPは使いやすいし、mozillaだったかnetscapeだったか、そのあたりの構築実績もあるわけだから、大規模向けでも大丈夫なのだとは思う。
でもGreeの構築実績、というのも大きいし、開発者が日本人てのも大きいのではないかと思う。

さて、やっぱりPHPのフレームワーク、淘汰はされてきたけど、まだまだ先は見えない。情報を持ってる方がいたら教えて欲しい。

Xoopsイメージマネージャのバグ

2007/10/11 | SNS/CMS/ブログ

現在Xoopsは旧安定バージョンを使ってるのだけれど、それでもバグがあるようだ。なぜ修正しないのか、それとも気づいてないのか(まさか)・・・不思議(それとも自分だけ?)。
モジュールを作ったりするときに、xoopsCodeTarea関数を使用すると、文字修飾なんかが簡単に出来るようになるが(お世辞にも簡単とは言えないけどね)、それにプラスしてイメージマネージャも利用できるようになる。イメージマネジャーを使うと簡単に画像をアップロードできたり、挿入できるようになったりする。
ここで「画像を挿入しようとイメージマネージャの画面を出したけど、希望の画像がなくてあらためてその画面でアップロードしようとした」ときにエラーが出る。エラーの内容は以下のとおり。

Notice [PHP]: Undefined variable: target in file imagemanager.php line 175

URLの引数で渡された値を使おうとしたけど定義されていない、という感じのエラー。修正はいとも簡単。ちゃんと定義しなおしてあげればいいだけ。このバグ、どうもPHPの設定で、register_globalsがデフォルトでonだった頃の名残のような気がする。

しかし・・・自分が変なファイルをダウンロードしてしまったのだろうか。少なくとも安定版なのだから、こんなバグありえないと思うのだけれど・・・。

URLに自動でパラメータを付加する(その2)

2007/10/10 | マイPHPメモ

パラメータを確実に各ページで持ちまわるためのプログラムを作ってみた。
プログラムは「クラスで提供」ということで、使い方はこんな感じ。

最初に出力するHTMLを用意します。「そんなの別のライブラリに任せてるよ!」と言う場合はアウトプットバッファリング関数(ob_start、ob_get_contents)なんかでうまく取得してください。
というか、元々そういう仕様のプログラムにはめ込んだのでこうなってしまいました。プログラム自体は簡単なので適宜自分で書き換えてください。

include(‘relativepath.class.php’);
$pathObj=new relativepath(‘http://example.com/’);
$pathObj->convert($html);
$params=array();
$params[‘key’]=’value';
$pathObj->attache($params);
$newHTML=$pathObj->result();

なぜ出力予定だったHTMLを引数として与えるかと言うと、今回はoutput_add_rewrite_varを使っていて、ドメインつき絶対パスのリンクには自動処理されなくなるので、コンストラクタの引数でドメイン名を渡して、ドメインつき絶対パスをドメインなし絶対パスにおきかえる処理をしているためだ。

メソッドattacheをつかわなくてもいいので、別の用途にも転用できる。後日コメントをいれて、ソースのダウンロードをできるようにするけれど、とりあえず公開。

relativePath.class.php
—————————-
<?php
  class relativePath
  {
    var $topDomainUrl=false;
    var $html=false;
    
    function relativePath($topDomainUrl)
    {
      if(substr($topDomainUrl,-1)!=’/’){
        $topDomainUrl.=’/';
      }
      preg_match(“#(https?://(.*?))/#i”,$topDomainUrl,$match);
      $this->topDomainUrl=$match[1];
      return true;
    }
    
    function convert($html)
    {
      $converted=  ‘/';
      
      if($this->topDomainUrl){
        $targetText=$this->topDomainUrl.’/';
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
        
        $targetText=$this->topDomainUrl;
        $html=preg_replace(“#<([a|form]) (.*?)(“.$targetText.”)(.*?)>#i”,”<¥¥1 ¥¥2″.$converted.”¥¥4>”,$html);
      }
      
      $this->html=$html;
      return true;
    }
    
    function attache($params=array())
    {
      foreach($params as $queryKey => $queryValue){
        output_add_rewrite_var($queryKey,$queryValue);
      }
      return true;
    }
    
    function result()
    {
      return $this->html;
    }
  }
?>


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