住所からGoogle MAPに変換するショートコードなどを修正しました。

久しぶりにGoogle MAPに触る機会があったのでこのサイトで配布している以下の二つのスクリプトを修正しました。

いまさらですけど。(^^;)

Smartyテンプレートに直接SQLを記述するSmartyプラグイン

Smartyを使ってるとselectメニューなどを作成したいときにPHP側とテンプレート側の両方を触らなくちゃいけなくて、たまにめんどくさいことがありませんか?

以下で紹介するプラグインは、Smartyテンプレートに直接SQL文を記述することが出来ます。(MySQL専用です!)

MVCの観点からすると若干違和感がある方も多いかもしれませんが、SQLのデバッグ等の作業は劇的にやりやすくなります。

あと、うまく説明できないのですが$smarty->cachingをtrueにした場合も、PHP側の記述がシンプルになります。

インストール方法

以下のソースを「block.sql.php」というファイル名でpluginsディレクトリに保存してください。

<?php

function smarty_block_sql($params, $content, &$smarty, &$repeat){
  if( isset($content) ){
    if( $data = mysql_fetch_array($smarty->_block_sql['result']) ){
      $smarty->assign($data);
      $repeat = true;
    }else{
      $repeat = false;
    }
    return $content;
  }else{
    if( isset($params['sql']) && strlen($params['sql']) ){
      if( isset($params['dbh']) && $params['dbh'] ){
        $smarty->_block_sql['result'] = mysql_query($params['sql'], $params[$dbh]);
      }else{
        $smarty->_block_sql['result'] = mysql_query($params['sql']);
      }
      $data = mysql_fetch_array($smarty->_block_sql['result']);
      $smarty->assign($data);
    }
  }
}

?>

使用方法

PHP側で、データベースハンドルをassignしてください。
これは必須ではありませんが、やったほうがベターです。

$smarty->assign('dnh', $dbh);

テンプレート側は以下の通り。

<select name="myselect">
{sql dbh=$dbh sql="select id, value from my_table limit 0,5"}
<option value="{$id}">{$value}</option>
{/sql}
</select>

クエリー結果のフィールド名がそのまま変数名として使えるところがミソです。

ちなみにネストには対応していません。(試してもいません。)

動作環境

データベースはMySQLのみですが、簡単な構文なので、PostgreSQL等への対応はこれを参考に自作していただければ幸いです。

ライセンス

MITライセンスとします。
ただし、気に入っていただけた方からの寄付は歓迎します。

RSSをパースしてリンクを作成するSmartyプラグイン

今更なんですが、RSSをパースしてリンクを作成するSmartyのプラグインを作成しました。

こういう小ネタって、クラスを作るほどでもないわりに何だかんだでコーディングに時間がかかったりして、なかなか手が付けられないのですが、ようやく作りました。

ダウンロード

Smartyテンプレート内で以下のように使用します。

<dl>
{rss url="http://feedproxy.google.com/Firegoby" loop=5}
</dl>

出力結果は以下のような感じです。。

<dl>
<dt>2009/01/11 03:06:00</dt>
<dd><a href="http://feedproxy.google.com/~r/Firegoby/~3/D57-hzXfCro/blog-post.html">モバイルサイトでキャリアを判別する</a></dd>
<dt>2009/01/10 02:51:00</dt>
<dd><a href="http://feedproxy.google.com/~r/Firegoby/~3/KYc6BOybBro/mailtourl.html">携帯サイトのmailtoでのurlエンコード</a></dd>
</dl>

RSSのパース結果は、URL毎にキャッシュしています。

キャッシュの有効期限は、デフォルトは3600秒でcacheパラメータで設定可能です。

ライセンス

MITライセンスとします。
ただし、気に入っていただけた方からの寄付は歓迎します。

住所からGoogleMapに変換するSmartyプラグイン

テンプレートタグ内に記述された住所を元にGoogle MAPを埋め込むSmartyプラグインを作成しましたので公開します。

ダウンロード

このプラグインを利用すると以下のような簡単なコードをSmartyテンプレート内に記述するだけでGoogleMapが表示されます。

{addr2gmap addr=東京都千代田区永田町1-7 height=400 width=500 zoom=18}

バグやご質問等があれば、コメントに投稿していただけば、なるべく早くご回答します。

Smartyについて勉強したい方は、以下の書籍がとてもオススメです。(Amazon)
Smarty入門~PHP5+テンプレート・エンジンでつくるMVCアプリケーション~
プラグインの自作方法も詳しく解説しています。

更新

2010/12/20
Google MAPS API V3に対応したのでAPIキーの入力が不要になりました。
また、lat、lng属性を追加しました。

ライセンス

MITライセンスとします。
ただし、気に入っていただけた方からの寄付は歓迎します。