在您的Plone网站上发布房地产对象的一种简单专业的方法
项目描述
房地产经纪人
房地产经纪人产品将 Plone 转变为房地产经纪人网站。使用两种房地产内容类型展示您的商业和住宅房地产。允许访客通过提供的表单搜索数据库。为注册访客提供电子邮件更新。支持谷歌地图。轻松批量添加图片。PDF 导出。
验证文档
文档应正确且最新。为了确保这一点,文档用于测试软件。因此,软件和文档都得到了保证。这就是为什么您会看到文档中的代码示例。
首先进行一些小的设置:添加管理员用户和注册访客。
>>> self.loginAsPortalOwner() >>> self.portal.portal_membership.addMember('admin', 'secret', ... ['Manager'], []) >>> self.portal.portal_membership.addMember('visitor', 'secret', ... ['Reader'], [])
安装房地产经纪人
将 collective.realestatebroker 添加到您的构建出 eggs 和 zcml 中。如果您想使用开发构建出,请使用 https://github.com/collective/collective.realestatebroker 中的 buildout.cfg
如果您有旧 1.0 内容,可以通过在构建出中取消注释两行来迁移它,如注释所示。
在 Plone 中,使用管理员账户登录并通过快速安装程序(在 Plone 控制面板中:“添加/删除产品”)安装房地产经纪人。
>>> self.login('admin') >>> qi = self.portal.portal_quickinstaller >>> qi.installProduct('collective.realestatebroker')
附加产品
RealEstateBroker 使用 Maps 产品来集成谷歌地图。确保在安装 RealEstateBroker 后,该产品也位于网站上。
>>> self.portal.portal_quickinstaller.isProductInstalled('Maps') True
PloneFlashUpload 用于轻松批量上传图片。
>>> self.portal.portal_quickinstaller.isProductInstalled('PloneFlashUpload') True
在幕后,使用 reportlab 库导出 PDF。
商业和住宅房地产内容类型
有两种内容类型,住宅和商业。它们在某些字段上有所不同。
>>> self.portal.invokeFactory('Residential', id='home1') 'home1' >>> self.portal.invokeFactory('Commercial', id='office1') 'office1'
旧 1.0 版本到 2.0 的迁移支持
如果您使用迁移构建出安装,重新安装 realestatebroker 将执行迁移。迁移执行以下操作
用住宅/商业对象替换旧的 REHome/REBusiness 对象。
REHome/REBusiness 中有 CMFPhotoAlbums,其中包含 CMFPhotos,这些照片将直接移动到(文件夹式的)住宅/商业对象作为常规图片。
迁移旧工作流状态或旧状态字段到新工作流状态。
如果新内容类型中仍然存在,则复制所有字段。
最好在 3.0 中创建一个新站点,并选择性地移动内容。无论如何,您不能直接进行 2.0 到 3.0 的 Plone 迁移。如果您已安装迁移构建出,则可以通过导出旧房屋和办公室的 .zexp 并将其导入 3.0 站点来实现这一点,前提是您已安装迁移构建出:该构建出包括旧 RealEstateBroker 产品、CMFPhoto 和 CMFPhotoAlbum 的修改版,允许您加载旧对象。
定制
几乎可以肯定,realestatebroker 将需要适应本地情况。在荷兰,空调并不常见,但在美国南部,这可能是一项您想要跟踪的内容。
archetypes.schemaextender 是一个用于干净地适应模式的出色工具。有关如何操作的说明,请参阅 plone.org 上的 realestatebroker 文档 部分。
此外,PDF 导出还需要进行一些工作,例如添加页眉/页脚。并选择不同的字体。在这里:请参阅 plone.org 文档。
房地产工作流
房地产经纪人附带一个名为“realestate_workflow”的特殊工作流,该工作流映射到住宅和商业内容类型。
>>> home1 = self.portal.home1 >>> wftool = self.portal.portal_workflow >>> self.failUnless('realestate_workflow' in wftool.objectIds()) >>> wftool.getChainForPortalType('Commercial') ('realestate_workflow',) >>> wftool.getChainForPortalType('Residential') ('realestate_workflow',)
房地产内容的初始状态应为离线,这意味着匿名用户无法查看,只有所有者、编辑和管理员可以编辑。从该状态我们可以发布内容,使其进入“新”状态。
>>> wftool.getInfoFor(home1, 'review_state') 'offline' >>> wftool.doActionFor(home1, 'publish', wf_id='realestate_workflow') >>> wftool.getInfoFor(home1, 'review_state') 'new'
两周后,新项目将变成常规项目,以便在新项目中更突出地显示新项目。同样,已售项目将保持可见状态两周(这对于给人留下“这个房地产经纪人确实卖了很多房子”的印象很重要)。
门户属性
RealEstateBroker在portal_properties下安装了一个具有默认属性的属性表。
>>> pptool = self.portal.portal_properties >>> self.failUnless('realestatebroker_properties' in pptool.objectIds())
站点属性
在导航树中不显示住宅或商业对象。
>>> navtree_props = pptool.navtree_properties >>> types_not_to_list = navtree_props.getProperty('metaTypesNotToList') >>> self.failUnless('Residential' in types_not_to_list) >>> self.failUnless('Commercial' in types_not_to_list)
词汇表
对于城市字段,我们使用一个从属性表读取值的词汇表。
>>> from collective.realestatebroker.content.vocabularies import CityVocabularyFactory >>> vocab = CityVocabularyFactory(self.portal) >>> [item.value for item in vocab] [u'New York', u'London', u'Amsterdam', u'Paris', u'Tokyo', u'Alberschwende']
对于房屋类型字段,我们使用一个从属性表读取值的词汇表。
>>> from collective.realestatebroker.content.vocabularies import HouseTypeVocabularyFactory >>> vocab = HouseTypeVocabularyFactory(self.portal) >>> [item.value for item in vocab] [u'Apartment', u'Villa', u'Mansion']
对于房间字段,我们使用一个从属性表读取值的词汇表。
>>> from collective.realestatebroker.content.vocabularies import RoomsVocabularyFactory >>> vocab = RoomsVocabularyFactory(self.portal) >>> [item.value for item in vocab] [u'1', u'2', u'3', u'4', u'5', u'6', u'7', u'8']
portal_catalog索引
测试索引是否已在portal_catalog工具中创建。
>>> indexes = self.portal.portal_catalog.indexes() >>> for idx in ('getPrice', 'getCity', 'is_floorplan'): ... self.failUnless(idx in indexes)
Google地图支持
RealEstateBroker使用“Maps”产品来支持Google地图。我们的内容类型可以被Maps使用。
>>> from collective.realestatebroker.interfaces import IRealEstateContent >>> from collective.realestatebroker.interfaces import IResidential >>> IRealEstateContent.providedBy(home1) True >>> IResidential.providedBy(home1) True >>> from Products.Maps.interfaces import IMapView
出于性能原因,mapsjavascripts没有在主视图(以及几个其他视图)中加载。
>>> view = home1.restrictedTraverse('@@maps_googlemaps_enabled_view') >>> view.enabled False
我们在“编辑”表单和“地图”选项卡中显示它。
>>> class Dummy: ... url = 'dummy' ... def getURL(self): ... return self.url >>> view.request = Dummy() >>> view.enabled # still no. False >>> view.request.url = 'something/edit' >>> view.enabled True >>> view.request.url = 'something/map' >>> view.enabled True
collective.realestatebroker安装
要使用传统的Zope 2实例将collective.realestatebroker安装到全局Python环境(或工作环境),你可以这样做
安装依赖项ReportLab,例如:bin/easy_install --find-links=http://ftp.schooltool.org/schooltool/eggs Reportlab 在这里了解如何安装setuptools(和EasyInstall):http://peak.telecommunity.com/DevCenter/EasyInstall
当你阅读这个时,你可能已经运行了easy_install collective.realestatebroker。如果之前因为缺少ReportLab依赖项而失败,现在再试一次。
在/path/to/instance/etc/package-includes目录中创建一个名为collective.realestatebroker-configure.zcml的文件。该文件应仅包含以下内容
<include package="collective.realestatebroker" />
或者,如果你正在使用zc.buildout和plone.recipe.zope2instance配方来管理你的项目,你可以这样做
告诉buildout可以在ftp.schooltool.org上找到ReportLab依赖项,例如
[buildout] ... find-links = http://dist.plone.org http://download.zope.org/ppix/ http://download.zope.org/distribution/ http://effbot.org/downloads http://ftp.schooltool.org/schooltool/eggs/将collective.realestatebroker添加到要安装的egg列表中,例如
[buildout] ... eggs = ... collective.realestatebroker告诉plone.recipe.zope2instance配方安装ZCML slugs
[instance] recipe = plone.recipe.zope2instance ... zcml = collective.realestatebroker重新运行buildout,例如使用
$ ./bin/buildout
如果你打算从另一个包的configure.zcml文件中显式包含包,则可以跳过ZCML slugs。
collective.realestatebroker的历史
2.3 (2012-10-14)
已迁移到https://github.com/collective/collective.realestatebroker
重新引入版本特定的Products.contentmigration==1.0b4的pin,因为与其他版本一起使用时会有测试失败。[maurits]
不再需要archetypes.schemaextender(1.0b1)和Products.contentmigration(1.0b4)的特定版本,但让这些成为最小版本。[maurits]
2.2 (2009-06-10)
在所有词汇表中使用unicode_vocabulary而不是SimpleVocabulary,以捕获如http://plone.org/products/realestatebroker/issues/6中所述的UnicodeEncodeErrors。[maurits]
从Products.PloneFlashUpload 1.2rc复制代码,以便在相册管理中再次实现上传。(至少在Linux上的Flash 10上)。[maurits]
2.1 (2009-03-26)
感谢Benjamin Klups添加了法语翻译。[jladage]
2.0.9 (2009-03-04)
允许访问AlbumView.first_image;当在例如集合端口使用时,会触发未授权错误。[maurits]
2.0.8 (2009-01-27)
修复了楼层计划过滤器的错误:照片管理页面也过滤了它们,使得它们无法编辑。[reinout]
2.0.7 (2009-01-27)
从所有照片列表中过滤出楼层计划。[reinout]
2.0.6 (2008-12-18)
由jladage进行的某些html修复?
2.0.5 (2008-12-17)
修复了当楼层计划未附加到楼层时出现的keyerror。现在已捕获该keyerror本身及其原因也已移除。[reinout]
2.0.4 (2008-07-30)
在setup.py中将ReportLab和Products.Maps添加为依赖项。[maurits]
2.0.3 (2008-07-03)
与rc4相同。
2.0.3 rc4(2008-07-02)
从目录大脑创建我们自己的img标签,而不是使用.get_object()来使用archetypes的tag()方法,该方法会唤醒对象。[reinout]
2.0.3 rc3(2008-06-25)
修复了在plone 3.1.2上出现的奇怪的attributeerror。切换到该plone版本修复了专辑视图中的kss错误。[reinout]
2.0.3 rc2(2008-06-25)
将insert_image()中的可选max_height属性添加到允许保护pdf首页上过大的肖像图像。[reinout]
将包含图像的表格单元格添加css类,以便在res/comm列表中垂直对齐图像(如果需要的话)。[reinout]
在注释中缓存已渲染的pdf,从而节省了大量CPU时间。[reinout]
2.0.3 rc1(已发布)
将rent_buy移动到财务架构的编辑视图,以便所有财务字段都在同一屏幕上。[fredvd]
添加了一个字段,用于表示价格是固定价格还是仍在协商中。尚未在collective.realestatebroker包的视图模板中使用(尚),但可以在自己的模板覆盖中公开。[fredvd]
2.0.2(发布于2008-04-21)
没有更改,制作最终发布版以供参考。[fredvd]
2.0.1 rc4(发布于2008-03-06)
添加了新的已租状态及其伴随的转换,以便租用的房屋有适当的列表。[fred]
2.0.1 rc3(发布于2008-02-29)
修复了视图顺序(首先是状态,其次是创建日期)。[joris]
修复了测试,以反映rc2中进行的更改。[reinout]
将house_type添加到portal_catalog索引(getHouse_type)[fred]
在formHelp中添加了低调的配色。[mirella]
2.0.1 rc2(发布于2008-02-04)
修复了googlemaps的javascript的条件错误:它没有在编辑表单中加载。[reinout]
2.0.1 rc(发布于2008-02-04)
修复了房屋/办公室显示中的错误:主要缩略图现在指向/album而不是/photo。/photo可能导致重定向的混乱。[reinout]
2.0.1 beta3(发布于2008-01-25)
现在只有在url以‘/map’结尾时才启用Google maps的js,因此其他标签不需要加载它。[reinout]
在房地产视图中更改了sort_order,以便“新”房地产对象始终位于列表顶部。这些对于检查您的房地产的访客来说是最有趣的。[fred]
移除了建筑年份字段的限制。这允许您添加“2007-2008”作为建筑年份,例如。[reinout]
2.0.1 beta2(发布于2008-01-17)
在列表模板中添加了仅管理员可用的文本搜索表单。[reinout]
2.0.1 beta(发布于2008-01-15)
将“view”动作大写,以便拾取翻译。[reinout]
Dutch翻译修复(“opslag”)[reinout]
删除了未使用的viewletmanager配置,并为每个皮肤启用了titlemanager。
在pdf生成器中添加了两个额外的safe_unicode()调用,以防止解码错误。
2.0最终版
于2008-01-11发布,rc6没有更改。
2.0 rc6
更新了README。[reinout]
将旧的临时图像大小名称重命名为更合适的东西。[fredvd]
由于字段的值与旧数据库中的值相同,因此禁用了特殊的kk_von处理。对此造成的麻烦表示歉意。[reinout]
2.0 rc5
修复了损坏的图像(宽度==0,因此会得到除以零的错误)[reinout]
2.0 rc4
rent_buy词汇表再次由propertysheet处理。
2.0 rc2
可选禁用空字段过滤。[reinout]
布尔字段的翻译改进。[reinout]
小的PDF页面边距更改。[reinout]
租赁/购买现在是一个固定词汇(用于用户友好的默认值)。[reinout]
为损坏的图像添加了try/except(读:重定向到登录页面的不可访问图像)。[Reinout]
2.0 rc
翻译了模式名称和工作流程名称(在旧式的产品reb_i18n中分开)[Reinout van Rees]
也将租赁/购买字段添加到住宅中。
项目详情
collective.realestatebroker-2.3.zip的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 19699577599a7f5bc409bf6cf16c25b37d2a2c454caa6869daea9b4047d03216 |
|
MD5 | bdbcd59f007e6ca8d427ae9045511042 |
|
BLAKE2b-256 | 0d4f1a191cb2a833c8a0b9832383a9cc68027a185c5553c171e02d37a6d7b126 |