Skip to main content

2. Comprehensive Documentation & Example Files

English Documentation

Guide to Creating Stable XLSX Templates for xlsx:generate

This guide explains the full syntax for the xlsx:generate command. A critical rule for stability is that all structural tags (if:, foreach, end..., ul_, ol_) must be placed in Column A.

1. Setup

Requires: composer require phpoffice/phpspreadsheet, mpdf/mpdf, symfony/expression-language.

2. Template Tag Reference

2.1. Conditional Blocks (Row-based, Column A)
  • Syntax:
  • Start Cell (Column A): ${if:expression}. The shorthand if_ is no longer supported.
  • End Cell (Column A): ${endif}.
  • Example: To check if the total is over 500, the syntax must be ${if:order.total > 500}.
2.2. List Generation (Row-based, Column A)
  • Syntax: Place ${ul_fieldname} or ${ol_fieldname} in Column A. On the same row, place a single ${item} placeholder in the column where you want the list text to appear.
2.3. Generic Foreach Blocks (Row-based, Column A)
  • Syntax:
  • Start Cell (Column A): ${foreach_arrayname as item}.
  • End Cell (Column A): ${endforeach}.

3. Note on Expressions and Data

The ExpressionLanguage library works best when accessing nested data. Your JSON should be structured with objects. The expression order.total correctly accesses the total key within the order object in your JSON data.

4. Example Files (Corrected for Your Template)

A. XLSX Template (final_report_template.xlsx)

Please create an XLSX file that matches your screenshot, but with these critical corrections:
  1. Move all structural tags to Column A.
  2. Use the correct ${if:expression} syntax.

B. JSON Data (data.json)

The JSON data remains the same and is correct.

1. Dokumentasi Lengkap (Bahasa Indonesia)

Panduan Membuat Templat XLSX yang Stabil untuk xlsx:generate

Panduan ini menjelaskan sintaks lengkap untuk perintah xlsx:generate. Sebuah aturan penting untuk stabilitas adalah semua tag struktural (if:, foreach, end..., ul_, ol_) harus ditempatkan di Kolom A.

1. Pengaturan

Membutuhkan:
  • composer require phpoffice/phpspreadsheet
  • composer require mpdf/mpdf (untuk mode PDF)
  • composer require symfony/expression-language

2. Referensi Tag Templat

2.1. Variabel Sederhana & Bersarang (Nested)
  • Sintaks: ${variabel} atau ${objek.key}.
  • Penggunaan: Dapat ditempatkan di sel mana pun selain Kolom A untuk menghindari kesalahan pembacaan sebagai tag struktural.
2.2. Placeholder Gambar
  • Sintaks: ${img_namavariabel} atau ${img_objek.key}.
  • Perilaku Mode:
  • merge/pdf: Gambar akan disematkan (embed).
  • html: Placeholder akan diganti dengan URL gambar dalam bentuk teks biasa.
2.3. Blok Kondisional (Berbasis Baris, di Kolom A) Menyembunyikan atau menampilkan satu blok baris.
  • Sintaks:
  • Sel Awal (Kolom A): ${if:ekspresi}. Shorthand if_ tidak lagi didukung.
  • Sel Akhir (Kolom A): ${endif}.
  • Contoh: Untuk memeriksa apakah total lebih dari 500, sintaksnya harus ${if:order.total > 500}.
2.4. Pembuatan Daftar (Berbasis Baris, di Kolom A) Menghasilkan beberapa baris dari sebuah array sederhana.
  • Sintaks: Tempatkan ${ul_namavariabel} atau ${ol_namavariabel} di Kolom A. Pada baris yang sama, tempatkan satu placeholder ${item} di kolom tempat Anda ingin teks daftar ditampilkan.
  • Penggunaan: Perintah akan menggunakan baris tersebut sebagai templat, menyisipkan baris baru di bawahnya dan mengganti ${item} dengan nilai dari array Anda.
2.5. Blok Foreach Generik (Berbasis Baris, di Kolom A) Mengulang satu blok baris untuk setiap item dalam sebuah array.
  • Sintaks:
  • Sel Awal (Kolom A): ${foreach_namaarray as item}.
  • Sel Akhir (Kolom A): ${endforeach}.
  • Penggunaan: Baris-baris di antara penanda akan diduplikasi. Ini berfungsi untuk beberapa perulangan foreach yang terpisah di lembar kerja yang sama.

3. Catatan tentang Ekspresi dan Data

Library ExpressionLanguage bekerja paling baik saat mengakses data bersarang (nested). JSON Anda harus terstruktur dengan objek. Ekspresi order.total dengan benar mengakses kunci total di dalam objek order pada data JSON Anda.

2. Contoh File untuk Pengujian

A. Templat XLSX (final_report_template.xlsx)

Silakan buat file XLSX yang cocok dengan tangkapan layar Anda, tetapi dengan koreksi penting berikut:
  1. Pindahkan semua tag struktural ke Kolom A.
  2. Gunakan sintaks ${if:ekspresi} yang benar.

B. Data JSON (data.json)

Data JSON berikut ini sudah benar dan dapat digunakan.

XlsxGenerateCommand.php Code

This version is stable, follows the strict “Column A” rule, and correctly handles expressions.