2015年3月24日火曜日

swift iPhone画面上に映っている地図の距離をメートルで取得する。

iPhoneで地図を使ったアプリを開発する際、画面上にうつってる範囲の距離を取得したい時があります。
画面上で見えてる範囲だけ距離を取得しAPIに投げたい。のが動機です。

まずはiPhone上に地図を表示しなくては始まりませんね。
xcodeで新規プロジェクト、シングルページで新規アプリを作ります。
下記コードをコピペ。とりあえず地図が表示されます。
参考にさせて頂きました。Swift Docs 地図の表示

下記のファンクションを使用します。
これは地図内を移動したり、縮尺を変えたりした時に通知されるファンクションです。
このファンクションを利用し、地図に変化があった場合、その都度距離を取得します。


下記内容に変更します。
iPhoneの縦の距離を表示します。 画面上部真ん中と画面下部の真ん中の距離をメートルで表示しています。
コンソールに距離が表示されます。

もし横方向の距離を取得したい場合は下記に変更します。
画面左真ん中と画面右真ん中の距離をメートルで表示しています。

受け取った距離を使ってAPIに投げれば画面上の情報の取得が可能です。

2015年3月14日土曜日

EC CUBE 2.11系でプラグインを実装する方法

2.12系からプラグインがボタンをクリックするだけで導入できますが、2.11系まではプラグインのインストール機能が無いため、インストールができません。
がしかし、2.11系でもインストールが可能です。

今回は「最近チェックした商品」を導入してみます。

クリックするとプラグインページに飛びます。


ダウンロードして、解凍します。

ブロックの設定
管理画面のデザイン>PC>ブロック設定>ブロックを新規入力で
ブロック名:最近チェックした商品
ファイル名:plg_checkeditems
内容にダウンロードしたプラグインのフォルダ内の「templates」フォルダ内のtplファイル(plg_checkeditems.tpl)をコピペ。

tplファイルとphpファイルの紐付けをデータベースから行います。
データベースへアクセスし、dtb_blocのphp_pathに「frontparts/bloc/plg_checkeditems.php」と記入
プラグインのフォルダ内のplg_checkeditems.phpをECCUBEのフォルダhtml>frontparts>bloc内にコピペ

plg_checkeditems.phpを編集します。
下記行を
require_once PLUGIN_UPLOAD_REALDIR . 'CheckedItems/LC_Page_FrontParts_Bloc_CheckedItems.php';

下記に変更
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc_CheckedItems.php';


プラグインのフォルダ内の「LC_Page_FrontParts_Bloc_CheckedItems.php」をECCUBEフォルダのdata>class>pages>frontparts>bloc内にコピペ
LC_Page_FrontParts_Bloc_CheckedItems.phpを編集します。
下記行を削除
$plugin     = CheckedItems::getPlgInfo();

require_once PLUGIN_UPLOAD_REALDIR . 'CheckedItems/CheckedItems.php';

下記行を
$save_count = $plugin['item_count'];

下記に変更
$save_count = 30 //保存したい件数、今回は30件


下記行を
$arrItem = CheckedItems::getCookieArray();

下記に変更
$arrItem = $_COOKIE['product'];



クッキーに商品へのアクセスを保存する
ECCUBEのフォルダのdata>class>pages>products>LC_Page_Products_Detail.phpを編集
下記ログイン判定の下に追加
        // ログイン判定
        if ($objCustomer->isLoginSuccess() === true) {
            //お気に入りボタン表示
            $this->tpl_login = true;
            $this->is_favorite = SC_Helper_DB_Ex::sfDataExists('dtb_customer_favorite_products', 'customer_id = ? AND product_id = ?', array($objCustomer->getValue('customer_id'), $product_id));
        }

下記の様に追記します
        // ログイン判定
        if ($objCustomer->isLoginSuccess() === true) {
            //お気に入りボタン表示
            $this->tpl_login = true;
            $this->is_favorite = SC_Helper_DB_Ex::sfDataExists('dtb_customer_favorite_products', 'customer_id = ? AND product_id = ?', array($objCustomer->getValue('customer_id'), $product_id));
        }
        
//最近チェックした商品追加
$this->setItemHistory($product_id);

//最近チェックした商品追加

    function setItemHistory($product_id) {

        $cnt = 0;

        // プラグイン情報を取得.
 //       $plugin     = SC_Plugin_Util_Ex::getPluginByPluginCode("CheckedItems");
        //保存期間
        $save_limit = 30;
        //保存件数
        $item_count = 30;

        $arrDisp = $_COOKIE['product'];
        $cnt     = count($arrDisp);

        //重複項目のチェック
        $DispFlg = true;
        if (isset($_COOKIE['product'])) {
            foreach ($_COOKIE['product'] as $name => $value) {
                if($value == $product_id){
                    $DispFlg = false;
                }
            }
        }
 
        //クッキーにセット
        if($DispFlg){
            $disp_num = $item_count;
            if($cnt == 0){
                setcookie('product[' .$cnt .']', $product_id,time()+60*60*24*$save_limit,"/" );
            }else{
                $arrCookie = $_COOKIE['product'];
                $arrCookie[] = $product_id;

                //商品保存処理
                if(count($arrCookie) > $disp_num){
                    array_shift($arrCookie);
                }
                foreach ($arrCookie as $key => $val) {
                    setcookie('product[' .$key .']', $val,time()+60*60*24*$save_limit,"/" );
                }
            }
        }
    }



管理画面のデザイン管理>レイアウト設定から設置したら表示されます。
細かい表記などが表示されていない場合は適時tplファイルを修正。


まとめ
プラグインのブロック追加
DBのブロック情報の変更
プラグイン内のファイルを設置
各ファイルのパスを通す

2015年3月12日木曜日

EC CUBE3のインストール(β版)

β版のECCUBE3を macのローカル環境(MAMP Mysql)へインストールしてみます。
コマンドラインを立ち上げ
下記コマンドを打ち込んでgithubからeccbe3をクローンする。
今回はローカルで動かすので、MAMPのhtdocsフォルダにダウンロード。
git clone http://github.com/EC-CUBE/ec-cube.git

フォルダ内へ移動
cd ec-cube

composerをインストールします。
curl -sS https://getcomposer.org/installer | php

次にMAMPを立ち上げ、phpmyadminから適当な名前のDBを作成しておきます。

次に、インストールしたECCUBEのフォルダの中の「eccube_install.sh」をエディタで開きます。
インストールに必要な修正は以下の部分。


-そのまま
CONFIG_PHP="app/config/eccube/config.php"

-そのまま
ADMIN_MAIL=${ADMIN_MAIL:-"admin@example.com"}

-そのまま
SHOP_NAME=${SHOP_NAME:-"EC-CUBE SHOP"}

-ローカルのURL、http://localhost:8888/ec-cube/html/
HTTP_URL=${HTTP_URL:-"http://test.local"}

-ローカルのURL、http://localhost:8888/ec-cube/html/
HTTPS_URL=${HTTPS_URL:-"http://test.local/"}

-ローカルのURL、/ec-cube/html/
ROOT_URLPATH=${ROOT_URLPATH:-"/"}

-そのまま
DOMAIN_NAME=${DOMAIN_NAME:-""}

-そのまま
ADMIN_DIR=${ADMIN_DIR:-"admin/"}


-localhost
DBSERVER=${DBSERVER-"127.0.0.1"}

-上記で作ったDBの名前
DBNAME=${DBNAME:-"cube3_dev"}

-自分のDBのユーザー名
DBUSER=${DBUSER:-"cube3_dev_user"}

-自分のDBのパス
DBPASS=${DBPASS:-"password"}


"mysql" )
#-- DB Seting MySQL

-そのまま
MYSQL=mysql

-自分のDBのユーザー名
ROOTUSER=root

-そのまま
ROOTPASS=$DBPASS

-localhost
DBSERVER="127.0.0.1"

-そのまま
DBPORT=3306

;;


保存したらインストール可能です。
下記コマンドでインストールが始まります。
sh eccube_install.sh mysql