为collective.geo创建地图内容类型(使用c.g/MapWidget和c.g.openlayers)由Makina Corpus提供
项目描述
简介
这是一个非常小且轻量级的OpenLayers和collective.geo.mapwidget集成。想法是创建一个地图内容类型,以集体地理的灵活性创建全自定义地图。最终目标是存储一些javascript样板代码在内容类型中以初始化地图。
由于它需要使用OpenLayers和jQuery编写一些javascript,因此它不是一个“最终用户”解决方案,而是一种方便且灵活的方式将OpenLayers集成到Plone中。
安装
只需要简单安装collective.geo.geopoint就足够了。或者,buildout用户可以将collective.geo.geopoint作为特定项目buildout的一部分进行安装,方法是在buildout配置中添加以下内容
[buildout] ... eggs = collective.geo.mapcontent ... [instance] ... zcml = collective.geo.mapcontent
如何使用
在Plone界面中,只需添加一个地图。您的地图id是: mapcontent。然后,在内容类型“javascript”的文本区域内填写一些javascript,以使用mapwidget显示地图
- set the box width and height - set the long/lat/zoom settings - set the layers
例如
jq('#mapcontent').css('height', '1024px'); jq('#mapcontent').css('width', '1024px'); var coords = {lon: 0.000000, lat: 0.000000, zoom: 10}; cgmap.state = {'default': coords, 'mapcontent': coords}; cgmap.extendconfig( {layers: [function() { return new OpenLayers.Layer.WMS("OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});} ] }, 'mapcontent');
Mapwidget会为您使用这些设置初始化地图。并且,请记住,您正在使用mapwidget。这个将OpenLayers包装起来。以下是一些有用的提示
- cgmap.config[‘mapcontent’].map:
当前的OpenLayers地图实例
- cgmap.config[‘mapcontent’].layers:
返回层的函数回调列表
- cgmap.state[‘mapcontent’]:
当前的经纬度/缩放设置(js映射)。
如果您之后需要控制地图,只需在文档就绪时注册一些内容即可。例如:
// add this in the /edit js textarea jq(document).ready(function() { cgmap['config']['mapcontent'].map.DOSOMETHING(); });
致谢
公司
贡献者
测试
作为一个doctest,我们可以在这里讲述一个故事。
首先,我们必须进行一些设置。我们使用Five附带的自带testbrowser,因为这样可以提供适当的Zope 2集成。尽管如此,大部分文档都在底层的zope.testbrowser包中。
>>> from Products.Five.testbrowser import Browser >>> browser = Browser() >>> portal_url = self.portal.absolute_url()
以下内容在编写和调试testbrowser测试时非常有用。它让我们能够看到错误日志中的所有错误信息。
>>> self.portal.error_log._ignored_exceptions = ()
有了这些,我们可以前往门户网站首页并登录。我们将使用PloneTestCase的默认用户来完成此操作
>>> from Products.PloneTestCase.setup import portal_owner, default_password
因为附加主题或产品可能会删除或隐藏登录组件,这个测试将使用Plone附带的登录表单。
>>> browser.open(portal_url + '/login_form') >>> browser.getControl(name='__ac_name').value = portal_owner >>> browser.getControl(name='__ac_password').value = default_password >>> browser.getControl(name='submit').click()
在这里,我们设置登录表单上的字段值,然后模拟提交点击。然后我们确保我们得到友好的登录消息
>>> "You are now logged in" in browser.contents True
最后,在继续之前,让我们返回网站首页
>>> browser.open(portal_url)
地图内容内容类型
在本节中,我们通过执行添加、更新和删除地图内容等基本操作来测试地图内容内容类型。
添加新的地图内容内容项
我们使用“添加新内容”菜单来添加新的内容项。
>>> browser.getLink('Add new').click() >>> browser.getControl('Map Content').click() >>> browser.getControl(name='form.button.Add').click() >>> browser.getControl(name='title').value = 'Map Content Sample' >>> js = """ ... jq('#mapcontent').css('height', '1024px'); ... jq('#mapcontent').css('width', '1024px'); ... var coords = {lon: 0.000000, lat: 0.000000, zoom: 10}; ... cgmap.state = {'default': coords, 'mapcontent': coords}; ... cgmap.extendconfig( ... {layers: [function() { ... return new OpenLayers.Layer.WMS("OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'});} ... ] ... }, ... 'mapcontent'); ... """ >>> browser.getControl(name='_js').value = js >>> browser.getControl('Save').click() >>> 'Changes saved' in browser.contents True
渲染
完成了!我们已将新的“地图内容”内容项添加到门户网站中,在视图模式下,它将使用mapwidget宏进行渲染
>>> '<script type="text/javascript">'+js in browser.contents True
变更日志
0.1 (2010-11-10)
首次发布 [kiorky]
项目详情
collective.geo.mapcontent-0.1.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | c91241604167229565ff37ecaff3572867f53150cfe99a03247eea8985f37e23 |
|
MD5 | 041cce77fa7a5c6e31dc47710e59ed00 |
|
BLAKE2b-256 | caedaf5fa18b230db293e21a5c9ca99287849183d77d254ab063b9555fb56b28 |