ExportButton.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Dcat\Admin\Grid\Tools;
  3. use Dcat\Admin\Admin;
  4. use Dcat\Admin\Grid;
  5. class ExportButton extends AbstractTool
  6. {
  7. /**
  8. * @var Grid
  9. */
  10. protected $grid;
  11. /**
  12. * Create a new Export button instance.
  13. *
  14. * @param Grid $grid
  15. */
  16. public function __construct(Grid $grid)
  17. {
  18. $this->grid = $grid;
  19. }
  20. /**
  21. * Set up script for export button.
  22. */
  23. protected function setUpScripts()
  24. {
  25. $script = <<<JS
  26. $('.{$this->grid->getExportSelectedName()}').click(function (e) {
  27. e.preventDefault();
  28. var rows = {$this->grid->getSelectedRowsName()}().join(',');
  29. if (!rows) {
  30. return false;
  31. }
  32. var href = $(this).attr('href').replace('__rows__', rows);
  33. location.href = href;
  34. });
  35. JS;
  36. Admin::script($script);
  37. }
  38. /**
  39. * @return string|void
  40. */
  41. protected function renderExportAll()
  42. {
  43. if (! $this->grid->getExporter()->option('show_export_all')) {
  44. return;
  45. }
  46. $all = trans('admin.all');
  47. return "<li><a href=\"{$this->grid->getExportUrl('all')}\" target=\"_blank\">{$all}</a></li>";
  48. }
  49. /**
  50. * @return string
  51. */
  52. protected function renderExportCurrentPage()
  53. {
  54. if (! $this->grid->getExporter()->option('show_export_current_page')) {
  55. return;
  56. }
  57. $page = $this->grid->model()->getCurrentPage() ?: 1;
  58. $currentPage = trans('admin.current_page');
  59. return "<li><a href=\"{$this->grid->getExportUrl('page', $page)}\" target=\"_blank\">{$currentPage}</a></li>";
  60. }
  61. /**
  62. * @return string|void
  63. */
  64. protected function renderExportSelectedRows()
  65. {
  66. if (
  67. ! $this->grid->option('show_row_selector')
  68. || ! $this->grid->getExporter()->option('show_export_selected_rows')
  69. ) {
  70. return;
  71. }
  72. $selectedRows = trans('admin.selected_rows');
  73. return "<li><a href=\"{$this->grid->getExportUrl('selected', '__rows__')}\" target=\"_blank\" class='{$this->grid->getExportSelectedName()}'>{$selectedRows}</a></li>";
  74. }
  75. /**
  76. * Render Export button.
  77. *
  78. * @return string
  79. */
  80. public function render()
  81. {
  82. $this->setUpScripts();
  83. $export = trans('admin.export');
  84. return <<<EOT
  85. <div class="btn-group " style="margin-right:3px">
  86. <button type="button" class="btn btn-sm btn-custom dropdown-toggle" data-toggle="dropdown">
  87. <span class="hidden-xs">{$export}&nbsp;&nbsp;</span>
  88. <span class="caret"></span>
  89. <span class="sr-only"></span>
  90. </button>
  91. <ul class="dropdown-menu" role="menu">
  92. {$this->renderExportAll()}
  93. {$this->renderExportCurrentPage()}
  94. {$this->renderExportSelectedRows()}
  95. </ul>
  96. </div>
  97. EOT;
  98. }
  99. }