m18/profitbase

M18 profitbase 导出解析器

1.1.6 2021-03-09 10:20 UTC

This package is auto-updated.

Last update: 2024-09-09 18:28:42 UTC


README

Build Status

该工具将 Profitbase 的 XML 导出转换为对象,以便进一步处理。

安装

该工具的最新版本可通过 Composer 安装

composer require m18/profitbase

生成对象

处理数据流

要创建对象,需要扩展抽象类 M18\Profitbase\Handlers\XML

<?php
namespace M18\Tools\Data\Profitbase;

use M18\Profitbase\Handlers\XML;
use M18\Profitbase\Models\Result\Data as ResultData;

final class Handler extends XML
{
	public function getData($resultModel = null, bool $get_values = true): ResultData
	{
		$resultModel = parent::getData($resultModel, $get_values);

		return $resultModel;
	}
}

如果需要,可以在该类中添加对象的其他处理。要从一个或多个数据流中创建对象,需要在 Handler::getData() 方法中传递 $resultModel 对象。

链接

Profitbase XML 数据流的链接格式如下: https://pbXXXX.profitbase.ru/export/profitbase_xml/{hash}

Handler::$URL = 'https://pbXXXX.profitbase.ru/export/profitbase_xml/{hash}';

将多个数据流合并成一个对象

$handler = new Handler();
$url_list = $config->url_list;

$profitbase = null;

foreach ($url_list as $import_url)
{
	try {
		Handler::$URL = $import_url;
		$profitbase = $handler->getData($profitbase);
	}
	catch (Exception $exception)
	{
		die($exception->getMessage());
	}
}

房间字段

对于房间对象,可以指定要获取的字段列表。例如,如果只需要部分数据流节点或使用了额外的元素。

负责房间字段的是类 \M18\Profitbase\Models\Utils\RoomFields。Room 对象将默认包含以下字段:

  • is_new
  • price
  • area
  • price-meter
  • balcony-count
  • loggia-count
  • separated-bathroom-unit
  • combined-bathroom-unit
  • window-view
  • studio
  • rooms
  • floor
  • building-section
  • description

要添加额外的字段集,请使用方法 \M18\Profitbase\Models\Utils\RoomFields::set(array $fieldset)。其中,$fieldset 是一个数组,格式为 array({节点名称} => {字段类型})

要重置当前字段集,请使用方法 \M18\Profitbase\Models\Utils\RoomFields::clear()

示例

\M18\Profitbase\Models\Utils\RoomFields::set(array('kitchen-space' => 'float', 'living-space' => 'float'));
\M18\Profitbase\Models\Utils\RoomFields::set(array('floor' => 'string'));

自定义字段

在 Profitbase 中存在所谓的自定义字段。这些字段的名称以编码方式表示,例如: pbcf_5b03c2b13a104。为了提高字段的可读性,在处理对象之前可以设置自定义字段的别名。

use M18\Profitbase\Models\Utils\CustomFields;

CustomFields::setAlias(array(
	'pbcf_5b03c2b13a104' => 'bti_number',
	'pbcf_5b03c2b141cc6' => 'bti_area',
	'pbcf_5b03c2b146165' => 'area_wo_balcony',
	'pbcf_5b03c2b149d47' => 'area_hallway',
));