PHPackages                             madj2k/t3-gadgeto-google - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. madj2k/t3-gadgeto-google

ActiveTypo3-cms-extension[API Development](/categories/api)

madj2k/t3-gadgeto-google
========================

Extension with Utilites and ViewHelper for accession Google API and Google Maps

v13.4.31-stable(3mo ago)0666GPL-2.0+PHPPHP &gt;=8.3

Since May 6Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/skroggel/typo3-gadgeto-google)[ Packagist](https://packagist.org/packages/madj2k/t3-gadgeto-google)[ Docs](https://www.steffenkroggel.de)[ RSS](/packages/madj2k-t3-gadgeto-google/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (4)Versions (56)Used By (0)

Gadgeto Google
==============

[](#gadgeto-google)

**Gadgeto Google** is a powerful TYPO3 extension that provides utilities for integrating the Google Geolocation API and Google Maps into your TYPO3 installation. It allows automatic geolocation of records, map display with filters, consent management, and full customization via Fluid templates.

---

🚀 Features
----------

[](#-features)

- Automatically fetches geolocation data (latitude/longitude) from the Google Geolocation API when a record is saved in the backend.
- Displays an interactive Google Map with:
    - Address-based search functionality
    - Filterable markers via categories
    - Marker clustering to handle overlapping locations
    - Clickable markers with custom detail overlays
    - Ability to add **custom overlays** to highlight regions (e.g., specific countries)
- Fully customizable via Fluid templates
- Can be configured to use a single location as center of the map or show all definied locations at once
- List of all locations, hierarchically ordered by categories
- GDPR-compliant consent overlay for map loading
- Backend-ordered list of locations by category
- Extendable with your own models and repositories
- PageTS and TypoScript configuration for dynamic behavior

---

❗Breaking Changes
-----------------

[](#breaking-changes)

**IMPORTANT - BREAKING CHANGES v13:**

New template-structure. If you need to use the old templates, set the following TypoScript config via constants:

```
plugin.tx_gadgetogoogle {

	view {
		# cat=plugin.tx_gadgetogoogle/file; type=string; label=Path to template root (FE)
		templateRootPath = EXT:gadgeto_google/Resources/Private/v12/Templates/

		# cat=plugin.tx_gadgetogoogle/file; type=string; label=Path to template partials (FE)
		partialRootPath = EXT:gadgeto_google/Resources/Private/v12/Partials/

		# cat=plugin.tx_gadgetogoogle/file; type=string; label=Path to template layouts (FE)
		layoutRootPath = EXT:gadgeto_google/Resources/Private/v12/Layouts/
	}
}

```

**IMPORTANT - BREAKING CHANGES v12:**

Add the following classes to your HTML elements:

- `js-gadgetogoogle-map-consent-btn`: Consent button that enables the map
- `js-gadgetogoogle-map-filter-btn`: Filter buttons interacting with the map

---

📦 Installation
--------------

[](#-installation)

1. Install the extension using the Extension Manager or Composer.
2. Include the **static TypoScript** or use the provided **page setup** template.
3. The extension requires `sjbr/static-info-tables`. Import its tables through the Extension Manager to enable proper country support.

---

🔑 Google API Configuration
--------------------------

[](#-google-api-configuration)

You need **two separate Google API keys** to use all features:

### 1. Geolocation API Key

[](#1-geolocation-api-key)

Used to fetch coordinates based on addresses when saving a record in the backend.

- **Required access**: Geolocation API
- **Restriction type**: IP address (for backend security)

### 2. Maps JavaScript API Key

[](#2-maps-javascript-api-key)

Used to render the map in the frontend.

- **Required access**: Maps JavaScript API
- **Restriction type**: HTTP referrer (frontend usage)

### 3. Google Maps ID

[](#3-google-maps-id)

For enhanced styling and display behavior.

- **Map type**: JavaScript
- **Style type**: Raster map

More details:

- [Get API Key](https://developers.google.com/maps/documentation/javascript/get-api-key?hl=en)
- [Get Map ID](https://developers.google.com/maps/documentation/get-map-id?hl=en)

---

⚙️ Extension Configuration
--------------------------

[](#️-extension-configuration)

Go to **System → Settings → Extension Configuration** in the TYPO3 backend. Available global configuration options include:

### `apiHookTables`

[](#apihooktables)

Comma-separated list of database tables that should trigger a call to the Google Geolocation API to populate latitude and longitude.

> Ensure these tables have all necessary fields (see `ext_tables.sql`, especially `tx_gadgetogoogle_domain_model_location`).

### `defaultCountry`

[](#defaultcountry)

Defines a default/fallback country used when resolving address queries via the search bar. This value can be overridden in the plugin's FlexForm configuration.

### `removeFields`

[](#removefields)

Specifies which fields of the location records should be hidden in the backend. Provide a comma-separated list of field names.

### `pluginsWithHeader`

[](#pluginswithheader)

Controls which plugins display the "header" field in the backend form.

---

🛠 TypoScript Configuration
--------------------------

[](#-typoscript-configuration)

Place the following configuration into your TypoScript template to control frontend behavior:

```
plugin.tx_gadgetogoogle.settings {
  maxSearchRadius = 10000
  maxSearchDisplayRadius = 5000
  defaultCountry = DE
}

```

These options control:

- **maxSearchRadius**: Maximum distance (in meters) for address-based search.
- **maxSearchDisplayRadius**: Maximum radius for displaying matching markers.
- **defaultCountry**: As above, sets default country code.

If you're using a proxy server, you can also configure cURL to respect proxy settings to allow external API requests.

---

🧩 FlexForm Customization via PageTS
-----------------------------------

[](#-flexform-customization-via-pagets)

To extend the available layout options in your plugin FlexForms:

```
// Important: You have to specifiy the extension-plugin (e.g. gadgetogoogle_map)
// AND the tab in the flexform (e.g. view) correctly
TCEFORM.tt_content.pi_flexform.gadgetogoogle_map.view.settings\.layout {

    // add new option "List"
    addItems.list = List

    // Override label of existing option "default"
    altLabels.default = Slot

    // remove option "big"
    removeItems = big
}

TCEFORM.tt_content.pi_flexform.gadgetogoogle_map.list.settings\.paginationStyle {

    // remove option "More"
    removeItems = More
}

TCEFORM.tt_content.pi_flexform.gadgetogoogle_map.list.settings\.listStyle {

    // remove option "Category"
    removeItems = Category
}

```

---

🎨 Category Style Customization via PageTS
-----------------------------------------

[](#-category-style-customization-via-pagets)

To define selectable styles for categories:

```
TCEFORM.sys_category.tx_gadgetogoogle_style {

    // add new option "Layout.1"
    addItems.list = Layout-1

    // Override label of existing option "default"
    altLabels.default = Slot

    // remove option "big"
    removeItems = big
}

```

---

🧩 Restrict Selectable Categories via PageTS
-------------------------------------------

[](#-restrict-selectable-categories-via-pagets)

To limit the category selection tree in the backend for locations:

```
TCEFORM.tx_gadgetogoogle_domain_model_location.categories {
    config {
        treeConfig {
            startingPoints = 7 // parent category to start from
            appearance.nonSelectableLevels = 0,1 // make root and parent-category not selectable
        }
    }
}

```

---

🔄 Integration Into Your Own Extensions
--------------------------------------

[](#-integration-into-your-own-extensions)

You can integrate the geolocation functionality into your custom extensions in two ways:

### Option 1: Inheritance (Recommended)

[](#option-1-inheritance-recommended)

Extend your model from the `Location` class provided by this extension. This gives you all geolocation logic out of the box. 👉 [Learn how to extend Extbase models in TYPO3](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ExtensionArchitecture/HowTo/ExtendExtbaseModel/Index.html)

### Option 2: Trait + Interface

[](#option-2-trait--interface)

Implement `\Gadgeto\GadgetoGoogle\Domain\FilterableInterface` and use `FilterableTrait` in your model class.

> ⚠ You are responsible for:
>
> - Defining required TCA and DB fields (see `TCA/tx_gadgetogoogle_domain_model_location.php`)
> - Writing your own repositories

---

📍 Trigger Geolocation on Record Save
------------------------------------

[](#-trigger-geolocation-on-record-save)

### Recommended Method

[](#recommended-method)

Add your table to `apiHookTables` in the extension configuration. This automatically triggers geolocation when saving a record.

### Manual Hook (Alternative)

[](#manual-hook-alternative)

If you prefer a custom hook, register it in `ext_localconf.php`:

```
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['myhook'] =
   \Vendor\Extension\Hooks\TceMainHooks::class;
```

In your hook class, call the Geolocation service:

```
use Gadgeto\GadgetoGoogle\Service\GeolocationService;
```

See the example in `Classes/Hooks/TceMainHooks.php`.

---

👥 GDPR Consent Overlay
----------------------

[](#-gdpr-consent-overlay)

To comply with GDPR (DSGVO), a consent dialog must be shown before loading Google Maps. This overlay is part of the extension.

There is a config-file for klaro-consent-manager included. You can use it with `ext:klarokartie` by adding the following lines to your site-config (yaml):

```
klarokratie:
  klaro:
    config: EXT:klarokratie/Resources/Public/Config/KlaroConfigMinimal.js
    includes:
      - EXT:gadgeto_google/Resources/Public/Klarokratie/Includes/GoogleMaps.js

```

If you want to use a different consent manager, you can use the following JavaScript-Events depending on a given or revoked consent:

```
document.dispatchEvent(new CustomEvent('gadgetoGoogle:consent:given'));

```

```
document.dispatchEvent(new CustomEvent('gadgetoGoogle:consent:revoked'));

```

---

📚 Resources
-----------

[](#-resources)

- [Google Maps JavaScript API Documentation](https://developers.google.com/maps/documentation/javascript)
- [Google Geolocation API Overview](https://developers.google.com/maps/documentation/geolocation/overview)
- [TYPO3 Coding Guidelines](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/CodingGuidelines/Index.html)

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance78

Regular maintenance activity

Popularity14

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~13 days

Total

54

Last Release

114d ago

Major Versions

v12.4.24-stable → v13.4.0-stable2025-10-19

PHP version history (2 changes)v12.4.0-stablePHP &gt;=7.4

v13.4.0-stablePHP &gt;=8.3

### Community

Maintainers

![](https://www.gravatar.com/avatar/ca11ace9490b8fe0b145e7d32464fba5c8eddaa88d700b95d32241a226623e76?d=identicon)[SteffenKroggel](/maintainers/SteffenKroggel)

---

Top Contributors

[![skroggel](https://avatars.githubusercontent.com/u/8121847?v=4)](https://github.com/skroggel "skroggel (65 commits)")

---

Tags

geolocationTYPO3 CMSgoogle mapsGoogle Geo

### Embed Badge

![Health badge](/badges/madj2k-t3-gadgeto-google/health.svg)

```
[![Health](https://phpackages.com/badges/madj2k-t3-gadgeto-google/health.svg)](https://phpackages.com/packages/madj2k-t3-gadgeto-google)
```

###  Alternatives

[jweiland/events2

Events 2 - Create single and recurring events

2168.1k3](/packages/jweiland-events2)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103574.3k67](/packages/friendsoftypo3-content-blocks)[hn/typo3-mcp-server

TYPO3 extension that provides a Model Context Protocol (MCP) server for interacting with TYPO3 pages and records

9231.4k2](/packages/hn-typo3-mcp-server)[web-vision/wv_deepltranslate

DeepL Translate (CORE) - This extension provides option to translate content element, and TCA record texts to DeepL supported languages.

34311.2k](/packages/web-vision-wv-deepltranslate)[web-vision/deepltranslate-core

DeepL Translate (CORE) - This extension provides option to translate content element, and TCA record texts to DeepL supported languages.

34162.0k10](/packages/web-vision-deepltranslate-core)[jweiland/maps2

Maps2 - Create maps with Marker, Area, Routes or Radius based on Google Maps or OpenStreetMap

1496.3k20](/packages/jweiland-maps2)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
