【HERE地圖開發記錄(2)】finecms高級版添加Here地圖字段類別

因爲finecms的自定義字段類別屬於系統自帶項,須要增長的話就要加代碼了,若是是普通的控件增長就相對簡單,Here地圖的話就略帶點坑了,廢話不說立刻去片!
php

1.增長finecms字段類別

首先在dayrui/libraries/Field文件夾中增長咱們本身的字段類別文件,由於同是地圖項目,因此我直接複製Baidumap.php,更名爲Heremap.php
html

打開Heremap.php後,咱們能夠先看看構造函數api

/**
     * 構造函數
     */
    public function __construct() {
		parent::__construct();
		$this->name = IS_ADMIN ? lang('991') : ''; // 字段名稱
		$this->fieldtype = array('INT' => 10); // TRUE表所有可用字段類型,自定義格式爲 array('可用字段類型名稱' => '默認長度', ... )
		$this->defaulttype = 'INT'; // 當用戶沒有選擇字段類型時的缺省值
    }

其中name屬性就是在系統中顯示的名字,這裏讀取的是/dayrui/language/*/admin_lang.php 裏面的message信息,爲了之後finecms升級不衝突,我在這裏就設一個偏遠山區的下標991爲個人名稱信息(PS lang函數是CI框架的輔助函數,用以讀取已加載的語言文件)框架

/*============我的開發部分=======*/
$lang['991']	= 'Here地圖';

而後看到的是fieldtype,從解釋上來看,是沒屌用的,姑且認爲是保存在系統表裏面的字段類型,由於這個case裏面沒有使用到這個屬性,這裏就暫不作深究。函數

而後就能夠返回到系統裏面看看修改的效果優化

ok,由於系統是自動加載這個目錄下的文件,因此咱們也不須要改表就能夠看到咱們須要的東西了。ui

而後下面一個函數是option()函數,有註釋不難理解就是用來在後臺菜單錄入時候須要用戶去填的參數this

/**
	 * 字段相關屬性參數
	 *
	 * @param	array	$value	值
	 * @return  string
	 */
	public function option($option) {
	
		$option['city'] = isset($option['city']) ? $option['city'] : '';
		$option['level'] = isset($option['level']) ? $option['level'] : 15;
		$option['width'] = isset($option['width']) ? $option['width'] : 700;
		$option['height'] = isset($option['height']) ? $option['height'] : 430;
		
		return '<tr>
                    <th>'.lang('265').':</th>
                    <td>
                    <input type="text" class="input-text" size="10" name="data[setting][option][width]" value="'.$option['width'].'">
					<div class="onShow">px</div>
                    </td>
                </tr>
				<tr>
                    <th>'.lang('266').':</th>
                    <td>
                    <input type="text" class="input-text" size="10" name="data[setting][option][height]" value="'.$option['height'].'">
					<div class="onShow">px</div>
                    </td>
                </tr>
				<tr>
                    <th>'.lang('267').':</th>
                    <td>
                    <input type="text" class="input-text" size="10" name="data[setting][option][level]" value="'.$option['level'].'">
					<div class="onShow">'.lang('268').'</div>
                    </td>
                </tr>
				<tr>
                    <th>'.lang('269').':</th>
                    <td>
                    <input type="text" class="input-text" size="40" name="data[setting][option][city]" value="'.$option['city'].'">
					<div class="onShow">'.lang('270').'</div>
                    </td>
                </tr>
				';
	}

效果以下:url

而後繼續往下看,input函數就是顯示咱們地圖的表單輸出了,這裏finecms使用了art.dialog來裝咱們的小地圖醬,把函數中的調用action改成咱們本身的heremap action(將m=baidumap 改成 m=heremap):spa

art.dialog.open("'.(MEMBER_PATH.'index.php?c=api&m=heremap&width='.$width.'&height='.$height.'&name='.$name.'&level='.$level.'&value='.$value.'&city='.urlencode($city)).'", {
						title: "Heremap",

而後咱們去找到這個controller, 具體位置是在/member/controllers/Api.php

找到之後,把baidumap()函數拷貝在下面粘貼一個heremap()函數,將顯示的模板改成

$this->template->display('heremap.html', 'admin');

OK,跟finecms的整合配置就到這裏了,而後開始寫heremap.html模板裏的東東

2. 顯示部分

在這部分其實已經跟finecms沒太大關係了,主要就是here地圖的使用,貼代碼也沒有太大意義了,這裏我提供一個我寫好的demo下載吧,代碼未經優化~有潔癖的就別看了~順便附送Here的JS api離線版

下載地址:http://share.weiyun.com/266cb7e6643b73371617014c0616dd52

heremap.php 放置在 \dayrui\libraries\Field

模板文件heremap.html放置在 \dayrui\templates\admin 

PS: 兩個文件中的相關語言配置 在附近的language文件夾中的語言文件配置下就行了 爲了避免衝突這裏就不放出來了

API文檔是官方最新的英文版


3. 更新部分

在使用中還有一個地方要添加代碼,這部分是我以爲finecms寫得很差的地方

具體文件是dayrui/core/D_common.php

搜索Baidumap, 而後跟着Baidumap的相關代碼加一個咱們本身的heremap代碼就好了

同理,後面我也加了Google map,具體步驟同樣

相關文章
相關標籤/搜索