13.5 在地图上管理位置
下面扩展位置管理页面和JavaScript类,允许用户输入他们希望向地图增加的任何地址。然后完成一个地理编码器请求查找所输入地址的坐标,并将其增加到地图上。另外,我们还将在后台使用Ajax将活动博客帖子的位置保存到数据库。
一旦在地图上显示一个地址,用户就可以把它拖到一个新位置(这会导致新坐标将通过Ajax保存),或者将其从地图上完全删除。
13.5.1 处理位置管理Ajax请求(1)
首先,为处理各个可能的Ajax请求分别创建一个新的动作处理程序(同样在Blogmanager- Controller中),每个动作都会向请求脚本返回JSON数据。我们要处理以下4个动作。
get。使用这个动作返回数据库中存储的对应当前博客帖子的各个位置。最初没有要返回的位置。
add。调用这个动作将一个新位置保存到数据库中。我们将编写一个新的表单处理类来提供帮助。一旦成功地将一个新位置保存到数据库中,则返回其ID以及相应的坐标和描述。返回位置数据时,将把它增加到Google地图。
delete。调用这个动作从数据库中删除一个位置。还必须通知Google地图实时地从地图显示中删除这个位置。
move。这个动作用于更新一个现在位置的坐标。用户将一个位置拖放到地图上一个新点时会启动这个动作。
1.新位置表单处理器
前面提到,要向数据库增加新位置,必须编写一个新的表单处理器。这个类与本书中编写的其他表单处理类几乎相同,所以不做更多解释,见代码清单13-19。这个类存放在一个名为BlogPostLocation.php的文件中(位于./include/FormProcessor目录下)。
代码清单13-19 处理新位置,并相应地保存它(BlogPostLocation.php)
![]() |
另外,必须修改DatabaseObject_BlogPostLocation类,确保设置了合法的坐标。与在数据库中保存新用户信息一样,这里在DatabaseObject_BlogPostLocation类中创建了__set()方法来完成这些值的预处理。
代码清单13-20显示了增加到BlogPostLocation.php文件(位于./include/DatabaseObject目录下)的代码。这里所做的只是将经度和纬度格式化为一个有6位小数的数字(Google API文档指出这个精度对应为4英寸/11厘米的分辨率)。
代码清单13-20 格式化纬度和经度(BlogPostLocation.php)
|
2.创建locationsManage控制器动作
既然完成了表单处理器,下面来编写用来管理位置的动作处理程序。如前所述,它必须处理4个不同的操作(get、add、delete和move)。
首先,必须初始化动作处理程序,如代码清单13-21所示。由于所有的Ajax请求都要指定action和post_id参数,所以从请求中抽取出这些参数,然后尝试加载相应的博客帖子。另外,由于要为各个动作返回JSON数据,所以初始化一个$ret数组,其中将包含返回数据。
代码清单13-21 初始化动作处理程序并加载博客帖子(BlogmanagerController.php)
|
接下来处理第一个操作:get。加载一个博客帖子时,会自动加载相应的位置(应该记得,本章前面向postLoad()函数增加了这个功能)。
要完成这个动作,需循环处理这些位置,并相应地增加到$ret数组,如代码清单13-22所示。为地图增加位置所需的数据包括位置ID、位置坐标及其描述。
代码清单13-22 处理get动作(BlogmanagerController.php)
|
| 回书目 上一节 下一节 |