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);
        }
    }
}



