Le strict nécessaire pour ajouter une mass-action sur la grille produit.
Les mots rigolos (machin, glouglou, torref, avionAréAction et massage-de-pieds) indiquent les alias qui peuvent être changés.
Resources/oro/config/actions.yml
operations:
glouglou:
label: mass.age.de.pieds
datagrids:
- frontend-product-search-grid
datagrid_options:
mass_action:
type: addproducts
frontend_type: torref # c'est le nom de votre JS sans "-action.js"
Resources/public/js/datagrid/action/backend-action-header-cell.js
- piquez
backend-action-header-cell.js
dans les vendor - ligne 102, ajouter votre action :
newMassActions['glougloumass_action'] = $.extend(true, {}, avionAréAction, {
name: 'glougloumass_action'
});
- ligne 30 : définissez votre action :
var avionAréAction = {
icon: 'copy', # une icone FontAwesome sans "fa-"
frontend_handle: 'ajax',
label: __('mass.age.de.pieds'),
type: 'addproducts',
frontend_type: 'torref', # le nom de votre JS sans "-action.js"
route: 'mass_age_de_pieds', # la route
handler: 'app.machin.mass_action.handler', # là ou vous mettrez vos traitements
};
- Ajoutez
var __ = require('orotranslation/js/translator');
vers les requires lignes 4 ou 5.
Resources/public/js/datagrid/action/torref-action.js
- piquez
add-products-mass-action.js
dans les vendor
Resources/views/layouts/blank/config/require.js
config:
paths:
'oro/datagrid/action/torref-action': 'bundles/app/js/datagrid/action/torref-action.js'
'app/js/datagrid/action/backend-action-header-cell': 'bundles/app/js/datagrid/action/backend-action-header-cell.js'
map:
'*':
'oroproduct/js/app/datagrid/header-cell/backend-action-header-cell': 'app/js/datagrid/action/backend-action-header-cell'
Controller/MachinController.php
/**
* @Route("/mass-age-de-pieds/", name="mass_age_de_pieds")
*/
public function massAgeDePieds(Request $request)
{
$gridName = $request->get('gridName');
$actionName = $request->get('actionName');
/** @var MassActionDispatcher $massActionDispatcher */
$massActionDispatcher = $this->get('oro_datagrid.mass_action.dispatcher');
$response = $massActionDispatcher->dispatchByRequest($gridName, $actionName, $request);
$data = [ 'successful' => $response->isSuccessful(), 'message' => $response->getMessage() ];
return new JsonResponse(array_merge($data, $response->getOptions()));
}
Dans routing.yml
, le controller doit avoir options.expose: true
.
MassAction/MachinMassActionHandler.php
Là ou vous mettez vos traitements. C'est $ids
qui vous intéresse.
class MachinMassActionHandler implements MassActionHandlerInterface
{
public function handle(MassActionHandlerArgs $args) {
$argsParser = new AddProductsMassActionArgsParser($args);
$ids = $argsParser->getProductIds();
return new MassActionResponse(true, 'message');
}
}