Enjin templat PHP sering dikritik kerana kemudahan mereka menghasilkan kod berkualiti rendah, tetapi ini tidak semestinya benar. Mari kita lihat bagaimana projek PHP menguatkuasakan struktur model-view-controller (MVC) asas tanpa bergantung pada enjin template yang berdedikasi.
Pertama, ulasan ringkas mengenai sejarah PHP
Sejarah PHP sebagai alat templat HTML penuh dengan kelainan dan giliran.
Salah satu bahasa pengaturcaraan terawal yang digunakan untuk templat HTML adalah C, tetapi dengan cepat mendapati bahawa ia adalah rumit untuk digunakan dan sering tidak sesuai untuk tugas ini.
Rasmus Lerdorf mencipta PHP dengan ini. Dia tidak bertentangan dengan menggunakan C untuk mengendalikan logik perniagaan backend, tetapi mahu cara yang lebih baik untuk menghasilkan HTML dinamik frontend. PHP pada asalnya direka sebagai bahasa templat, tetapi dari masa ke masa ia mengadopsi lebih banyak ciri dan akhirnya menjadi bahasa pengaturcaraan lengkap dan lengkap.
Keupayaan unik PHP untuk beralih antara mod pengaturcaraan dan mod HTML dianggap sangat mudah, tetapi ia juga memudahkan pengaturcara untuk menulis kod kod yang sukar ditulis yang menggabungkan logik perniagaan dan logik templat bersama-sama. Fail PHP boleh bermula dengan beberapa templat HTML dan kemudian tiba -tiba menembusi pertanyaan SQL lanjutan tanpa amaran. Struktur ini sukar dibaca dan digunakan semula templat HTML.
Dari masa ke masa, komuniti pembangunan web telah mendapati bahawa menguatkuasakan struktur MVC yang ketat untuk projek PHP menjadi semakin berharga. Enjin templat dibuat sebagai cara untuk memisahkan pandangan secara berkesan dari pengawalnya.
Untuk mencapai tugas ini, enjin templat biasanya mempunyai ciri -ciri berikut:
- Enjin sengaja melemahkan keupayaan logik perniagaan. Sebagai contoh, jika pemaju ingin melaksanakan pertanyaan pangkalan data, mereka perlu melakukan pertanyaan itu dalam pengawal dan kemudian lulus hasilnya ke templat. Tidak mustahil untuk menanyakan HTML dalam templat.
- Enjin mengendalikan risiko keselamatan bersama di belakang tabir. Templat biasanya secara automatik melarikan diri dari HTML berbahaya walaupun pemaju gagal mengesahkan input pengguna dan lulus terus ke dalam templat.
Enjin templat kini merupakan ciri utama dalam banyak tumpukan teknologi web. Mereka membuat lebih banyak pangkalan kod yang dapat dipelihara dan lebih selamat, jadi tidak mengejutkan.
Walau bagaimanapun, PHP tulen juga boleh digunakan untuk mengendalikan templat HTML . Anda mungkin mahu melakukan ini untuk beberapa sebab. Mungkin anda sedang menjalankan projek warisan dan tidak mahu memperkenalkan sebarang kebergantungan tambahan, atau anda sedang menjalankan projek yang sangat kecil dan lebih suka menyimpannya ringan. Atau, keputusan ini tidak terpulang kepada anda sama sekali.
Gunakan kes untuk templat PHP
Salah satu perkara yang saya sering melaksanakan templat PHP tulen ialah WordPress, yang tidak menguatkuasakan struktur MVC yang ketat secara lalai. Saya merasa agak membosankan untuk memperkenalkan enjin template penuh, tetapi saya masih mahu memisahkan logik perniagaan saya dari templat saya dan mahu pandangan saya dapat diguna semula.
Walau apa pun alasan anda, menggunakan PHP tulen untuk menentukan templat HTML anda kadang -kadang disukai. Artikel ini meneroka cara melakukan ini dengan cara yang lebih profesional. Pendekatan ini mewakili tradeoff praktikal antara gaya kod spageti terkenal templat PHP dan pendekatan "logik-tidak dibenarkan" yang disediakan oleh enjin templat formal.
Mari kita menyelam jauh ke dalam contoh bagaimana untuk meletakkan sistem templat asas menjadi amalan. Sekali lagi, kami menggunakan WordPress sebagai contoh, tetapi ini boleh digantikan dengan persekitaran PHP tulen atau banyak persekitaran lain. Anda tidak perlu akrab dengan WordPress untuk terus membaca.
Matlamatnya adalah untuk memecahkan pandangan kami ke dalam komponen dan mewujudkan perbezaan yang jelas antara logik perniagaan dan templat HTML. Khususnya, kami akan membuat pandangan yang menunjukkan grid kad. Setiap kad akan memaparkan tajuk, ringkasan dan pengarang artikel baru -baru ini.
Langkah 1: Dapatkan data yang akan dibentangkan
Langkah pertama ialah mendapatkan data yang ingin kami paparkan dalam paparan. Ini mungkin melibatkan pelaksanaan pertanyaan SQL atau akses tidak langsung ke pangkalan data menggunakan fungsi Rangka Kerja/CMS ORM atau Helper. Ia juga boleh melibatkan membuat permintaan HTTP ke API luaran atau mengumpul input pengguna dari borang atau rentetan pertanyaan.
Dalam contoh ini, kami akan menggunakan fungsi Helper get_posts
WordPress untuk mendapatkan beberapa jawatan untuk dipaparkan di laman utama kami.
php // index.php $ wp_posts = get_posts ([ 'NumberPosts' => 3 ]);
Kami kini mempunyai akses kepada data yang ingin kami paparkan di grid kad, tetapi kami perlu melakukan kerja tambahan sebelum menyampaikannya kepada pandangan kami.
Langkah 2: Sediakan data templat
Fungsi get_posts
mengembalikan pelbagai objek WP_POST. Setiap objek mengandungi tajuk artikel, ringkasan, dan maklumat pengarang yang kami perlukan, tetapi kami tidak mahu pasangan pandangan kami ke jenis objek WP_POST kerana kami mungkin ingin memaparkan jenis data lain pada kad kami di tempat lain dalam projek.
Sebaliknya, masuk akal untuk secara aktif menukar setiap objek artikel ke jenis data neutral (seperti array bersekutu):
php // index.php $ wp_posts = get_posts ([ 'NumberPosts' => 3 ]); $ cards = array_map (fungsi ($ wp_post) { Kembali [ 'Heading' => $ wp_post-> Post_title, 'badan' => $ wp_post-> post_excerpt, 'Footing' => get_author_name ($ wp_post-> post_author) ]; }, $ wp_posts);
Dalam kes ini, setiap objek WP_POST ditukar kepada array bersekutu menggunakan fungsi array_map
. Perhatikan bahawa kunci untuk setiap nilai bukan tajuk, petikan, dan pengarang, tetapi diberi nama yang lebih umum: tajuk, badan, dan pijakan. Kami melakukan ini kerana komponen mesh kad direka untuk menyokong sebarang jenis data, bukan hanya artikel. Sebagai contoh, ia boleh digunakan dengan mudah untuk memaparkan grid cadangan yang mengandungi rujukan dan nama pelanggan.
Sebaik sahaja data siap, kini boleh dimasukkan ke dalam fungsi render_view
kami:
php // index.php // Pengambilan data dan pemformatan adalah sama seperti sebelum render_view ('cards_grid', [ 'kad' => $ kad ]);
Sudah tentu, fungsi render_view
belum wujud. Mari kita tentukannya.
Langkah 3: Buat fungsi rendering
// Tentukan dalam fungsi.php atau lokasi lain yang menjadikannya tersedia secara global. // Sekiranya anda bimbang tentang kemungkinan konflik di ruang nama global, // Anda boleh menentukan fungsi ini sebagai kaedah statik fungsi kelas nama Render_View ($ paparan, $ data) { ekstrak ($ ??data); memerlukan ('pandangan/'. $ Lihat. '.php'); }
Fungsi ini menerima nama pandangan yang akan diberikan dan array bersekutu yang mewakili sebarang data yang akan dipaparkan. Fungsi extract
mengambil setiap item dalam array bersekutu dan mencipta pembolehubah untuknya. Dalam contoh ini, kami kini mempunyai pembolehubah yang dipanggil $cards
yang mengandungi item yang kami sediakan dalam index.php.
Sejak pandangan dijalankan dalam fungsinya sendiri, ia mempunyai skop sendiri. Ini baik kerana ia membolehkan kita menggunakan nama pembolehubah mudah tanpa bimbang tentang konflik.
Baris kedua fungsi kami mencetak pandangan yang sepadan dengan nama yang diluluskan. Dalam kes ini, ia mencari pandangan dalam views/cards_grid.php
. Mari teruskan dan buat fail.
Langkah 4: Buat templat
php/ * views/cards_grid.php */?>
-
php foreach ($ kad sebagai $ kad) :?>
- php render_view ('kad', $ kad)?> php endforeach; ?>
Templat ini menggunakan pembolehubah $cards
yang anda hanya diekstrak dan menjadikannya sebagai senarai yang tidak teratur. Untuk setiap kad dalam array, templat membuat subview: paparan kad tunggal.
Templat dengan kad tunggal berguna kerana ia memberi kita fleksibiliti untuk menjadikan kad tunggal secara langsung atau menggunakannya dalam pandangan lain di tempat lain dalam projek.
Mari tentukan pandangan kad asas:
php/ * paparan/card.php */?> <div> php if (! kosong ($ heading)) :?> <h4> php echo htmlspecialchars ($ heading)?></h4> php endif; ?> php jika (! kosong ($ badan)) :?> <p> php echo htmlspecialchars ($ body)?></p> php endif; ?> php if (! kosong ($ pijakan)) :?> php echo htmlspecialchars ($ pooting)?> php endif; ?> </div>
Oleh kerana $card
diluluskan ke fungsi render mengandungi kunci untuk tajuk, badan, dan pijakan, pembolehubah dengan nama yang sama kini boleh digunakan dalam templat.
Dalam contoh ini, kita boleh cukup yakin bahawa data kami bukan XSS berbahaya, tetapi mungkin bahawa pandangan ini kemudiannya boleh digunakan dengan input pengguna, jadi berhemat untuk lulus setiap nilai kepada htmlspecialchars
. Jika tag skrip wujud dalam data kami, ia akan selamat melarikan diri.
Secara umumnya berguna untuk memeriksa sama ada setiap pembolehubah mengandungi nilai bukan nol sebelum membuat. Ini membolehkan pembolehubah ditinggalkan tanpa meninggalkan tag HTML kosong dalam tag kami.
Enjin templat PHP adalah hebat, tetapi kadang -kadang sesuai untuk menggunakan PHP untuk mencapai tujuan reka bentuk asalnya: menghasilkan HTML dinamik .
Templatisasi dalam PHP tidak perlu menyebabkan kod gaya spageti yang sukar dikekalkan. Dengan tontonan yang sedikit, kita dapat melaksanakan sistem MVC asas yang memisahkan pandangan dan pengawal antara satu sama lain, dan ini dapat dilakukan dengan jumlah kod yang sangat kecil.
Atas ialah kandungan terperinci PHP adalah A-OK untuk templat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Terdapat tiga cara untuk membuat pemutar pemuatan CSS: 1. Gunakan pemutar asas sempadan untuk mencapai animasi mudah melalui HTML dan CSS; 2. Gunakan pemutar tersuai pelbagai mata untuk mencapai kesan lompat melalui masa kelewatan yang berlainan; 3. Tambahkan pemutar dalam butang dan beralih kelas melalui JavaScript untuk memaparkan status pemuatan. Setiap pendekatan menekankan pentingnya butiran reka bentuk seperti warna, saiz, kebolehcapaian dan pengoptimuman prestasi untuk meningkatkan pengalaman pengguna.

Untuk menangani keserasian pelayar CSS dan isu awalan, anda perlu memahami perbezaan sokongan penyemak imbas dan menggunakan awalan vendor dengan munasabah. 1. Memahami masalah biasa seperti Flexbox dan sokongan grid, kedudukan: prestasi tidak sah, dan prestasi animasi adalah berbeza; 2. Periksa status sokongan ciri CANIUSE Ciri; 3. Gunakan dengan betul -webkit-, -moz-, -ms-, -o- dan awalan pengeluar lain; 4. Adalah disyorkan untuk menggunakan autoprefixer untuk menambah awalan secara automatik; 5. Pasang postcss dan konfigurasi penyemak imbas untuk menentukan penyemak imbas sasaran; 6. Secara automatik mengendalikan keserasian semasa pembinaan; 7. Ciri -ciri pengesanan moden boleh digunakan untuk projek lama; 8. Tidak perlu meneruskan konsistensi semua pelayar,

Themaindifferencesbetweendisplay: inline, block, andinline-blockinhtml/cssarelayoutbehavior, spaceusage, andstylingcontrol.1.inlineelementsflowwithtext, notstartonNewlines, abaikanwidth/height, andonyapplylylylylylinddding/

Menetapkan gaya pautan yang telah anda lawati dapat meningkatkan pengalaman pengguna, terutama di laman web yang berintensifkan kandungan untuk membantu pengguna menavigasi lebih baik. 1. Gunakan CSS: Kelas pseudo yang dilawati untuk menentukan gaya pautan yang dikunjungi, seperti perubahan warna; 2. Perhatikan bahawa penyemak imbas hanya membenarkan pengubahsuaian beberapa atribut disebabkan oleh sekatan privasi; 3. Pemilihan warna harus diselaraskan dengan gaya keseluruhan untuk mengelakkan ketangkasan; 4. Terminal mudah alih mungkin tidak memaparkan kesan ini, dan disyorkan untuk menggabungkannya dengan arahan visual lain seperti logo tambahan ikon.

Gunakan atribut clip-path CSS untuk menanam unsur-unsur ke dalam bentuk tersuai, seperti segitiga, takik bulat, poligon, dan lain-lain, tanpa bergantung pada gambar atau SVG. Kelebihannya termasuk: 1. Menyokong pelbagai bentuk asas seperti Circle, Ellipse, Polygon, dan lain -lain; 2. Pelarasan responsif dan boleh disesuaikan dengan terminal mudah alih; 3. Mudah untuk animasi, dan boleh digabungkan dengan hover atau javascript untuk mencapai kesan dinamik; 4. Ia tidak menjejaskan aliran susun atur, dan hanya tanaman kawasan paparan. Penggunaan umum adalah seperti laluan klip bulat: bulatan (50pxatcenter) dan triangle clip-path: polygon (50%0%, 100 0%, 0 0%). Notis

Untuk membuat imej responsif menggunakan CSS, ia boleh dicapai terutamanya melalui kaedah berikut: 1. Gunakan maksimum lebar: 100% dan ketinggian: auto untuk membolehkan imej menyesuaikan diri dengan lebar kontena sambil mengekalkan perkadaran; 2. Gunakan atribut SRCSET dan saiz HTML dengan bijak memuatkan sumber imej yang disesuaikan dengan skrin yang berbeza; 3. Gunakan objek-sesuai dan kedudukan objek untuk mengawal penanaman imej dan paparan fokus. Bersama -sama, kaedah ini memastikan bahawa imej dibentangkan dengan jelas dan indah pada peranti yang berbeza.

Penyemak imbas yang berbeza mempunyai perbezaan dalam parsing CSS, mengakibatkan kesan paparan yang tidak konsisten, terutamanya termasuk perbezaan gaya lalai, kaedah pengiraan model kotak, flexbox dan tahap sokongan susun atur grid, dan tingkah laku yang tidak konsisten bagi atribut CSS tertentu. 1. Pemprosesan gaya lalai tidak konsisten. Penyelesaiannya adalah menggunakan cssreset atau normalisasi.css untuk menyatukan gaya awal; 2. Kaedah pengiraan model kotak versi lama IE adalah berbeza. Adalah disyorkan untuk menggunakan kotak-kotak: kotak sempadan dengan cara yang bersatu; 3. Flexbox dan grid melakukan secara berbeza dalam kes kelebihan atau dalam versi lama. Lebih banyak ujian dan gunakan autoprefixer; 4. Beberapa tingkah laku atribut CSS tidak konsisten. CANIUSE mesti dirujuk dan diturunkan.

Pilihan unit CSS bergantung kepada keperluan reka bentuk dan keperluan responsif. 1.PX digunakan untuk saiz tetap, sesuai untuk kawalan yang tepat tetapi kekurangan keanjalan; 2.EM adalah unit relatif, yang mudah disebabkan oleh pengaruh unsur induk, sementara REM lebih stabil berdasarkan unsur akar dan sesuai untuk skala global; 3.VW/VH didasarkan pada saiz viewport, sesuai untuk reka bentuk yang responsif, tetapi perhatian harus dibayar kepada prestasi di bawah skrin yang melampau; 4. Apabila memilih, ia harus ditentukan berdasarkan sama ada pelarasan responsif, hubungan hierarki elemen dan ketergantungan viewport. Penggunaan yang munasabah boleh meningkatkan fleksibiliti dan penyelenggaraan susun atur.
