in2code / osm
OSM - TYPO3 的 OpenStreetMap 扩展
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- typo3/cms-core: ^11.5 || ^12.3
Suggests
- friendsoftypo3/tt-address: Show address markers from tt_address records in a map
Replaces
- typo3-ter/osm: 4.0.3
README
简介
一个小型但现代的 OpenStreetMap 扩展,适用于 TYPO3 (11 及以上版本)。您可以简单地显示带有或没有标记的地图。可以添加一个或多个地址,可以是可读的地址或带有地理坐标。
第二个插件允许您显示来自 tt_address 记录的地址(当 tt_address.latitude 和 .longitude 被填充时)。
无 jQuery,仅使用原生 JS。使用现代资源收集器用于包含 JS 或 CSS。可以使用 PSR-14 事件调度器来操作标记和标签。
⚠️ TYPO3 13 兼容性
有关如何获取 TYPO3 12 版本的更多信息,请参阅 EAP 页面(德语) 或 EAP 页面(英语)
插件 1
插件 2
注意 确保字段 tt_address.name
、tt_address.description
、tt_address.latitude
和 tt_address.longitude
已正确填写
安装
通过 composer 添加此扩展(在经典模式下,TYPO3 可能可以工作,但不受支持)
composer require in2code/osm
别忘了将类型数 1597149189 添加到您的站点配置中的 AJAX 请求标记,如下所示
...
routeEnhancers:
PageTypeSuffix:
type: PageType
default: /
suffix: /
index: ''
map:
/: 0
.html: 0
'feed.xml': 9818
'markers.json': 1597149189
...
常见问题解答
如何覆盖路径?
始终通过 TypoScript 设置 - 如下所示
plugin.tx_osm {
view {
templateRootPaths {
0 = EXT:osm/Resources/Private/Templates/
1 = EXT:yoursitepackage/Resources/Private/Templates/Extensions/Osm/
}
layoutRootPaths {
0 = EXT:osm/Resources/Private/Layouts/
1 = EXT:yoursitepackage/Resources/Private/Layouts/Extensions/Osm/
}
}
}
如何定义自己的 CSS 或 JS?
CSS 和 JS 通过布局 HTML 模板包含。您可以根据需要简单调整路径。
在 Pi2 中过滤地址到某些页面
如果您不想在编辑器的 FlexForm 选择中展示所有可用的 tt_address 记录,您可以通过 Page TSconfig 过滤到一或多个页面,如下所示
tx_osm {
flexform {
pi2 {
addressPageIdentifiers = 2,3,4
}
}
}
操作标记
您可以通过 PSR-14 事件调度器按描述操作标记。
在您的站点包中的配置/Services.yaml
services:
Vendor\YourSitepackage\EventListener\OsmManipulator:
tags:
- name: event.listener
identifier: 'osm-marker-manipulation'
event: In2code\Osm\Domain\Model\MarkerContainer
示例调度器
<?php
declare(strict_types=1);
namespace Vendor\YourSitepackage\EventListener;
use In2code\Osm\Domain\Model\Marker;
use In2code\Osm\Domain\Model\MarkerContainer;
/**
* Class OsmManipulator as an example
*/
class OsmManipulator
{
/**
* @param MarkerContainer $markerContainer
* @return void
*/
public function __invoke(MarkerContainer $markerContainer): void
{
/** @var Marker $marker */
foreach ($markerContainer->getMarkers() as $marker) {
$marker->setMarker(1);
$marker->setTitle('new title');
$marker->setDescription('new description');
$marker->setLatitude(10.00000);
$marker->setLongitude(10.00000);
$marker->setIcon('/typo3conf/ext/yoursitepackage/Resources/Public/Icons/Marker.png');
$marker->setIconHeight(28);
$marker->setIconWidth(28);
$marker->setIconOffsetX(1);
$marker->setIconOffsetY(-10);
}
}
}