ExportButton.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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->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->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 (! $this->grid->option('show_row_selector') || ! $this->grid->option('show_export_selected_rows')) {
  67. return;
  68. }
  69. $selectedRows = trans('admin.selected_rows');
  70. return "<li><a href=\"{$this->grid->getExportUrl('selected', '__rows__')}\" target=\"_blank\" class='{$this->grid->getExportSelectedName()}'>{$selectedRows}</a></li>";
  71. }
  72. /**
  73. * Render Export button.
  74. *
  75. * @return string
  76. */
  77. public function render()
  78. {
  79. $this->setUpScripts();
  80. $export = trans('admin.export');
  81. return <<<EOT
  82. <div class="btn-group " style="margin-right:3px">
  83. <button type="button" class="btn btn-sm btn-custom dropdown-toggle" data-toggle="dropdown">
  84. <span class="hidden-xs">{$export}&nbsp;&nbsp;</span>
  85. <span class="caret"></span>
  86. <span class="sr-only"></span>
  87. </button>
  88. <ul class="dropdown-menu" role="menu">
  89. {$this->renderExportAll()}
  90. {$this->renderExportCurrentPage()}
  91. {$this->renderExportSelectedRows()}
  92. </ul>
  93. </div>
  94. EOT;
  95. }
  96. }