Skip to main content
Version: 2024.1

Name Extractor for Pimcore Elements

The name extractor is used to extract a name for data objects and assets. This name will be displayed and used at the following positions in the frontend:

  • Displayed within the data pool listings.
  • Displayed for relations of elements on data object detail pages.
  • Used within the full text search to find the element.
  • Can be configured as sort option or filter in the data pool configuration document if needed.

By default, the service works as following:

  • Assets: The file name will be used as name.
  • Data Object: If the given data object class has a "name" attribute and a name is entered in the data object use it, otherwise the key of the data object will be used as fallback (works with a localized name field too).

It's possible to change this logic through events:

  • Pimcore\Bundle\PortalEngineBundle\Event\Asset\ExtractNameEvent
  • Pimcore\Bundle\PortalEngineBundle\Event\DataObject\ExtractNameEvent

Example

This example event subscriber will append the production year to the name of Car data objects.

<?php

namespace AppBundle\EventListener;

use Pimcore\Bundle\PortalEngineBundle\Event\DataObject\ExtractNameEvent;
use Pimcore\Model\DataObject\Car;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class PortalEngineExtractCarNameSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [
ExtractNameEvent::class => 'onExtractName'
];
}

public function onExtractName(ExtractNameEvent $event)
{
$car = $event->getObject();
if(!$car instanceof Car) {
return;
}

$name = $car->getName($event->getLocale()) ;

if($productionYear = $car->getProductionYear()) {
$name .= ' (' . $productionYear . ')';
}

$event->setName($name);
}
}
# add this to your container service definition
services:
AppBundle\EventListener\PortalEngineExtractCarNameSubscriber:
tags:
- { name: kernel.event_subscriber }

Update Index

If you change the logic for the name extraction process do not forget to update the index (at least for the affected elements).

# update all index mappings and put all elements in the queue (restrictable with corresponding command options and arguments)
bin/console generic-data-index:update:index -r