-
Notifications
You must be signed in to change notification settings - Fork 3
Ajout de champs non indexé au grid de la vue search d'oro
Jonathan edited this page Aug 30, 2024
·
2 revisions
Le grid de la vue search d'oro contient souvent beaucoup de produit, il est ici extrêmement déconseillé de faire appel à doctrine ou tout autre processus un peu lourd qui pourrait ralentir ou faire crash la prod à cause des performances.
Via cet événement on peut intercepter la configuration dud atagrid et ajouter de nouveaux champs autorisés avec leur type.
class AddTestFieldsToFrontendProductGridListener
{
public function onPreBuild(PreBuild $event): void
{
$config = $event->getConfig();
//Set new field we are going to generate on the website search event
$config->offsetAddToArrayByPath(
'[properties]',
[
'test_field_int' => [
'type' => 'field',
'frontend_type' => PropertyInterface::TYPE_INT,
],
'test_field_string' => [
'type' => 'field',
'frontend_type' => PropertyInterface::TYPE_STRING,
],
]
);
}
}
AppBundle\EventListener\Frontend\AddTestFieldsToFrontendProductGridListener:
tags:
- { name: kernel.event_listener, event: oro_datagrid.datagrid.build.pre.frontend-product-search-grid, method: onPreBuild }
Via cette méthode, on va pouvoir ajouter les champs autorisé précédemment aux records avec une valeur.
public function onResultAfter(SearchResultAfter $event): void
{
$records = $event->getRecords();
if (!$records) {
return;
}
foreach ($records as $record) {
$record->addData([
'test_field_int' => 1,
'test_field_string' => 'test string',
]);
}
}
AppBundle\EventListener\AddTestFieldsToFrontendProductGridListener:
tags:
- { name: kernel.event_listener, event: oro_datagrid.datagrid.build.pre.frontend-product-search-grid, method: onPreBuild }
- { name: kernel.event_listener, event: oro_datagrid.search_datasource.result.after.frontend-product-search-grid, method: onResultAfter }