PHP / Laravel - Как я могу отображать заголовок таблицы на каждой странице печати? - PullRequest
0 голосов
/ 06 июня 2019

Я использую Laravel 5.6 с веб-сайтом maatwebsite (laravel-excel) 3.1 И мой PHP-версия - 7.1

Вот класс ReportExport :

<?php
namespace App\Exports;
use App\Report;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
class ReportExport implements ShouldAutoSize, FromView, WithColumnFormatting, WithEvents
{
    use Exportable;
    protected $id;
    public function __construct($id)
    {
        $this->id = $id;
    }
    public function view(): View
    {
        $report = Report::find($this->id);
        return view('exports.report', [
            'report' => $report,
        ]);
    }
    public function registerEvents(): array
    {
        return [
            AfterSheet::class    => function(AfterSheet $event) {
                $event->sheet->getDelegate()->getPageSetup()->setOrientation(PageSetup::ORIENTATION_LANDSCAPE);
                ...
            },
        ];
    }
}

Мой вид экспорта лезвия Laravel, как это:

<table>
    ...
    <thead>
    <tr>
        <th colspan="2" rowspan="2">No</th>
        <th colspan="7" rowspan="2">Mata Pelajaran</th>
        <th colspan="17">Pengetahuan</th>
        <th colspan="17">Keterampilan</th>
    </tr>
    <tr>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
        <th colspan="2">KB</th>
        <th colspan="3">Angka</th>
        <th colspan="3">Predikat</th>
        <th colspan="9">Deskripsi</th>
    </tr>
    </thead>
    <tbody>
    ...
    @php ($group = 'A')
    @php ($number = 0)
    @foreach($values as $item)
    @if($number==0 || $group!=$item['group'])
    <tr>
        <td colspan="9">Kelompok {{$item['group']}}</td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
        <td colspan="2"></td>
        <td colspan="3"></td>
        <td colspan="3"></td>
        <td colspan="9"></td>
    </tr>
    @php ($number = 0)
    @endif
    <tr>
        <td colspan="2">{{++$number}}</td>
        <td colspan="7">{{$item['lesson_name']}}</td>
        <td colspan="2">{{$item['kb_pengetahuan']}}</td>
        <td colspan="3">{{$item['nilai_pengetahuan']}}</td>
        <td colspan="3">{{$item['predikat_pengetahuan']}}</td>
        <td colspan="9">{{$item['deskripsi_pengetahuan']}}</td>
        <td colspan="2">{{$item['kb_keterampilan']}}</td>
        <td colspan="3">{{$item['nilai_keterampilan']}}</td>
        <td colspan="3">{{$item['predikat_keterampilan']}}</td>
        <td colspan="9">{{$item['deskripsi_keterampilan']}}</td>
    </tr>
    @php ($group = $item['group'])
    @endforeach
    </tbody>
</table>

Сценарий работает. Но если я вижу в предварительном просмотре печати, заголовок таблицы отображается только на странице 1. Я хочу, чтобы заголовок таблицы отображался на всех страницах

Как я могу это сделать?

1 Ответ

1 голос
/ 06 июня 2019

Так как вы используете лезвие здесь .. поэтому вам нужно повторить заголовок на основе условия, чтобы отделить для каждой страницы. Сколько записей вы хотите отобразить на странице.

Лучше создать это как вложенное представление и включить заголовок, основанный на условии .. Я имею в виду после количества строк (на основе пространства, отрегулированного на странице).

Вот документация для использования подпредставлений - https://laravel.com/docs/5.8/blade#including-sub-views

Если вы используете для создания Excel из записи, вы можете использовать этот подход.

Задание повторения строк при печати - PHPExcel

Дайте мне знать, если это поможет.

...