Available since version 3.0.0
This is a pretty cool feature to extend your own extension with a new field which will
hold the reference UID to a PoiCollection record of maps2. So, if you have a location record or something
similar, then you can use our Maps2 registry to create a new field into a table of your extension. The default
name of the column will be
tx_maps2_uid, but you can change that, if you want.
Our Maps2 registry is adapted from TYPO3s Category Registry
Create a new file in [yourExt]/Configuration/TCA/Overrides/[yourTableName].php and add following lines of code:
\JWeiland\Maps2\Tca\Maps2Registry::getInstance()->add( 'events2', // Extension key of your extension 'tx_events2_domain_model_location', // tablename of your location table [ // add all columns to build a valid address as array // Add country only, if it is a string like "Germany". Else, see next options 'addressColumns' => ['street', 'house_number', 'zip', 'city', 'country'], // You can define a hard-coded country for all addresses. 'defaultCountry' => 'France', // Best option for country. If it is an INT and static_info_tables is loaded, it will // get country name from static_country. // If country could not be fetched, it will fallback to defaultCountry from above. 'countryColumn' => 'country', // With defaultStoragePid you can define where our maps2 record should be saved. // defaultStoragePid has following priority from low to high: // PID of your location record, Configuration of Maps2Registry, pageTSconfig (ext.maps2.defaultStoragePid) // This order is hardcoded and can not be changed. // So, if a PID with help of Maps2Registry was found, it will be overwritten with value of pageTSconfig. // Within the Maps2Registry we have following ordering from low to high: // A fixed value, an extension configuration value, a pageTSconfig value. // Define a fixed storage PID where to save our maps2 PoiCollection record. // Useful for small websites. Single domain instances. // Keep in mind that this value will be overwritten with pageTSconfig (ext.maps2.pid) 'defaultStoragePid' => 414, // Do not configure "defaultStoragePid" if you want to save maps2 PoiCollection records // in same storage as your location record. But, be careful: As a fallback we are using // pageTSconfig path "ext.maps2.defaultStoragePid" which has a higher priority than PID of your location record. // So, keep that in mind, remove "ext.maps2.defaultStoragePid" from pageTSconfig to save maps2 record in same storage // of your records. // Read an extension manager configuration from ext_conf_template.txt of a given extension 'defaultStoragePid' => [ 'extKey' => 'events2', // extension to read $EXTCONF from 'property' => 'poiCollectionPid', // Property with storage UID 'type' => 'extensionmanager' // If type is not given, we will use "extensionmanager" as default. ], // Read storage PID from pageTSconfig // You can configure that path to your needs. In example below we try to get storage PID // from pageTSconfig: ext.events2.poiCollectionPid = 4324 // Do not forget: If pageTSconfig (ext.maps2.defaultStoragePid) is set, it will overwrite this configuration. 'defaultStoragePid' => [ 'extKey' => 'events2', // Extension key to read storage PID from 'property' => 'poiCollectionPid', // Property key to read storage PID from 'type' => 'pagetsconfig' ], // Priority ordered version // We will read all these entries from array key 0 until array key 3. If a PID was found in f.e. // array key 2 (after entry 0 and 1 have not returned a valid PID) we will use it and will not // process further entries (entry 3) 'defaultStoragePid' => [ 0 => [ 'extKey' => 'news', 'property' => 'pid_of_maps2', 'type' => 'pagetsconfig' ], 1 => [ 'extKey' => 'my_ext', 'property' => 'specialConfiguredPidForMaps2', 'type' => 'pagetsconfig' ], 2 => [ 'extKey' => 'my_ext', 'property' => 'mapsPid', 'type' => 'extensionmanager' ], 3 => [ 'extKey' => 'events2', 'property' => 'poiCollectionPid', 'type' => 'extensionmanager' ], ], // You can synchronize additional fields of your record with maps2 PoiCollection // Please only use fields of type String or int. // 1:N, N:1 and N:M relations are not supported. Please use SignalSlot postUpdatePoiCollection // and synchronize them on your own. 'synchronizeColumns' => [ [ 'foreignColumnName' => 'location', // column name of your extension 'poiCollectionColumnName' => 'title' // column name of maps2 PoiCollection record ] ] ] );
After adding these lines of code you have to de- and reactivate your extension in ExtensionManager to execute the SQL queries in behind. Alternatively you can go into InstallTool and execute Database Compare to insert the new configured field.