久しぶりにGoogle MAPに触る機会があったのでこのサイトで配布している以下の二つのスクリプトを修正しました。
いまさらですけど。(^^;)
久しぶりにGoogle MAPに触る機会があったのでこのサイトで配布している以下の二つのスクリプトを修正しました。
いまさらですけど。(^^;)
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のプラグインを作成しました。
こういう小ネタって、クラスを作るほどでもないわりに何だかんだでコーディングに時間がかかったりして、なかなか手が付けられないのですが、ようやく作りました。
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ライセンスとします。
ただし、気に入っていただけた方からの寄付は歓迎します。
テンプレートタグ内に記述された住所を元に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ライセンスとします。
ただし、気に入っていただけた方からの寄付は歓迎します。