跳转到主要内容

为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();
});

致谢

公司

makinacom

作者

贡献者

测试

作为一个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 (17.8 kB 查看散列)

上传时间:

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面