Paragrafları Tekrarla - Foreach Döngüsü Kılavuzu
Belgeler sıklıkla, öğe listeleri, birden fazla kayıt veya benzer biçimlendirmeye sahip tekrarlanan bölümler gibi tekrarlayan içerik yapıları içerir. PDF4meŞablon motoru, veri koleksiyonlarından dinamik olarak birden fazla paragraf ve bölüm oluşturmak için güçlü yineleme yetenekleri sunar.
Foreach Döngülerini Anlamak
O foreach Döngü, veri koleksiyonları arasında yineleme yapmak ve tekrarlanan içerik üretmek için kullanılan temel mekanizmadır. Her yineleme, koleksiyondaki bir öğeyi işler ve karşılık gelen çıktıyı üretir.
Temel Foreach Sözdizimi
<<foreach [item in collection]>>
Content with <<[item.property]>>
<</foreach>>
Bileşenler:
item- Yinelemedeki mevcut öğeyi temsil eden değişkencollection- Üzerinde yineleme yapılacak veri dizisi veya koleksiyonu- İçerik bloğu - Her öğe için tekrarlanan şablon içeriği.
Tekrarlanan Paragraflar
Veri kümesi üzerinde yineleme yaparak ve her öğe için biçimlendirilmiş metin oluşturarak birden fazla paragraf oluşturun.
Örnek: Uygulama Değerlendirmeleri
Şablon Sözdizimi:
<<foreach [app in applications]>><<[app.listAppName]>> in <<[app.listAppType]>> platform is a <<[app.category]>> app and has a <<[app.AppRating]>> rating.
<</foreach>>
Veri Kaynağı (JSON):
{
"surveyName": "Top-rated Apps",
"applications": [
{
"listAppName": "Instagram",
"listAppType": "iOS",
"category": "Social Media",
"AppRating": "4.9"
},
{
"listAppName": "Whatsapp",
"listAppType": "iOS",
"category": "Chat",
"AppRating": "4.8"
},
{
"listAppName": "Player UG",
"listAppType": "Android",
"category": "Gaming",
"AppRating": "4.75"
}
]
}
Oluşturulan Çıktı:
Instagram in iOS platform is a Social Media app and has a 4.9 rating.
Whatsapp in iOS platform is a Chat app and has a 4.8 rating.
Player UG in Android platform is a Gaming app and has a 4.75 rating.
Boş Koleksiyonların Yönetimi
Bir koleksiyonun boş olma ihtimali olduğunda, şunu kullanın: Any() Yinelemeden önce veri kontrolü yapmak için kullanılan yöntem. Bu, null istisnalarını önler ve alternatif içerik görüntülemenizi sağlar.
Temel Null Kontrolü
Any() kontrolü içeren şablon:
<<if [applications.Any()]>>
<<foreach [app in applications]>><<[app.listAppName]>> in <<[app.listAppType]>> platform is a <<[app.category]>> app and has a <<[app.AppRating]>> rating.
<</foreach>>
<<else>>No applications listed
<</if>>
Bu yaklaşım:
- Koleksiyonun herhangi bir öğe içerip içermediğini kontrol eder.
- Mevcutsa öğeler arasında yineleme yapar.
- Koleksiyon boşsa yedek mesajı görüntüler.
İç İçe Foreach Döngüleri
İç içe foreach döngüleri kullanarak hiyerarşik yapılar oluşturun. Bu, üst-alt ilişkilerini veya çok seviyeli veri yapılarını göstermek için kullanışlıdır.
Örnek: Departman ve Çalışanlar
Şablon:
<<foreach [dept in departments]>>
Department: <<[dept.name]>>
<<foreach [emp in dept.employees]>>
- <<[emp.name]>> (<<[emp.position]>>)
<</foreach>>
<</foreach>>
Veri:
{
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "John Smith", "position": "Senior Developer" },
{ "name": "Jane Doe", "position": "Tech Lead" }
]
},
{
"name": "Marketing",
"employees": [
{ "name": "Mike Johnson", "position": "Marketing Manager" }
]
}
]
}
Tekrarlayan Karmaşık Bölümler
Foreach döngüleri, birden fazla paragraf, biçimlendirme ve iç içe yapılar da dahil olmak üzere içeriğin tamamını tekrarlayabilir.
Çok Paragraflı Tekrarlama
Şablon:
<<foreach [product in products]>>
Product Name: <<[product.name]>>
Description: <<[product.description]>>
Price: $<<[product.price]>>
Available: <<[product.inStock]>>
<</foreach>>
Bu şablon, tüm biçimlendirmeyi ve paragraf aralarını koruyarak her ürün için eksiksiz bir ürün açıklaması bloğu oluşturur.
Koşullu Yineleme
Seçici içerik oluşturmak için foreach döngülerini koşullu ifadelerle birleştirin.
Örnek: Koşullu Görüntüleme
Şablon:
<<foreach [employee in employees]>>
<<if [employee.age > 50]>>
Senior Employee: <<[employee.name]>> - Age: <<[employee.age]>>
<</if>>
<</foreach>>
Alternatif olarak, numaralandırma yöntemlerini kullanın:
Şablon:
<<foreach [employee in employees.Where(e => e.age > 50)]>>
Senior Employee: <<[employee.name]>> - Age: <<[employee.age]>>
<</foreach>>
Döngüler İçinde Biçimlendirme
Tutarlı çıktı stili için foreach döngüleri içindeki alanlara biçimlendirme uygulayın.
Şablon:
<<foreach [customer in customers]>>
Customer: <<[customer.name]:caps>>
Last Visit: <<[customer.lastVisit]:"MMMM dd, yyyy">>
Status: <<[customer.status]:upper>>
<</foreach>>
Döngü Değişkenleri ve İndeksleme
(Şablon motorunuzun sürümü destekliyorsa) örtük değişkenler kullanarak döngü konum bilgilerine erişin.
Sık Kullanılan Döngü Değişkenleri
- Geçerli öğe indeksi (uygulamaya bağlı olarak 0 tabanlı veya 1 tabanlı)
- Döngü yineleme sayısı
- İlk/son ürün göstergeleri
Örnek Kullanım (destekleniyorsa):
<<foreach [item in items]>>
<<[$index + 1]>>. <<[item.name]>>
<</foreach>>
Performans Hususları
Döngüler için En İyi Uygulamalar
- Koleksiyon boyutunu sınırlayın - Şablon işleme başlamadan önce büyük koleksiyonları filtreleyin.
- Derin yuvalamadan kaçının - Daha iyi performans için iç içe döngüleri 2-3 seviyeyle sınırlayın.
- Verileri ön işleme tabi tutun - Verileri şablonlara aktarmadan önce karmaşık hesaplamalar gerçekleştirin.
- Verimli sorgular kullanın. - Veri kaynağı düzeyinde verileri filtreleyin ve sıralayın.
Örnek: Önceden filtrelenmiş veriler
Yerine:
<<foreach [emp in employees.Where(e => e.age > 30).OrderBy(e => e.name)]>>
Uygulamanızda ön filtreleme yapın ve filtrelenmiş verileri iletin:
<<foreach [emp in filteredEmployees]>>
Ortak Desenler
Desen 1: Numaralı Liste
<<foreach [item in items]>>
<<[$index]>>. <<[item.title]>>
<</foreach>>
Desen 2: Gruplandırılmış İçerik
<<foreach [category in categories]>>
## <<[category.name]>>
<<foreach [item in category.items]>>
- <<[item.name]>>
<</foreach>>
<</foreach>>
Desen 3: Özet Bölümü
<<foreach [report in reports]>>
Report: <<[report.title]>>
Total Records: <<[report.records.Count()]>>
Average Value: <<[report.records.Average(r => r.value)]>>
<</foreach>>
Sorun giderme
Sık Karşılaşılan Sorunlar
Sorun: Boş referans hataları
Çözüm: Kullanmak Any() yinelemeden önce koleksiyonları kontrol etmek
Sorun: İstenmeyen satır sonları veya boşluklar Çözüm: Şablonunuzdaki boşlukları dikkatlice yönetin.
Sorun: Büyük veri kümeleriyle ilgili performans sorunları Çözüm: Verileri önceden filtreleyin ve toplama boyutlarını sınırlayın.
Sorun: Yanlış veri bağlama Çözüm: Özellik adlarının veri yapınızla tam olarak eşleştiğini doğrulayın.
Pratik Örnek: Fatura Kalemleri
Şablonu Tamamla:
Invoice #<<[invoiceNumber]>>
Date: <<[invoiceDate]:"dd.MM.yyyy">>
Items:
<<if [lineItems.Any()]>>
<<foreach [item in lineItems]>>
<<[item.name]:caps>> - Qty: <<[item.quantity]>> - Price: $<<[item.price]:"F2">> - Total: $<<[item.quantity * item.price]:"F2">>
<</foreach>>
Subtotal: $<<[lineItems.Sum(i => i.quantity * i.price)]:"F2">>
<<else>>
No items in this invoice.
<</if>>
:::İpucu: Karmaşık Yinelemeler Karmaşık yineleme senaryoları için, şablona geçirmeden önce uygulama mantığınızda verilerinizi ön işleme tabi tutmayı düşünün. Bu, şablonun okunabilirliğini ve performansını artırır.
:::