omines / datatables-bundle

DataTables bundle for Symfony
https://omines.github.io/datatables-bundle/
MIT License
251 stars 113 forks source link

How to get parameter from GET on ORMAdapter #282

Closed aniskasmi closed 1 year ago

aniskasmi commented 1 year ago

Hi,

I want sytem with GET parameter pass on link $is_delete=true if user click on like to display projects deleted only, when user have click my page reload with new parameter $is_delete=true

When i have this parameter i want to edit my ORMAdapter but he don't work, because i think the datatable is load on another HTTP Request without my previous GET parameter from original page ?

->createAdapter(ORMAdapter::class, [
      'entity' => Project::class,
      'query' => function (QueryBuilder $builder, DataTableState $state) use ($request) {
          if($request->get('is_delete') === 'true') {
              $builder
                  ->select('p')
                  ->from(Project::class, 'p')
                  ->where('p.isActive = false')
                  ->andWhere('YEAR(p.addedAt) = :year')
                  ->setParameter('year', date('Y'));
          } else {
              $builder
                  ->select('p')
                  ->from(Project::class, 'p')
                  ->where('p.isActive = true')
                  ->andWhere('YEAR(p.addedAt) = :year')
                  ->setParameter('year', date('Y'));
          }
          dump($test);
          dump($state->getGlobalSearch());
      }
  ])

If you can help me thx a lot

curry684 commented 1 year ago

This is outside the scope of the bundle as it requires clientside extension of DataTables through the preXhr event: https://datatables.net/reference/event/preXhr

You can achieve this result with something like this:

document.addEventListener('DOMContentLoaded', (event) => {
    $('#mytable').initDataTables({{ datatable_settings(datatable) }}).then(dt => {
        dt.on('preXhr.dt', (e, settings, data) => {
            $.extend(data, {foo: 'bar'});
        });
    }
});
aniskasmi commented 1 year ago

@curry684 Thx but i do this

var datatable = $('#data-table-sse')
            .on('preXhr.dt', (e, settings, data) => {
                $.extend(data, {request: 'testX'});
            })
            .initDataTables({{ datatable_settings(datatable) }}, {
            responsive: true,
            fixedColumns: true,
            dom: 'Bfrtip',
            buttons: [
                {
                    text: 'Exporter en Excel',
                    action: $.fn.initDataTables.exportBtnAction('excel', {{ datatable_settings(datatable) }})
                }
            ]
        });

But on my $request on my Symfony Controller i din't get my custom request

curry684 commented 1 year ago

Use the browser debugger (network tab) to inspect what's actually happening. This is all on the DataTables end and is not a part of this bundle's functionality.

aniskasmi commented 1 year ago

I debug, and is work with search request but on first init, the request is not extend

aniskasmi commented 1 year ago

@curry684

$('#data-table-sse').initDataTables({{ datatable_settings(datatable) }}, {
            responsive: true,
            fixedColumns: true,
            dom: 'Bfrtip',
            buttons: [
                {
                    text: 'Exporter en Excel',
                    action: $.fn.initDataTables.exportBtnAction('excel', {{ datatable_settings(datatable) }})
                }
            ]
        }).then(function(dt) {
            // dt contains the initialized instance of DataTables
            dt.on('preXhr.dt', (e, settings, data) => {
                $.extend(data, {'testX': true});
            })
        });

This code work, but only on search request, when is the initialisation of page the preXhr don't extend the request data

And same with this

$('#data-table-sse').on('preXhr.dt', (e, settings, data) => {
                $.extend(data, {'testX': true});
        }).initDataTables({{ datatable_settings(datatable) }}, {
            responsive: true,
            fixedColumns: true,
            dom: 'Bfrtip',
            buttons: [
                {
                    text: 'Exporter en Excel',
                    action: $.fn.initDataTables.exportBtnAction('excel', {{ datatable_settings(datatable) }})
                }
            ]
        });