https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Yellowpages2 

Extension key

yellowpages2

Package name

jweiland/yellowpages2

Version

main

Language

en

Author

Stefan Froemken, Hoja Mustaffa Abdul Latheef

License

This document is published under the Creative Commons BY 4.0 license.

Rendered

Fri, 06 Feb 2026 09:00:04 +0000


With yellowpages2 you can build your own industry directory.


Table of Contents:

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Users Manual 

Target group: Editors

  1. Select a page where you want to insert yellowpages2
  2. Insert a new content element of type: General Plugin
  3. On tab Plugin select Industry Directory from selectbox.
  4. Confirm reload to load special input fields for our extension (FlexForm).
  5. Save

Plugin Options 

Choose View

You can select between List and Detail view

PID of detail page

If you want another Style for detail view it may make sense to move indistry directory onto another page. Define its PID here.

PID of list page

If you have defined an PID for detail page, it may make sense to set this value within the plugin on detail page to generate correct links back to this list page.

Preset trade

Select a trade to reduce the result on website to your selection on startup.

District

Reduce industry directory records on website to this district

Company Record 

  1. Select a Storage Page
  2. Create a new record of type Company
  3. Give it a title. We will use the first letter of title for our glossary navigation.
  4. Enter a description and assign some trades to it.
  5. By default you can insert up to 5 images, but only one logo.

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Extension Settings 

Some general settings for yellowpages2 can be configured in Admin Tools -> Settings.

Tab: Basic 

poiCollectionPid 

Default: 0

Only valid, if you have installed EXT:maps2, too.

While creating location records we catch the address and automatically create a maps2 record for you. Define a storage PID where we should store these records.

emailFromAddress 

Default: empty (use value from INSTALL_TOOL)

With yellowpages2 you can give your website visitors the possibility to create new events. These created records will be hidden by default. Add an email address of the sender, if a new record was created over the frontend.

emailFromName 

Default: empty (use value from INSTALL_TOOL)

With yellowpages2 you can give your website visitors the possibility to create new events. These created records will be hidden by default. Add a name of the sender, if a new record was created over the frontend.

emailToAddress 

Default: empty

With yellowpages2 you can give your website visitors the possibility to create new events. These created records will be hidden by default. Add an email address of the receiver, if a new record was created over the frontend.

emailToName 

Default: empty

With yellowpages2 you can give your website visitors the possibility to create new events. These created records will be hidden by default. Add a name of the receiver, if a new record was created over the frontend.

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Configuration 

View 

view.templateRootPaths 

Default: Value from Constants EXT:yellowpages2/Resources/Private/Templates/

You can override our Templates with your own SitePackage extension. We prefer to change this value in TS Constants.

view.partialRootPaths 

Default: Value from Constants EXT:yellowpages2/Resources/Private/Partials/

You can override our Partials with your own SitePackage extension. We prefer to change this value in TS Constants.

view.layoutsRootPaths 

Default: Value from Constants EXT:yellowpages2/Resources/Layouts/Templates/

You can override our Layouts with your own SitePackage extension. We prefer to change this value in TS Constants.

Persistence 

persistence.storagePid 

Set this value to a Storage Folder (PID) where you have stored the records.

Example: plugin.tx_yellowpages2.settings.pidOfMaps2Plugin = 21,45,3234

Settings 

settings.pidOfMaps2Plugin 

Default: 0

Example: plugin.tx_yellowpages2.settings.pidOfMaps2Plugin = 12

Define the page UID where the EXT:maps2 plugin is located to show an address on a map.

settings.startingUidForCategories 

Default:

If you need frontend editing you should set this value to a parent category UID whose sub-categories should be assigned to the category selector.

settings.uidOfDefaultDistrict 

Default:

If you need frontend editing you can set this value to be a preset for new companies in frontend.

setting.pidOfDetailPage 

Default: 0

Example: plugin.tx_yellowpages2.settings.pidOfDetailPage = 84

If you have inserted the Industry Directory plugin for detail view onto another page, you can set its PID to this property here.

setting.pidOfListPage 

Default: 0

Example: plugin.tx_yellowpages2.settings.pidOfListPage = 84

If you have inserted the Industry Directory plugin for detail view onto another page, you can set the PID of list page here to have correct links back to list view.

settings.userGroup 

Default:

If you will allow for frontend users to create and edit their own business listings you have assign them a frontend usergroup and add this group UID to this property.

settings.glossary.mergeNumbers 

Default: 1

Example: plugin.tx_yellowpages2.settings.glossary.mergeNumbers = 0

Merge record titles starting with numbers to 0-9 in glossary.

settings.pageBrowser.itemsPerPage 

Default: 15

Example: plugin.tx_yellowpages2.settings.pageBrowser.itemsPerPage = 20

Reduce result of records to this value for a page

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Routes 

With TYPO3 9 you have the possibility to configure RouteEnhancers

Example Configuration 

routeEnhancers:
  Yellowpages2Plugin:
    type: Extbase
    extension: Yellowpages2
    plugin: Directory
    routes:
      -
        routePath: '/first-company-page'
        _controller: 'Company::list'
      -
        routePath: '/company-page-{page}'
        _controller: 'Company::list'
        _arguments:
          page: '@widget_0/currentPage'
      -
        routePath: '/company-by-letter/{letter}'
        _controller: 'Company::list'
      -
        routePath: '/show/{company_title}'
        _controller: 'Company::show'
        _arguments:
          company_title: company
    requirements:
      letter: '^(0-9|[a-z])$'
      company_title: '^[a-zA-Z0-9]+$'
    defaultController: 'Company::list'
    aspects:
      company_title:
        type: PersistedAliasMapper
        tableName: tx_yellowpages2_domain_model_company
        routeFieldName: path_segment
Copied!

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Pagination 

yellowpages2 uses the SimplePagination from TYPO3 Core to navigate through your records with first, previous, next and last buttons. If you need something more complex like 1, 2 ... 56, 57, 58 ... 123, 124 you should use another pagination library or build your own one. In the next steps I explain you how to implement the numbered_pagination solution of Georg Ringers.

  1. Install numbered_pagination

    Install and activate numbered_pagination extension from Georg Ringer. Please check in your SitePackage extension that numbered_pagination is set as a dependency and will be loaded before yellowpages2 and your SitePackage.

  2. Change pagination class in TypoScript

    plugin.tx_yellowpages2.pageBrowser.class = GeorgRinger\NumberedPagination\NumberedPagination
    Copied!
  3. Change path to yellowpages2 partials

    Set constant partialRootPath to a location within your SitePackage:

    plugin.tx_yellowpages2.view.partialRootPath = EXT:site_package/Resources/Private/Extensions/Yellowpages2/Partials/
    Copied!
  4. Create Pagination template

    Create file Resources/Private/Extensions/Yellowpages2/Partials/Component/Pagination.html with example content from numbered_pagination https://github.com/georgringer/numbered_pagination/blob/master/Resources/Private/Partials/Pagination.html

    <html lang="en"
          xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
          data-namespace-typo3-fluid="true">
    
    <ul class="f3-widget-paginator">
        <f:if condition="{pagination.previousPageNumber} && {pagination.previousPageNumber} >= {pagination.firstPageNumber}">
            <li class="previous">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.previousPageNumber})}" title="{f:translate(key:'pagination.previous')}">
                    {f:translate(key:'widget.pagination.previous', extensionName: 'fluid')}
                </a>
            </li>
        </f:if>
        <f:if condition="{pagination.hasLessPages}">
            <li></li>
        </f:if>
        <f:for each="{pagination.allPageNumbers}" as="page">
            <li class="{f:if(condition: '{page} == {paginator.currentPageNumber}', then:'current')}">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: page})}">{page}</a>
            </li>
        </f:for>
        <f:if condition="{pagination.hasMorePages}">
            <li></li>
        </f:if>
        <f:if condition="{pagination.nextPageNumber} && {pagination.nextPageNumber} <= {pagination.lastPageNumber}">
            <li class="next">
                <a href="{f:uri.action(action:actionName, arguments:{currentPage: pagination.nextPageNumber})}" title="{f:translate(key:'pagination.next')}">
                    {f:translate(key:'widget.pagination.next', extensionName: 'fluid')}
                </a>
            </li>
        </f:if>
    </ul>
    </html>
    Copied!
  5. Clear Cache

    Needed to reload the fluid templates.

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Updating 

If you update EXT:yellowpages2 to a newer version, please read this section carefully!

Upgrade to Version 7.0.0 

This version is focussed on upgrading the compatibility version to TYPO3 version 12 LTS. We moved some extension functionalities from PSR-14 Event Listeners to Middlewares as the request setArgument not possible anymore with TYPO3 version 12.

Upgrade to Version 6.1.0 

If you make use of ModifyQueryToFindCompanyByLetterEvent or ModifyQueryToSearchForCompaniesEvent event: We have changed the strict type of TYPO3 QueryBuilder to extbase QueryResult. Yes, this is a breaking change, but it seems that no one makes use of it. Please adopt your code to use QueryResult. You can retrieve the extbase query with method getQuery().

Upgrade to Version 6.0.0 

As TYPO3 has deprecated the ObjectManager we have changed many properties in our scheduler task Update yellowpages. Please remove that scheduler task completely and create a new one of type Inform users to update their company record.

We have changed a lot of classes. Please click Flush Cache button in Installtool to re-build the Dependency Injection cache.

If you have maps2 version 9 installed you have to override or change following part in Properties.html from:

<f:link.action title="Map detail"
                         action="show"
                         controller="PoiCollection"
                         extensionName="maps2"
                         pluginName="maps2"
                         pageUid="{settings.pidOfMaps2Plugin}"
                         arguments="{poiCollectionUid: company.txMaps2Uid}">
Copied!

to:

<f:link.action title="Map detail"
                         action="show"
                         controller="PoiCollection"
                         extensionName="maps2"
                         pluginName="maps2"
                         pageUid="{settings.pidOfMaps2Plugin}"
                         arguments="{poiCollection: company.txMaps2Uid}">
Copied!

Upgrade to Version 5.0.0 

We have moved a lot of code of yellowpages2 controllers to EventListeners. Please flush cache in maintenance module.

As a developer you should check, if you have overwritten some methods of MapController or CompanyController and adopt them to new structure.

Upgrade to Version 4.0.0 

We have removed column wsp_member as this column was a specific column for one of our customers. If you have used it you have to add it back with help of EXT:extender.

We have removed column icon from table sys_category. That way we also have remove fallbackIconPath, too. If you have used it you have to add it back with help of EXT:extender.

We are using the API of glossary2 now. Please check, if your own queries are still working.

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

ChangeLog 

Version 8.1.0 

  • [TASK] Remove POI creation logic from MapController
  • [TASK] Delegate POI creation to LocationService in CompanyController
  • [TASK] Refactor: Extract POI creation to LocationService
  • [TASK] Centralize extension key usage via ExtConf::EXT_KEY
  • [TASK] Add localized labels for invalid address errors
  • [TASK] Refactor ExtConf to modern immutable DI with factory method
  • [TASK] Refactor MailHelper to use MailerInterface and fresh MailMessage
  • [BUGFIX] Add maps2 partials to Yellowpages2 view paths
  • [BUGFIX] Check for Company UID before path segment update
  • [BUGFIX] Ensure company is hidden if POI mapping fails in newAction

Version 8.0.4 

  • [TASK] Updated wizard title with [extension] name format

Version 8.0.3 

  • [BUGFIX] Remove deprecated usage of SoftRef parser: images

Version 8.0.2 

  • [BUGFIX] Fixed Property Mapper with CheckFal validation issues

Version 8.0.1 

  • [BUGFIX] TCA migration fixes

Version 8.0.0 

  • Compatibility fixes for TYPO3 CMS 13.
  • TASK: Migrate all scheduler tasks to TYPO3 CLI Symfony Commands.
  • TASK: Migrate all list type general plugins to TYPO3 CType.
  • TASK: Created migration script for list_type to new CType.
  • Deprecated methods replaced.
  • Removed support for TYPO3 12 LTS

Version 7.0.2 

  • Removed Dialogue.js (jquery ui dependent) and it's inclusion from TypoScript
  • TASK: Remove DeleteUploadedFilesEventListener as invalid images already will not be assigned to company in TypeConverter.

Version 7.0.1 

  • BUGFIX: Category parent property lazy loading with LazyLoadingProxy type

Version 7.0.0 

  • Compatibility fixes for TYPO3 12 LTS
  • New Middleware implementations related to company create form
  • New Test cases for testing Middleware
  • Removed hard dependency with extension maps2
  • Testing Framework migrated to TYPO3 Testing Framework
  • Deprecated methods replaced
  • Removed support for TYPO3 11 LTS
  • BUGFIX: Fix Issue with Search Filter not repects district filter

Version 6.1.4 

  • BUGFIX: Fix for taking care of district FlexForm configuration

Version 6.1.3 

  • TASK: Add .crowdin.yml to .gitattributes

Version 6.1.2 

  • BUGFIX: Add tablemapping for FeUser object

Version 6.1.1 

  • Order list of categories by their title in search partial
  • Repair fetchRelated method to also fetch company records by trades
  • Prevent cartesian product in fetchRelated method of CategoryRepository

Version 6.1.0 

  • Migrate repo back to Extbase Query
  • Simplify implementation of own Pagination with TypoScript

Version 6.0.0 

  • Add TYPO3 11 compatibility
  • Replace controller constructors with inject methods
  • Add and update tests for TYPO3 11
  • Update structure of documentation
  • Migrate makeCategorizeable to TCA directly
  • Add defaults in TCA and ext_tables.sql

Version 5.1.1 

  • Add TS settings for GlossaryService

Version 5.1.0 

  • Use inject methods in controllers
  • Update dependency for glossary2 to 5.0.0

Version 5.0.2 

  • User should not get admin mail to activate entry on its own.

Version 5.0.1 

  • Move redirects to MapController back to CompanyController

Version 5.0.0 

  • Remove TYPO3 9 compatibility
  • Add TYPO3 10 compatibility
  • Replace f:widget.paginate with our own paginator
  • Restructure controllers. Move recurring code into EventListeners
  • Move SlugHelper from constructor argument into getSlugHelper()

Version 4.0.26 

  • Remove empty trades from request before ProperyMapping

Version 4.0.23 

  • Add activate action to non-cachable actions

Version 4.0.22 

  • Use a counter in URL for duplicate companies in Slug UpdateWizard

Version 4.0.21 

  • Update translation

Version 4.0.20 

  • Remove title from SVG icons

Version 4.0.19 

  • Use errorAction to redirect to previous action on Geocoding error

Version 4.0.18 

  • Repair new action, if POI could not be created
  • Add Error FlashMessage, why POI could not be created

Version 4.0.17 

  • Use correct logo/image TypeConverter of yellowpages2

Version 4.0.16 

  • Remove GROUP BY from query, as it is not compatible with pageBrowser

Version 4.0.15 

  • Replace Google+ column with Instagram

Version 4.0.14 

  • Remove injection of ExtConf of maps2 in MapController

Version 4.0.13 

  • Add getter to get first main trade

Version 4.0.12 

  • Better structure of getGlossar()
  • Use SchemaManager to build column names in Repo
  • Add String validator to listAction()

Version 4.0.11 

  • Wrap Fluid Templates with html namespace
  • Return one logo when using getLogo
  • Differ between image sizes for list and show view

Version 4.0.10 

  • Add Services.yaml for TYPO3 10 compatibility

Version 4.0.9 

  • Remove useless @param from getMaps2Uid

Version 4.0.8 

  • Allow max one Image for Logo

Version 4.0.7 

  • Set slug field separator to -

Version 4.0.6 

  • Add uid to generated slugs in UpgradeWizard

Version 4.0.5 

  • Add path_segment for human readable URLs to company records
  • Add Slug UpgradeWizard

Version 4.0.4 

  • Add settings to CompanyRepository SignalSlots

Version 4.0.3 

  • Set default sorting to company for QueryBuilder based statements

Version 4.0.2 

  • Change return value of mainTrade to nullable Category
  • Change return value of trades to array

Version 4.0.1 

  • Allow null for Distinct in Company model

Version 4.0.0 

  • Add TYPO3 10 compatibility
  • Remove TYPO3 8 compatibility
  • Update all PHP DocHeaders
  • Add strict types where possible
  • Add documentation
  • Remove sys_category icon implementation.
  • Move ExtIcon to Resources/Public/Icons
  • Update UnitTests
  • Remove maps2 as requirement.

Version 3.0.0 

  • Add TYPO3 9 compatibility
  • Remove @return void lines
  • Set description as required
  • Update to new GeoCode Service of maps2

Version 2.2.3 

  • Move all TCA modifying methods to TCA/Overrides

Version 2.2.2 

  • Remove idea directory
  • Remove default pageTSconfig for maps2

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

https://docs.typo3.org/m/typo3/docs-how-to-document/main/en-us/GeneralConventions/FileStructure.html#includes-rst-txt

Contribute 

Contribution to yellowpages2 is very welcome.

If you wish to contribute, please follow these conventions:

Writing Issues 

  • If you find a problem in the extension, please write an issue.
  • If you can fix the problem yourself, please submit a pull request. In this case, it is not necessary to create an issue first.

Submitting a Pull Request 

Please see the general GitHub documentation for more information, for example Creating a pull request