Smarty

Filosofi
Desain Smarty sebagian besar didorong oleh tujuan berikut:
 * Pemisahan presentasi yang bersih dari kode aplikasi
 * Backend PHP, frontend template Smarty
 * melengkapi PHP, bukan menggantikannya
 * Pengembangan/penyebaran cepat untuk programmer dan desainer
 * Cepat dan mudah dirawat
 * sintaks mudah dimengerti, tidak perlu pengetahuan PHP
 * Fleksibilitas untuk pengembangan kustom
 * keamanan: isolasi dari PHP
 * gratis, sumber terbuka

Apa itu Smarty?
Smarty adalah mesin template untuk PHP. Lebih khusus lagi, ini memfasilitasi cara yang dapat dikelola untuk memisahkan logika aplikasi (PHP) dan konten dari presentasinya (HTML/CSS/JavaScript). Ini paling baik dijelaskan dalam situasi di mana pemrogram aplikasi dan perancang templat memainkan peran yang berbeda, atau dalam banyak kasus bukan orang yang sama.

Misalnya, Anda membuat halaman web yang menampilkan artikel surat kabar.
 * Artikel $headline, $tagline, $author dan $body adalah elemen konten, tidak ada informasi tentang bagaimana mereka akan disajikan. Mereka diteruskan ke Smarty oleh aplikasi.
 * Kemudian perancang template mengedit template dan menggunakan kombinasi tag HTML dan tag template untuk memformat presentasi variabel ini dengan elemen seperti tabel, div, warna latar belakang, ukuran font, style sheets, svg dll.
 * Suatu hari programmer perlu mengubah cara konten artikel diambil, yaitu perubahan logika aplikasi. Perubahan ini tidak mempengaruhi desainer template, konten akan tetap sampai di template dengan cara yang sama.
 * Demikian pula, jika desainer template ingin mendesain ulang template sepenuhnya, ini tidak memerlukan perubahan pada logika aplikasi.
 * Oleh karena itu, programmer dapat membuat perubahan pada logika aplikasi tanpa perlu merestrukturisasi template, dan desainer template dapat membuat perubahan pada template tanpa merusak logika aplikasi.

Salah satu tujuan desain Smarty adalah pemisahan logika bisnis dan logika presentasi.
 * Artinya, template pasti dapat berisi logika dengan syarat hanya untuk presentasi. Hal-hal seperti memasukkan template lain, warna baris tabel bergantian, huruf kapital variabel, mengulang array data dan menampilkannya adalah contoh logika presentasi.
 * Namun ini tidak berarti bahwa Smarty memaksa pemisahan logika bisnis dan presentasi. Smarty tidak memiliki pengetahuan yang mana, jadi menempatkan logika bisnis di template adalah tindakan Anda sendiri.
 * Selain itu, jika Anda tidak menginginkan logika dalam template Anda, Anda pasti dapat melakukannya dengan mengubah konten menjadi teks dan variabel saja.

Beberapa fitur Smarty:
 * Sangat cepat.
 * Efisien karena PHP parser melakukan pekerjaan kotor.
 * Tidak ada overhead penguraian template, hanya mengompilasi sekali.
 * Mengkompilasi ulang hanya file template yang telah diubah.
 * Anda dapat dengan mudah membuat fungsi kustom dan pengubah variabel Anda sendiri, sehingga bahasa template sangat dapat dikembangkan.
 * Kerangka yang dapat dikonfigurasi sintaks tag {delimater}, sehingga Anda dapat menggunakan {$foo},, <! - {$foo} ->, dll.
 * Konstruksi {if} .. {elseif} .. {else} .. {/if} diteruskan ke parser PHP, jadi sintaks ekspresi {if ...} bisa sesederhana atau serumit evaluasi Anda Suka.
 * Memungkinkan penumpukan bagian yang tidak terbatas, if dsb.
 * Dukungan caching bawaan
 * Sumber template sesuka kita
 * Template Inheritance untuk memudahkan pengelolaan konten template.
 * Arsitektur plugin

Dua kubu pemikiran
Dalam hal pembuatan template di PHP, pada dasarnya ada dua kubu pemikiran. Kubu pertama menyatakan bahwa "PHP adalah mesin template". Pendekatan ini hanya mencampurkan kode PHP dengan HTML. Meskipun pendekatan ini tercepat dari sudut pandang eksekusi skrip murni, banyak yang akan berpendapat bahwa sintaksis PHP berantakan dan rumit ketika dicampur dengan markup yang diberi tag seperti HTML.

Kubu kedua menyatakan bahwa presentasi harus kosong dari semua kode pemrograman, dan sebagai gantinya gunakan tag sederhana untuk menunjukkan di mana konten aplikasi diungkapkan. Pendekatan ini umum dengan mesin template lain (bahkan dalam bahasa pemrograman lain), dan juga pendekatan yang diambil Smarty. Idenya adalah untuk menjaga agar template tetap fokus pada presentasi, tanpa kode aplikasi, dan dengan overhead sesedikit mungkin.

Mengapa memisahkan PHP dari template itu penting?
Dua manfaat utama:
 * SYNTAX: Template biasanya terdiri dari markup semantik seperti HTML. Sintaks PHP berfungsi dengan baik untuk kode aplikasi, tetapi dengan cepat merosot ketika dicampur dengan HTML. Sintaks sederhana {tag} Smarty dirancang khusus untuk mengekspresikan presentasi. Smarty memfokuskan template Anda pada presentasi dan lebih sedikit pada "kode". Ini meminjamkan untuk penyebaran template yang lebih cepat dan perawatan yang lebih mudah. Sintaks Smarty tidak memerlukan pengetahuan tentang PHP, dan intuitif untuk programmer dan non-programmer.


 * INSULASI: Ketika PHP dicampur dengan template, tidak ada batasan tentang jenis logika apa yang dapat dimasukkan ke dalam template. Smarty mengisolasi template dari PHP, membuat pemisahan presentasi terkontrol dari logika bisnis. Smarty juga memiliki fitur keamanan yang selanjutnya dapat memberlakukan pembatasan pada template.

Desainer Web dan PHP
Pertanyaan umum: "Desainer web harus mempelajari sintaksis, mengapa tidak PHP?". Tentu saja desainer web dapat mempelajari PHP, dan mereka mungkin sudah terbiasa dengannya. Masalahnya bukan pada kemampuan mereka untuk belajar PHP, ini tentang konsekuensi dari mencampurkan PHP dengan HTML. Jika desainer menggunakan PHP, terlalu mudah untuk menambahkan kode ke dalam template yang bukan miliknya di sana (Anda baru saja memberi mereka pisau swiss-army ketika mereka hanya membutuhkan pisau.) Anda dapat mengajari mereka aturan desain aplikasi, tetapi ini mungkin adalah sesuatu yang tidak benar-benar perlu mereka pelajari (sekarang mereka adalah pengembang!). Manual PHP juga merupakan tumpukan informasi yang sangat banyak untuk disaring. Ini seperti memberikan manual perakitan pabrik kepada pemilik mobil ketika yang mereka butuhkan hanyalah manual pemilik. Smarty memberi desainer web alat yang mereka butuhkan, dan memberi pengembang kendali penuh atas alat tersebut. Kesederhanaan sintaks berbasis tag juga merupakan sambutan yang sangat baik bagi para desainer, ini membantu mereka merampingkan organisasi dan pengelolaan template.

Implementasi itu Penting
Meskipun Smarty memberi Anda alat untuk memisahkan presentasi dari kode aplikasi, ini juga memberi Anda banyak ruang untuk membengkokkan aturan tersebut. Implementasi yang buruk (yaitu memasukkan PHP ke dalam template) akan menyebabkan lebih banyak masalah daripada yang seharusnya diselesaikan oleh pemisahan presentasi. Dokumentasi berfungsi dengan baik dalam menunjukkan hal-hal yang harus diperhatikan. Lihat juga bagian Praktik Terbaik di situs Smarty.

Bagaimana cara kerjanya?
Smarty "mengkompilasi" (pada dasarnya menyalin dan mengubah) template menjadi skrip PHP. Ini terjadi sekali ketika setiap template dipanggil pertama kali, dan kemudian versi yang dikompilasi digunakan sejak saat itu. Smarty menangani ini untuk Anda, jadi perancang template hanya mengedit template Smarty dan tidak perlu mengelola versi yang dikompilasi. Pendekatan ini membuat template mudah dipelihara, namun tetap menjaga waktu eksekusi sangat cepat karena kode yang dikompilasi hanyalah PHP. Dan tentu saja, semua skrip PHP memanfaatkan cache op-code PHP seperti APC.

Template Inheritance
Template inheritance is new to Smarty 3, and it's one of many great new features. Before template inheritance, we managed our templates in pieces such as header and footer templates. This organization lends itself to many problems that require some hoop-jumping, such as managing content within the header/footer on a per-page basis. With template inheritance, instead of including other templates we maintain our templates as single pages. We can then manipulate blocks of content within by inheriting them. This makes templates intuitive, efficient and easy to manage. See the Template Inheritance section of th Smarty website for more info.

Mengapa tidak menggunakan sintaks XML/XSLT?
Ada beberapa alasan bagus. Pertama, Smarty dapat digunakan lebih dari sekedar template berbasis XML/HTML, seperti membuat email, javascript, CSV, dan dokumen PDF. Kedua, sintaks XML/XSLT bahkan lebih bertele-tele dan rapuh daripada kode PHP! Ini sempurna untuk komputer, tetapi mengerikan bagi manusia. Smarty berarti mudah dibaca, dipahami, dan dipelihara.

Keamanan Template
Meskipun Smarty mengisolasi Anda dari PHP, Anda masih memiliki opsi untuk menggunakannya dengan cara tertentu jika Anda mau. Keamanan template memaksa pembatasan PHP (dan pilih fungsi Smarty.) Ini berguna jika Anda memiliki template pengeditan pihak ketiga, dan Anda tidak ingin menggunakan kekuatan penuh PHP atau Smarty kepada mereka.

Integration
Terkadang Smarty dibandingkan dengan framework Model-View-Controller (MVC). Smarty bukanlah MVC, ini hanya lapisan presentasi, seperti bagian View (V) dari MVC. Faktanya, Smarty dapat dengan mudah diintegrasikan sebagai lapisan tampilan MVC. Banyak dari yang lebih populer memiliki petunjuk integrasi untuk Smarty.

Mesin Template Lainnya
Smarty bukan satu-satunya mesin yang mengikuti filosofi "Pisahkan Kode Pemrograman dari Presentasi". Misalnya, Python memiliki mesin cetakan yang dibangun dengan prinsip yang sama seperti Django Templates dan CheetahTemplate. Catatan: Bahasa seperti Python tidak bercampur dengan HTML secara asli, yang memberi mereka keuntungan dari pemisahan kode pemrograman yang tepat sejak awal. Ada library yang tersedia untuk mencampur Python dengan HTML, tetapi biasanya dihindari.

What Smarty is Not
Smarty bukanlah kerangka pengembangan aplikasi (development framework). Smarty bukanlah MVC. Smarty bukanlah alternatif untuk Zend Framework, CodeIgniter, PHPCake, atau development framework lain untuk PHP.

Smarty adalah mesin template, dan bekerja sebagai komponen (V)iew dari aplikasi Anda. Smarty dapat dengan mudah digabungkan ke salah satu mesin yang tercantum di atas sebagai komponen tampilan. Tidak berbeda dari perangkat lunak lainnya, Smarty memiliki kurva belajar. Smarty tidak menjamin desain aplikasi yang baik atau pemisahan presentasi yang tepat, hal ini tetap perlu ditangani oleh pengembang dan desainer web yang kompeten.

Apakah Smarty Tepat untuk Saya?
Smarty tidak dimaksudkan sebagai alat untuk setiap pekerjaan. Yang penting adalah mengidentifikasi apakah Smarty sesuai dengan kebutuhan Anda. Ada beberapa pertanyaan penting untuk ditanyakan pada diri Anda:


 * SYNTAX TEMPLATE.
 * Apakah Anda puas dengan tag PHP yang dicampur dengan HTML?
 * Apakah desainer web Anda nyaman dengan PHP?
 * Apakah desainer web Anda lebih memilih sintaks berbasis tag yang dirancang untuk presentasi?
 * Beberapa pengalaman bekerja dengan Smarty dan PHP membantu menjawab pertanyaan-pertanyaan ini.


 * THE BUSINESS CASE:
 * Apakah ada persyaratan untuk mengisolasi template dari PHP?
 * Apakah Anda memiliki template pengeditan pihak tidak tepercaya yang tidak ingin Anda gunakan untuk menggunakan kekuatan PHP?
 * Apakah Anda perlu mengontrol secara terprogram apa yang tersedia dan tidak tersedia di dalam template?
 * Smarty menyediakan kemampuan ini dengan desain.


 * FEATURE SET:
 * Apakah fitur Smarty seperti caching, pewarisan template dan arsitektur plugin menghemat siklus pengembangan penulisan kode yang akan diperlukan sebaliknya?
 * Apakah basis kode atau kerangka kerja yang Anda rencanakan untuk digunakan memiliki fitur yang Anda butuhkan untuk komponen presentasi?

Templating di PHP adalah topik hangat, dan pendapatnya sangat beragam. Penting bagi Anda untuk memahami Smarty, memahami kebutuhan Anda sendiri, dan membuat keputusan yang tepat untuk diri Anda sendiri.

Situs yang menggunakan Smarty
Ada puluhan ribu pengunjung unik di situs web Smarty setiap hari, kebanyakan pengembang membaca dokumentasi. Banyak proyek PHP terkenal menggunakan Smarty seperti XOOPS CMS, CMS Made Simple, Tiki CMS/Groupware dan X-Cart untuk beberapa nama.

Ringkasan
Baik Anda menggunakan Smarty untuk situs web kecil atau solusi perusahaan besar, ini dapat mengakomodasi kebutuhan Anda. Ada banyak fitur yang menjadikan Smarty pilihan yang bagus:
 * Pemisahan PHP dari HTML / CSS masuk akal
 * keterbacaan untuk organisasi dan manajemen
 * keamanan untuk akses template pihak ke-3
 * fitur kelengkapan, dan mudah disesuaikan dengan kebutuhan Anda
 * Basis pengguna yang sangat besar, Smarty akan tetap ada
 * Lisensi LGPL untuk penggunaan komersial
 * 100% gratis untuk digunakan, proyek sumber terbuka

Installation
Instalasi Smarty: composer

Basic Syntax

 * 1) Comments
 * 2) Variables
 * 3) Functions
 * 4) Attributes
 * 5) Embedding Vars in Double Quotes
 * 6) Math
 * 7) Escaping Smarty Parsing

Variables

 * 1) Variables assigned from PHP
 * 2) Associative arrays
 * 3) Array indexes
 * 4) Objects
 * 5) Variable scopes
 * 6) Variables loaded from config files
 * 7) {$smarty} reserved variable
 * 8) Request variables
 * 9) {$smarty.now}
 * 10) {$smarty.const}
 * 11) {$smarty.capture}
 * 12) {$smarty.config}
 * 13) {$smarty.section}
 * 14) {$smarty.template}
 * 15) {$smarty.template_object}
 * 16) {$smarty.current_dir}
 * 17) {$smarty.version}
 * 18) {$smarty.block.child}
 * 19) {$smarty.block.parent}
 * 20) {$smarty.ldelim}, {$smarty.rdelim}

Variable Modifiers

 * 1) capitalize
 * cat
 * 1) count_characters
 * 2) count_paragraphs
 * 3) count_sentences
 * 4) count_words
 * 5) date_format
 * 6) default
 * 7) escape
 * 8) from_charset
 * 9) indent
 * 10) lower
 * 11) nl2br
 * 12) regex_replace
 * 13) replace
 * 14) spacify
 * 15) string_format
 * 16) strip
 * 17) strip_tags
 * 18) to_charset
 * 19) truncate
 * 20) unescape
 * 21) upper
 * 22) wordwrap

Built-in Functions

 * 1) {$var=...}
 * 2) {append}
 * 3) {assign}
 * 4) {block}
 * 5) {call}
 * 6) {capture}
 * 7) {config_load}
 * 8) {debug}
 * 9) {extends}
 * 10) {for}
 * 11) {foreach},{foreachelse}
 * 12) @index
 * 13) @iteration
 * 14) @first
 * 15) @last
 * 16) @show
 * 17) @total
 * 18) {break}
 * 19) {continue}
 * 20) {function}
 * 21) {if},{elseif},{else}
 * 22) {include}
 * 23) {include_php}
 * 24) {insert}
 * 25) {ldelim},{rdelim}
 * 26) {literal}
 * 27) {nocache}
 * 28) {php}
 * 29) {section},{sectionelse}
 * 30) .index
 * 31) .index_prev
 * 32) .index_next
 * 33) .iteration
 * 34) .first
 * 35) .last
 * 36) .rownum
 * 37) .loop
 * 38) .show
 * 39) .total
 * 40) {setfilter}
 * 41) {strip}
 * 42) {while}

Custom Functions

 * 1) {counter}
 * 2) {cycle}
 * 3) {eval}
 * 4) {fetch}
 * 5) {html_checkboxes}
 * 6) {html_image}
 * 7) {html_options}
 * 8) {html_radios}
 * 9) {html_select_date}
 * 10) {html_select_time}
 * 11) {html_table}
 * 12) {mailto}
 * 13) {math}
 * 14) {textformat}