跳转到主要内容

在您的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

作者

原始1.0版本由Ahmad Hadi和Jean-Paul Ladage制作。

2.0重写由Reinout van ReesJean-Paul LadageFred van DijkMirella van Teulingen完成,他们都是Zest software的成员。

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 (341.3 kB 查看哈希值)

上传时间

支持者:

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