makina corpus为collective.geo(使用c.g/mapwidget和c.g.openlayers)映射内容类型
collective.geo.mapcontent的Python项目详细描述
Introduction
这是OpenLayers和collective.geo.mapWidget的一个非常小的轻量级集成。 想法是有一个地图内容类型来创建完整的可定制地图与集体。地理灵活性。 最后一个目标是在一个内容类型上存储一些javascript模板来初始化映射。
因为它需要用OpenLead和jQuery编写一些JavaScript,它不是一个“终端用户”的解决方案,而是一个方便灵活的方法来集成PLONE中的OpenLead。
Installation
只要简单的安装collective.geo.geopoint就足够了。 或者,构建用户可以安装collective.geo.geopoint作为特定项目构建的一部分,方法是使用如下构建配置:
[buildout] ... eggs = collective.geo.mapcontent ... [instance] ... zcml = collective.geo.mapcontent
How to use
在plone接口中,只需添加一个映射。 您的MAPID是: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: the current OpenLayers map instance
cgmap.config[‘mapcontent’].layers: the list of function callbacks returning a layer
cgmap.state[‘mapcontent’]: the current long/lat/zoom settings (js mapping).
如果以后需要控制映射,只需在文档准备好时注册一些内容。 例如:
// add this in the /edit js textarea jq(document).ready(function() { cgmap['config']['mapcontent'].map.DOSOMETHING(); });
Tests
作为一个医生,我们可以在这里讲一个故事。
首先,我们必须进行一些设置。我们使用随附的testbrowser 因为这提供了正确的zope 2集成。大部分 不过,文档在底层的zope.testbrower包中。
>>> 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
由于附加主题或产品可能会删除或隐藏登录portlet,因此此测试将使用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)
The Map Content content type
在本节中,我们将通过执行 添加、更新和删除地图内容内容等基本操作 项目。
Adding a new Map Content content item
我们使用“添加新内容”菜单添加新内容项。
>>> 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
Rendering
我们完了!我们向门户添加了一个新的“地图内容”内容项,在视图模式下,它将使用mapWidget宏进行渲染
>>> '<script type="text/javascript">'+js in browser.contents True