Filter Integration

Pengenalan

NexaDom menyediakan sistem filter yang powerful dengan sintaks {variable|filter:args} untuk memformat dan memanipulasi data secara otomatis di dalam template. Filter dapat digunakan secara standalone atau dirangkai (chaining) untuk transformasi data yang lebih kompleks.

Basic Filters

1. String Filters



{title|upper}

{username|lower}
{name|capitalize}

{sentence|ucfirst}

{content|trim}
{text|ltrim} {text|rtrim}
{description|substr:0:100}
{text|truncate:50:'...'}

2. Number Filters



Price: {price|number_format:2}
Amount: {amount|currency:'USD'}
Discount: {price|multiply:0.8}
Total: {subtotal|add:tax}
{value|round}
{number|ceil} {number|floor}

3. Date and Time Filters



{created_at|date:'Y-m-d'}
{updated_at|datetime:'d M Y H:i'}
{post.created_at|timeago}
{event.start_date|relative_time}
{birthday|date_format:'full'}
{deadline|countdown}

Advanced Filters

1. Array Filters



{tags|join:', '}
    {items|sort|reverse}
  • {item}
  • {/items}
{users|filter:'active'|count}
{numbers|sum}
{list|unique|sort}

2. HTML and URL Filters



{content|escape}
{html|strip_tags}
Link {title|escape}
...

Filter Chaining

1. Basic Chaining



{title|lower|trim|capitalize}
{price|multiply:0.9|currency:'USD'}
{content|strip_tags|truncate:100:'...'|escape}
{date|date:'Y-m-d'|upper}

2. Advanced Chaining



{users|filter:'active'|sort:'name'|map:'email'|join:', '}


{description|strip_tags|truncate:200:'...'|escape|nl2br}


{price|multiply:quantity|add:tax|currency:'USD'|upper}
    

Custom Filters

1. Creating Custom Filters


// In your filter class
class CustomFilters {
    public function phone($number) {
        return preg_replace('/(\d{3})(\d{3})(\d{4})/', '($1) $2-$3', $number);
    }

    public function highlight($text, $search) {
        return str_replace($search, ''.$search.'', $text);
    }
}

// Register filters
$this->registerFilters(new CustomFilters());
    

2. Using Custom Filters



Phone: {contact.phone|phone}

{content|highlight:search_term}

{text|replace:'old':'new'}
{number|format_bytes:'MB'}

Conditional Filters

1. Default Values



{user.name|default:'Guest'}
Profile {user.settings.theme|default:site.default_theme|default:'light'}

2. Conditional Application



{price|when:is_sale:'multiply:0.8'|currency}
{text|unless:is_html:'escape'}

Best Practices

  • Gunakan filter yang sesuai dengan tipe data
  • Hindari filter chain yang terlalu panjang
  • Manfaatkan custom filters untuk logika yang sering digunakan
  • Selalu escape output yang berasal dari user input
  • Gunakan default values untuk mencegah error

Common Use Cases

1. Form Display


{error_message|default:''}

2. Data Display


{product.name|escape}

{product.description|truncate:200}

{product.price|currency:'IDR'}
{product.tags|join:', '}
Note: Filter dapat dikombinasikan dengan conditional statements dan loops untuk membuat template yang lebih dinamis.

Troubleshooting

  • Periksa urutan filter chain - urutan dapat mempengaruhi hasil
  • Pastikan tipe data sesuai dengan filter yang digunakan
  • Gunakan proper escaping untuk mencegah XSS
  • Monitor performance impact dari filter chain yang kompleks

Security Considerations

  • Selalu escape user input sebelum ditampilkan
  • Hindari penggunaan raw filter pada user input
  • Validasi parameter filter untuk mencegah injection
  • Gunakan HTML purifier untuk content yang kompleks