h19e_logo.png

プログラミングメモと、子供とのお出かけ記録
スポンサーサイト

一定期間更新がないため広告を表示しています

| - | | - | - | pookmark |
FuelPHP1.7 Bootstrap3 Twig pagination
FuelPHP1.7で、parserがTwigでCSSフレームワークがBootstrap3の際のpaginationの使い方


Controller内の記述

$this->_view_dir = テンプレートのディレクトリ
$this->_param = テンプレートに渡す値

//Model_Crudを継承したUserクラス
$total = User::count(); //件数を取得しておく Model_Crud使用

//ページネーションクラスの生成
$pagination = Pagination::forge('pagination',array(
    'pagination_url' => '/users/list/?',     //対象のページURLが /users/list/の場合
    'total_items' => $total
    )
);

//情報取得 
$user_list = User::find(array(
    'limit' => $pagination->per_page,
    'offset' => $pagination->offset
));

$this->_param['total'] = $total;
$this->_param['user_list'] = $user_list;
$this->_param['pager_link'] = $pagination->render();

return Response::forge(View::forge($this->_view_dir . '/list.html',$this->_param));

---------


テンプレートの記述

{{ pager_link|raw }}

でページネーションが表示されます。

Twigの設定に関しては、こちらを参考にしてください。


設定ファイルの記述

//ページネーション用の設定ファイルを準備します。
fuel/app/config/pagination.php

return array(
    'active' => 'bootstrap3',
    'bootstrap3' => array(
        'uri_segment' => 'page', //システム全体で共通のページネーション用パラメーターを指定
        'per_page' => 20,  //システム全体で共通のLIMIT数を設定
    ),
);

あえてpagination用に設定ファイルを準備したくない場合や、そのページだけ設定を変えたい場合は、
Controllerに直接記述します。

$pagination = Pagination::forge('pagination',array(
    'pagination_url' => '/users/list/?',     //対象のページURLが /users/list/の場合
    'total_items' => $total,
    'uri_segment' => 'page',
    'per_page' => 20
    'name' => 'bootstrap3'
    )
);

基本的にはシステム全体である程度共通にした方が良いかと思うので、設定ファイルを準備するのがオススメです。





 
| プログラミングメモ | 14:35 | comments(0) | trackbacks(0) | pookmark |
FuelPHP Configの使い方 基本編
FuelPHP の Configの基本的な使い方をまとめてみました。

ますは場所ですが、
fuel/app/config/config.php
にあります。

このファイルを開くと、

return array(

);


に囲まれる形で、設定が記述されています。

例えば、途中 security の記述がされている箇所があります。

return array(
    :
    :
    'security' => array(
        :
        :
    ),
);


この値は、各Controllerファイルから、下記の様な記述で配列として取得できます。

Config::get('security');


また、config.phpファイルに、下記の様にmax_size を追加すれば、

return array(
    :
    'max_size' => 100,   //追加
    :
);


Controllerから、

$max_size = Config::get('max_size');


で、100を取得できます。

後は、同様にしてconfig.php に設定値を追加していけばOKですね。

ただ、ある程度グルーピングして設定したい場合は、下記のようにも記述できます。

return array(
    
    'size' => array(
        'min' => 10,
        'max' => 100
    ),
);


Controllerからは、

$max_size = Config::get('size.max');

で100を取得できます。

$size = Config::get('size');

だと、sizeの配列をそのまま取得できます。

フォームの選択肢のリストとかに使うと便利ですね。



これだけ覚えればほぼ困ることはないのですが、さらにもっと設定値が多くて別ファイルで管理したい場合の記述方法です。

先ほどの、sizeの配列を別ファイルに記述します。

ファイルの配置場所は、

fuel/app/config/size.php


とします。

ファイルの中身は、

return array(  
    'min' => 10,
    'max' => 100
);


Controllerからは、

Config::load('size',true);
$max_size = Config::get('size.max');


で100が取得できます。

config.php以外に設定値を記述したい場合には、このように
Config::load メソッドを使用します。

第一引数に、読み込むファイル名を記述します。
ファイル名をそのまま配列のキーとして使用する場合は、第2引数は trueを記述しておきます。
配列のキーが管理しにくくなるので、あまりオススメはしませんが、ここを空にすると、config.phpの配列の階層と同一になります。

Config::load('size');
$max = Config::get('max');


で、100が取得できます。

また、第2引数に別の文字を記述することもできます。

Config::load('size','length');
$max_length = Config::get('length.max');


で、100が取得できます。

また、Controllerでわざわざ loadしたくないときは、
config.php の always_load.config に sizeを追加すれば OKです。

'always_load' => array(
    
    'config' => array(
        'size',  // 追加
    ),
),


記述は、

'size' => true,

'size' => 'size',  //この記述が一番しっくりくるかな


でも同様です。

先ほどの様に、lengthにしたい場合は

'size' => 'length'


でOKです。

と、基本的な使い方は以上になります。



もし、Twigをテンプレートとして使用している場合は、こちらも便利です。
http://h19e.jugem.jp/?eid=98



 
| プログラミングメモ | 18:04 | comments(0) | trackbacks(0) | pookmark |
FuelPHP + Twig で便利な記述方法 2つ
FuelPHP + Twigで標準で使える機能なんですが、意外と知られていない便利な記述を2つ

1. configファイルに記述している配列をテンプレートから直接取得 

FuelPHP では、fuel/app/config/config.php に サービス全体で使用する配列を下記のように記述することができます。

return array(
     ...
    'options' => array(
        'category' => array(
            '1' => '和食',
            '2' => '洋食',
            '3' => 'ラーメン'
            ...

config.php に設定した配列は、controller から、以下のように取得して使用できます。

$category_options = Config::get('options.category');


しかし、この配列をViewでのみ使用する場合、controllerで取得して、Viewに配列を渡すという記述をしなくとも、

config('options.category')で直接テンプレートから取得することが出来ます。

例えば、
1. セレクトボックスを生成したいとき

<select>
{% for category_key,category_name in config('options.category') %}
<option value="{{ category_key }}">{{ category_name }}</option>
{% endfor %}
</select>

2 . カテゴリーIDを名前に変換したいとき

{% set category_options = config('options.category') %}
{{ category_options[category_id] }}

2. Formへ入力された値をテンプレートから直接取得 

FormへPOSTされたデータは、controller内では、

$id = Input::post('id');
$name = Input::post('name');

のような形で取得できます。

これも、controllerから値をViewに渡さなくとも、テンプレートから下記のように直接取得することが出来ます。

{{ form_val('id') }}

例えばこんな形で利用できます。

<select name="id">
{% for category_key,category_name in config('options.category') %}
<option value="{{ category_key }}" {% if form_val('id') == category_key %}selected="selected"{% endif %} >{{ category_name }}</option>
{% endfor %}
</select>


2つとも特にたいした機能ではないのですが、使ってみると意外と便利です。
 
| プログラミングメモ | 15:59 | comments(0) | trackbacks(0) | pookmark |
FuelPHP1.3 Auth simpleauth のログイン仕様

FuelPHPは、ログイン認証用にSimpleAuthという認証パッケージがすでに含まれています。

このパッケージを使うと、非常に簡単にログイン機能を実装することが出来ます。


ログイン機能の実装方法については、下記のブログ等が参考になるかと思います。




ただ、SimpleAuthでのログイン認証は、仕様的におそらくセキュリティ強度を高めるためだと思うのですが、別ブラウザや、別のデバイスからの同時ログインは許可されていません。

なので、マルチデバイス対応のシステムの開発をしている場合や、別環境でのチェックを行う場合に不便です。

同時にログインできないのは、SimpleAuthはログインすると、
Session(実際にはcookieを使用) に、username と login_hashを保持し、

Auth::check() で認証のチェックをする際には、
データベースに保持されている usernameとlogin_hashの照合を行います。

で、ここで問題になるのは データベース内の login_hashの更新されるタイミングです。

login_hashは、ユーザがログインを行った際に、
「設定ファイルに記述した任意の文字列」 、「username」 、「ログインした時間」の組み合わせを使って作成され更新されます。

このため、別デバイスや別環境でログインを行うと、前に入っていたログインは無効化されてしまいます。

なので、ログインを無効化されないようにするには、このlogin_hashの文字列が同じであれば問題なくなるわけです。
login_hashを構成する3つの項目のうち、別環境で変化するのは「ログインした時間」なので、この項目を含めない、もしくは別のものに置き換えます。

実際に変更を加える部分は、

packages/auth/classes/auth/login/simpleauth.php の  create_login_hash メソッドの、


$login_hash = sha1(¥Config::get('simpleauth.login_hash_salt')
.$this->user['username'].$last_login);


の部分です。

ここの、$last_loginを除くか他のものに置き換えます。

これで、マルチデバイスでの同時ログインが可能になり利便性はあがります。




この変更を加えたことによるセキュリティリスク

Cookieを不正アクセスにより第3者に盗まれてしまった場合、盗まれたタイミングから使用される時間までに再度ログイン処理が行われていれば、対象のCookieが無効になり不正ログインを防げる部分の破棄。

ただ、login_hashの生成に使用される任意の文字列や、「ログインした時間」を置き換える文字列を定期的に更新することでこのセキュリティリスクを避けることはできるかと思います。

他に問題点、別の解決方法等があればコメントいただけると助かります。



| プログラミングメモ | 22:31 | comments(0) | trackbacks(0) | pookmark |
FuelPHP1.3 + Twig のセットアップとエスケープ仕様
FuelPHPで、テンプレートパーサーにTwigを使用するための手順とエスケープの仕様をまとめました。

1. セットアップについて

FuelPHP で Twigを利用するのは、簡単でTwigをダウンロードして、
解凍してlib以下にあるTwigディレクトリを app/vendor  以下にコピーします。

そして、app/config/config.php の packages配列に parserを追加して、parserのパッケージを使用できるようにします。


    'always_load' => array(
         'packages' => array(
              //'orm',
              'parser',   //追加
          ),

これで、セットアップは完了です。

また、Twig本体を app以下ではなく、 packages/parser/vendor 以下に Twig を配置したい場合は、

packages/parser/config/parser.php の

 'View_Twig' => array(
    'include' => APPPATH.'vendor'.DS.'Twig'.DS.'Autoloader.php',

となっているところを、

 'View_Twig' => array(
   'include' => PKGPATH.'parser'.DS.'vendor'.DS.'Twig'.DS.'Autoloader.php',

に変更すればOKです。


次に使用方法ですが、

app/classes/controller 以下に配置してあるControllerのactionメソッド内の、

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}',$data));

になっているところを、

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data));

のように、ファイルの拡張子として、.twigを追加します。

また、拡張子を .html や、.tpl  などに変更したい場合は、

packages/parser/config/parser.php の

'extensions' => array(
    
    'twig' => 'View_Twig'

の部分を

'extensions' => array(

    'html' => 'View_Twig'

に変更することで変更できます。



2.エスケープについて


次に、この状態でのエスケープのデフォルトの仕様ですが、

・FuelPHP の auto_encode(自動エンコード) を使用する

・Twig の autoescape は 使用しない

となっています。

なので、タグをそのまま出力したい場合など
特に、Paginationクラスを使用して、

$data['pagination'] = Pagination::create_links();

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data));

の用に使用すると、ページング部分がエンコードされてしまってうまく表示されません。

この解決方法は何通りかあるのですが、1つめは


データをテンプレートに渡す際に、以下のような記述で渡します。

return Response::forge(View::forge('{ディレクトリパス}/{ファイル名}.twig',$data)
->set('pagination',Pagination::create_links(),false));

View::forgeで取得したインスタンスに、値を直接セットします。
その際の、第三引数がエスケープの仕様を制御するフラグで、この部分をfalseにすることでエスケープなしで出力されます。

$view = View::forge('{ディレクトリパス}/{ファイル名}.twig',$data);
$view->set('pagination',Pagination::create_links(),false);
return  Response::forge($view);

こんな感じでわけて記述してもOKです。エスケープしたくない値が複数ある場合はこっちのほうが見やすいですね。


で、2つめは FuelPHP のオートエンコードを無効にして、Twigのエスケープ機能を有効にする方法です。

設定は、 packages/parser/config/parser.php で変更できます。

'View_Twig' => array(
    'auto_encode' => true,

FuelPHPのエンコード制御部分を

'View_Twig' => array(
    'auto_encode' => false,

に変更して、

'View_Twig' => array(
    'environment' => array('
        'autoescape' => false,

Twigのエスケープ制御部分を

'View_Twig' => array(
    'environment' => array('
        'autoescape' => true,

に変更します。

この設定にしたのち、Twigのテンプレートファイルで、

{{ pagination|raw }} 

でエスケープを無効にして出力することが可能になります。


| プログラミングメモ | 12:48 | comments(0) | trackbacks(0) | pookmark |
YOLP 住所ディレクトリAPI サンプル (PHPバージョン)
最近 YOLPから住所ディレクトリAPIが公開されました。

http://blog.olp.yahoo.co.jp/archives/20120809_addressdirectory.html

個人や、小規模のサービスで住所検索のために住所コードのデータのメンテナンスを入れるのは大変だったかと思います。
しかし、もうその心配はいりません。

そう。なぜなら住所ディレクトリAPIがあるから。

というわけで、簡単な住所下りの絞り込みのサンプルを作ってみました。

YOLP 住所ディレクトリAPI サンプルページ

ソースコードは以下です(サンプルページとはちょっと違います)
実際に使用する際はエラー処理等、適宜入れてください。

<?php

//Yahooデベロッパーネットワークから取得したAPPID
$appid = "xxxxxxxxxxxxxxxxx";


if (isset($_GET['ac']) ) {
    //acがエリアコードになります
    $ac = $_GET['ac'];
} else {
    //初期状態は、JP 日本
    $ac = "JP";
}

//YOLP の住所ディレクトリAPI
$uri = "http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/addressDirectory"
        . "?appid=" . $appid . "&ac=" . $ac ;

$curl = curl_init($uri);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($curl);

$result = simplexml_load_string($response);

?>
<html>
<body>
<ul>
<?php foreach ($result->Feature[0]->Property->AddressDirectory as $area ) : ?>
<?php if (strlen($ac) == 5) : ?>
<li><?php echo $area->Name; ?></li>
<?php else : ?>
<!-- xxxx/xxxxはベースのURLパス -->
<li><a href="/xxxx/xxxx/?ac=<?php echo $area->AreaCode; ?>"><?php echo $area->Name; ?></a></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</body>
</html>
 


このAPIを含め、YOLPを使用することでますます位置情報系サービスは作りやすくなりますね。





| プログラミングメモ | 23:29 | comments(0) | trackbacks(0) | pookmark |
PHP カレンダーの表示方法

今はWEBサイト上でjQueryなどで簡単にカレンダーを表示できるようになったので、使う機会も少なくなってるかもしれませんが、今回はPHPでカレンダーを表示する方法を書いてみたいと思います。


完全に初心者向きのないようなので、特に真新しいことは書きませんw



サンプル



//対象の月の1日目の曜日を取得する。
// w は、対象の日付の曜日を数値で返却してくれます 0(日曜日) - 6(土曜日)
$startDay = date('w',mktime(0,0,0,date('m'),1,date('Y')));

//対象月の最終日を取得します。
// t は、対象の月の日数を返却してくれます。
$endDate = date('t');

//第何週目かの値用の変数
$week = 1;

//1日から最終日まで繰り返し処理をします。
$calendar = array();
for ($i = 1; $i <= $endDate;$i++ ) {
    
    //第何週目の何曜日のキーに対象の日付を格納します。
    $calendar[$week][$startDay] = $i;
    
    //曜日を進める
    $startDay++; 
    
    //6 (土曜日)を超えたら、0 (日曜日)にリセットして、次の週へ
    if ($startDay == 7) {
        $week++;
        $startDay = 0;
    }
} 

/**
  *ここまでで、カレンダーを表示するための配列は完成です。
  *実際に、viewを別ファイルにしている場合は、この$calendar 変数をviewに渡します。
  */

//テーブルを使って、表示していきます

echo "<table border=1>";
foreach ($calendar as $week) {
    echo "<tr>";
    for ($day = 0; $day <= 6; $day++ ) {
        
        if (isset($week[$day])) {
            //配列に値が存在する場合、日付を表示
            echo "<td>" . $week[$day] . "</td>";
            
        } else {
            //存在しない場合、 - を表示
            echo "<td> - </td>";
        }
    }
    echo "</tr>";
}
echo "</table>";


これでカレンダーの表示プログラムの出来上がりです。


実際にはこれにプラスして、日付をキーにカレンダーに表示させたい内容をもつ配列と組み合わせて使用すると便利です。

| プログラミングメモ | 23:15 | comments(0) | trackbacks(0) | pookmark |
PHP ファイルキャッシュクラス サンプル

結構前に、PHP 特別なライブラリなしで簡単に使える簡易キャッシュ のエントリーを書いたら意外と使用してくれてる人がいたので、あのままだと実際に使う感じのイメージがわかない人もいるかと思うので、今回は実際にシステムを作る際に使えるクラスのサンプルを作ってみました。



ファイルキャッシュ用のクラス



class FileCache
{
    const CACHE_DIR = '/tmp';
    
    //キャッシュの呼び出し
    public function read($key,$cacheTime = null)
    {
        $cacheFile = self::CACHE_DIR . '/' . $key;
        
        if (file_exists($cacheFile) &&
                ( ( (filemtime($cacheFile) + $cacheTime ) > time() ) || 
                $cacheTime == null )) {
            return file_get_contents($cacheFile);
        } else {
            return false;
        }
    }
    
    //コンテンツの登録
    public function write($key,$contents)
    {
        $cacheFile = self::CACHE_DIR . "/" . $key;
        $file = new SplFileObject($cacheFile,'w');
        $file->fwrite($contents);
    }

    //コンテンツのクリア
    public function clear($key)
    {
        $cacheFile = self::CACHE_DIR . "/" . $key;
        unlink($cacheFile);
    }
}



次にこのクラスの簡単な使い方です



//クラスのインスタンスを生成
$fileCache = new FileCache();

//reportというキーで、キャッシュへの登録後10分以上経過していなければキャッシュの内容を取得
$contents = $fileCache->read('report',600);

if ($contents === false) {
    //キャッシュデータが存在しない場合

    //Model クラスはダミーで、getReport で集計データをDBから生成しているようなイメージです
    $model = new Model();
    $report = $model->getReport();

    //reportというキーで、取得した内容をシリアライズ化してキャッシュへ登録
    $fileCache->write('report',serialize($report);
} else {
    //キャッシュデータが存在した場合、アンシリアライズしてデータを取得
    $report = unserialize($contents);
}

var_dump($report);



使用する際のメリットはこんな感じです

特に新しくライブラリ等をインストールしなくてもすむ

キャッシュを取得する際に、時間の制御ができる

メモリの消費を抑えることができる(memcachedなどと比べて)


使う際は、今までバッチ処理かなんかでデータを集計して表示していた部分などから使ってみるとよいのではないかと思います


| プログラミングメモ | 14:15 | comments(0) | trackbacks(0) | pookmark |
GoogleMapsAPIをYOLPに切り替える(その1)

GoogleMapsAPI を使って位置情報系のサービスを作ってる人って結構いると思うのですが、そのサービスにYOLPローカルサーチを使用して付加情報を追加したいって時に、そのままGoogleMapsAPIにYOLPのローカルサーチの情報を追加するパターンと、地図自体をYOLPに変えてしまうという二通りの方法が考えられると思います。


今回はそんなときの参考に、二通りのパターンでWEBサービスを実装してみました。
以下が、そのサービスです。

赤ちゃんとおでかけ

このサービスを簡単に説明すると、赤ちゃんとおでかけするときに必要な、授乳室情報とおむつ替えできるスペースの情報を投稿、検索できるサービスになります。

そこに、YOLPを使用して、スマイリーマム の子供といけるレストランの情報を付加情報としてサービスに追加しました。

YOLPのローカルサーチの使用方法についての詳細は、下記エントリーを参考にしてください。

YOLP(Yahoo! Open Local Platform) で周辺検索


YOLP(Yahoo! Open Local Platform) 自作の検索APIの情報も地図にプロット

このサービスは、パソコン版とスマートフォン版を作っていて、パソコン版の方は、GoogleMapsAPIを使用していて、スマートフォン版はYOLPを使用して実装しています。
同一URLで、UA(ユーザエージェント)によって出しわけをしているのですが、ページの下の方に、パソコン版とスマートフォン版のリンクを用意してあるのでどちらも確認できると思います。
まあ表示はおかしくなっちゃいますが。。。


YOLPは、自分のサービスで使用する場合、アプリケーションIDをとる必要があります。アプリケーションIDの取得は、特に審査とかもなくYahooのアカウントを持っていればすぐに取得できるのですが、GoogleMapsAPIの場合はこのアプリケーションIDが必要なく、いきなりサービスに組み込むことができるため、とりあえず作ってみようかなという時の敷居が低いのもあり、そのまま使い続けることが多いのではないかと思います。

あとは、やはり使っている人も多い分、使い方を説明しているブログも多いですね。ただ、GoogleMapsAPIは現在V3なんですが、V2の解説が結構多かったり、V2では使えた機能がV3ではなかったりするのがちょっと困りますね。。。

やはりYOLPのローカルサーチを使用する場合、YOLPで統一したほうが良いと思うのですが、すでにGoogleMapsAPIで実装済みだとちょっと面倒になってしまいますよね。

そこで、二つの地図サービスを比較しながらGoogleMapsAPIからYOLPに切り替えるにあたってポイントとなる部分を解説していこうと思います。


----------------------------------------------------------------------------------------------------

では、切り替えのための機能ごとのソースコードを記述していきます。
対象の部分だけを記述してあるので、全体のソースは実際のサイトで確認してください。

-  赤ちゃんとおでかけ


地図を実際に表示する個所のHTML

GoogleMapsAPI

<div id="map_canvas" style="height:480px;width:100%;"></div>

YOLP

<div id="map" style="width:100%;height:240px;"></div>

id とか、高さの指定は変えてますが一緒ですね。

-------------------------------------------------------------------------------------

緯度経度の変換

GoogleMapsAPI

var latlng = new google.maps.LatLng(lat,lon);

YOLP

var latlng = new Y.LatLng(lat,lon);

お互い各機能のの指定方法が違いますが、使い方は一緒ですね。
YOLP は、Y.
GoogleMapsAPI は google.maps で共通です。

-------------------------------------------------------------------------------------

地図の表示

GoogleMapsAPI

var myOptions = {
    zoom: 14,
    center: latlng,
    mapTypeId: google,maps.MapTypeId.ROADMAP
}

map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);

YOLP

var ymap = new Y.Map("map");

ymap.drawMap(latlng,16,Y.LayerSetId.NORMAL);


GoogleMapsAPIは、地図オブジェクトを生成するときにオプション情報のセットと描画をしていて、YOLPは地図オブジェクトを生成して、オプション情報をセットして描画っていう感じの記述の違いはありますが、基本的には同じですね。

地図を表示する個所のidの指定。
中心点の指定。
ズームサイズの指定。
地図のタイプ指定。
って感じのことをやってますね。

ズームレベルに関しては微妙な違いがあるので、詳しくはこちらで確認してください。

GoogleMapのズームレベル

YOLPのズームレベル

----------------------------------------------------------------------------------------------

地図へのコントロールの追加

GoogleMapsAPI

var myOption = {
    zoomControl: true,
    scaleControl:true,


YOLP

ymap.addControl(new Y.SliderZoomControlVertical());
ymap.addControl(new Y.ScaleControl());


GoogleMapsAPIは、オプション配列に、コントロールのオン、オフの情報を事前に準備しておき、地図を描画する際にその配列を使う感じですね。
YOLPは、地図オブジェクトに追加したいコントロールをaddControlで追加していく感じですね。

それぞれ追加できコントロールには違いがあるので詳しくは下記を参照ください。

GoogleMapのコントロール

YOLPのコントロール

-----------------------------------------------------------------------------------------------

オリジナルアイコンでのマーカーの追加

GoogleMapsAPI

var icon = 'http://support-map.geo.jp/images/icon_r.png";
var marker = new google.maps.Marker({
    position: latlng,
    map: map,
    icon: icon
});

YOLP

var icon = new Y.Icon('http://support-map.geo.jp/images/icon_r.png");
var marker = new Y.Marker(latlng,{icon:icon});
ymap.addFeature(marker);


GoogleMapsAPIは地図の描画の際と同様に、マーカーオブジェクトを生成する際に地図への追加と、アイコン画像の指定を行います。
YOLPは、まずアイコンオブジェクトを生成。そしてそのアイコンオブジェクトを指定してマーカーオブジェクトを生成。最後に地図オブジェクトへマーカーを追加する感じになります。

この辺の書き方は好みが出そうですね。

-----------------------------------------------------------------------------------------------

イベントの指定 - 地図を動かしたときのアクション指定

GoogleMapsAPI

google.maps.event.addListener(map, 'dragend',function(){
    //地図のドラッグが終わったらなにかの処理
});

YOLP   

ymap.bind('moveend',function(){
    //地図のドラッグが終わったらなにかの処理
});

GoogleMapsAPIは、イベントリスナーに対象(この場合地図)と、イベント(ドラッグの終了)、その際のアクションを指定する感じです。
YOLPは、地図オブジェクトに、イベント(ドラッグの終了)とその際のアクションを指定する感じですね。

-------------------------------------------------------------------------------------------------

イベントの指定 - マーカーをクリックしたときのアクション指定

GoogleMapsAPI

google.maps.event.addListener(marker, 'click',function(){
    //マーカーをクリックしたらなにかの処理
});

YOLP

marker.bind('click',function(){
    //マーカーをクリックしたらなにかの処理
});

地図への指定と同様、
GoogleMapsAPIは、イベントリスナーに対象(この場合マーカー)と、イベント(クリック)、その際のアクションを指定する感じです。
YOLPは、マーカーオブジェクトに、イベント(クリック)とその際のアクションを指定する感じですね。

イベントの種類と内容に関しては以下を参照ください

GoogleMapのイベント

YOLPのイベント

------------------------------------------------------------------------------------------------

中心点の取得

GoogleMapsAPI

var latlng = map.getCenter();

YOLP

var latlng = ymap.getCenter();

これは同じですね。

------------------------------------------------------------------------------------------------

地図の4隅の取得

GoogleMapsAPI

var bounds = map.getBounds();
var max_lat = bounds.getNorthEast().lat();
var min_lat = bounds.getSouthWest().lat();
var max_lon = bounds.getNorthEast().lng();
var min_lon = bounds.getSouthWest().lng();

YOLP

var bounds = ymap.getBounds();
var max_lat = bounds.getNorthEast().lat();
var min_lat = bounds.getSouthWest().lat();
var max_lon = bounds.getNorthEast().lng();
var min_lon = bounds.getSouthWest().lng();

こちらも同じですね。

--------------------------------------------------------------------------------------------------

ざっと基本的な部分の比較をしてみましたが、基本的な機能はほぼ同じものがそろっていて、記述方法の違いもそこまで切り替えをする際に戸惑うこともないかなという感じかと思います。

結構長くなってしまったので一旦ここまでにして、次回は残りの部分の解説を行おうと思います。


関連
YOLPで周辺検索 - coding note


| プログラミングメモ | 22:36 | comments(0) | trackbacks(0) | pookmark |
facebookのコメントプラグインでまとめページ
 またちょっと実験的なWEBサービスを作ってみました。

Custom Page

facebookのコメントプラグインはよくできてるなぁと感心して、

これで、自分自身でデータを持たなくてもなんか作れそうだなーと思い作ってみました。

使いどころがいまいちないんですが、右側のテキストフォームになんか適当な文字列を入力すると、入力した文字のページが出来上がります。

そこに、facebookのコメントプラグインをはめ込んでいる感じです。

こんな感じ↓
便利なPHPライブラリ一覧


そして、ページにコメントを書き込むと、facebookにも同時にポストされて、ページがシェアされます。

そのリンクを踏んだ人がテーマにそってコメントを書き込んでいくと、そのテーマに沿ったコメントのまとめページが出来上がりますって感じです。

匿名じゃない2ch みたいな感じになるのかな。。

なんか色々使えそうで使えないので、なんかうまい使い方をしてくれると嬉しいです(笑)



| プログラミングメモ | 16:55 | comments(0) | trackbacks(0) | pookmark |

CATEGORIES
SELECTED ENTRIES
PROFILE
関連サイト
SPONSORED LINKS
ARCHIVES