ujamii/ ujamii-geocoder
连接http://geocoder-php.org/Geocoder与TYPO3 DataHandler API
Requires
- geocoder-php/google-maps-provider: ^4.2
- php-http/guzzle6-adapter: ^1.1
- php-http/message: ^1.6
- typo3/cms-core: ^9.5
This package is auto-updated.
Last update: 2024-09-16 09:32:04 UTC
README
连接http://geocoder-php.org/Geocoder与TYPO3 DataHandler API。通过此扩展,您可以在编辑器在TYPO3后端更改记录时轻松添加地理数据。您只需通过TCA配置您的实体“在地理编码器眼中的样子”即可。
安装
目前仅在TYPO3的composer模式下工作,所以
composer require ujamii/ujamii-geocoder
用法
只需将新的配置数组添加到您的TCA的ctrl
部分。
..['ctrl']['geocoder'] = [ 'triggerFields' => ['street', 'zip', 'city'], 'getAddressString' => 'Your\Namespace\Domain\Model\YourEntity->getAddressString' ];
并提供一个方法(例如,在实体或帮助类中),根据一个实体的数据库数据生成一个复合地址字符串(以下为示例)。
选项
以下选项是可能的
triggerFields(必需)
这些字段的更改将触发地理编码过程。
getAddressString(必需)
一个通过TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction
调用的方法,该方法应返回一个完整的地址字符串。传递给此方法的第一个参数是合并后的数据数组(从数据库中未更改的实体数据 + 从后端表单中更改的值)。
示例
public function getAddressString($dataArray) { return $dataArray['location']; }
locale(默认:de)
在地理编码器中使用的区域。
latField(默认:lat)
纬度值的目标字段名称。
lngField(默认:lng)
经度值的目标字段名称。
httpClientClass(默认:\Http\Adapter\Guzzle6\Client::class)
http客户端的类名,请参阅可能的包
providerClass(默认:\Geocoder\Provider\GoogleMaps\GoogleMaps::class)
提供者的类名,请参阅可能的包
providerParams
提供者的可选参数。(例如,Google Maps的API密钥)
geocoderClass(默认:\Geocoder\StatefulGeocoder::class)
地理编码器的类名。
示例
假设记录是数据库中的新闻记录,具有3个字段:位置、纬度和经度。字段位置包含类似Alexanderplatz, Berlin, Deutschland
的内容,而纬度和经度是您希望编辑器更改位置时自动填充的字段。
将其添加到您的typo3conf/ext/your_extension/Configuration/TCA/Overrides/tx_news_domain_model_news.php
或typo3conf/ext/your_extension/Configuration/TCA/tx_ext_domain_model_entity.php
文件。
$GLOBALS['TCA']['tx_news_domain_model_news']['ctrl']['geocoder'] = [ 'triggerFields' => ['street', 'zip', 'city'], 'getAddressString' => 'Your\Namespace\Domain\Model\YourEntity->getAddressString', 'providerParams' => [ 0 => null, 1 => null, 2 => '<GMAPS_API_KEY>' ] ];
在YourEntity
中添加一个类似的方法
public function getAddressString($dataArray) { return sprintf('%s, %s %s', $dataArray['street'], $dataArray['zip'], $dataArray['city']); }
作为命令或计划任务使用
此扩展还提供了填充纬度/经度字段的0值的命令。它从TCA中读取配置,遍历每个配置的表,搜索lat = 0 OR lng = 0。对于每行匹配项,执行地理编码过程,并将值更新到数据库中。该命令生成一些日志输出以跟踪已完成的工作。
由于它是一个默认的Symfony控制台命令,因此也可以通过计划任务调用。
vendor/bin/typo3 geocoder:fillmissingdata
待办事项
- 发布到TER
- 目前providerParams[0]始终填充httpClient,这可能不适用于所有提供者