Sumber artikel: Catatan Pemrograman
http://blog.csdn.net/nhconch Tolong dukung saya.
Setiap pengembang yang telah merancang aplikasi ASP-Web skala besar mungkin memiliki pengalaman berikut: Kode ASP dan HTML halaman bingung dan sulit dibedakan, dan logika bisnis Itu terikat dengan mode tampilan, membuat kode sulit untuk dipahami dan dimodifikasi; pemrograman harus ditulis setelah karya seni, yang telah menjadi hambatan proyek ketika mengintegrasikan kode program dan halaman statis HTML, dibutuhkan banyak waktu untuk mendapatkannya efek yang diinginkan, dan itu juga berfungsi sebagai seni. Memang tidak mudah untuk memisahkan pemrosesan data dan tampilan data saat mengembangkan aplikasi Web menggunakan bahasa skrip. Namun, dalam kasus kerja sama multi-orang, jika data dan tampilan tidak dapat dipisahkan, hal ini akan sangat mempengaruhi efisiensi pengembangan dan tampilan. pembagian kerja profesional.
Bahasa skrip lain, seperti JSP dan PHP, memiliki solusinya sendiri. ASP.NET, produk ASP generasi selanjutnya, juga mengimplementasikan kode dan halaman. Tampaknya transisi langsung ke ASP adalah pilihan yang baik. Namun selalu ada alasan tertentu yang menghalangi kita untuk melepaskan ASP atau langsung menggunakan kamp .NET untuk saat ini. Dari sudut pandang perusahaan, peralihan bahasa adalah investasi besar, termasuk mempekerjakan pemrogram .NET berpengalaman, melatih pemrogram yang ada, transformasi alat pengembangan, transformasi gaya pengembangan, perubahan gaya antarmuka, gaya antarmuka, arsitektur perangkat lunak, Dokumen, proses pengembangan , dll.; ini juga berarti bahwa kode asli harus ditulis ulang dalam lingkungan bahasa baru untuk mencapai efek dan stabilitas terbaik, pada saat yang sama, ini akan secara langsung mempengaruhi kemajuan proyek selama periode ini, dan lebih mungkin terjadi menyebabkan pemrogram individu pergi. Tampaknya sebelum Anda memutuskan untuk beralih bahasa, yang terbaik adalah mencari solusi berdasarkan aslinya.
PHP mengimplementasikan kode dan halaman melalui templat. Ada FastTemplate, PHPLIB, Smarty, dll. yang dapat dipilih, di antaranya PHPLIB memiliki pengaruh terbesar dan paling banyak digunakan. Dalam hal ini kami langsung memindahkannya ke ASP, yang mana manfaatnya besar bagi perusahaan yang menggunakan PHP dan ASP: 1. Saat artis memproses halaman, baik yang menggunakan PHP atau ASP, metode pemrosesannya sama, dan tidak ada pelatihan diperlukan; 2. Ketika pemrogram menulis kode, gagasan antara kedua bahasa tersebut dekat atau konsisten. Ketika fungsi yang sama diterapkan dalam dua bahasa, mereka hanya perlu menyalinnya dan membuat sedikit modifikasi, memastikan efisiensi kerja dan proyek kemajuan.
1. Desain kelas templat mengimplementasikan enkapsulasi kode ke dalam kelas templat, yang tidak hanya kompatibel dengan PHPLIB, tetapi juga membuat kode mudah dikelola dan diperluas.
Tujuan dari kelas templat adalah membaca kode HTML yang ditampilkan dari file templat, mengganti bagian kode tampilan yang memerlukan data dinamis dengan data yang dihitung oleh program ASP, dan kemudian mengeluarkannya dalam urutan tertentu. Diantaranya, suku cadang pengganti dapat diatur secara bebas. Oleh karena itu ia harus menyelesaikan tugas-tugas berikut:
·Baca kode HTML untuk tampilan dari file template.
·Gabungkan file template dengan data aktual yang dihasilkan untuk menghasilkan hasil keluaran.
·Memungkinkan beberapa template diproses secara bersamaan.
·Izinkan penumpukan templat.
·Memungkinkan pemrosesan bagian individual dari templat.
Metode pelaksanaan:
Gunakan FSO untuk membaca file template
Gunakan penggantian reguler untuk menggabungkan file template dan data
Pemrosesan beberapa templat diimplementasikan menggunakan penyimpanan array.
Gagasan utama di balik penerapan templat bersarang adalah untuk memperlakukan templat dan keluaran (hasil analisis antara apa pun) secara setara, dan keduanya dapat diganti, dan selesai.
Pemrosesan masing-masing bagian dikontrol dengan mengatur anotasi dalam file templat, dan kemudian menggabungkan anotasi dalam penggantian reguler untuk mencapai penggantian sebagian.
2. Sebelum memberikan kode spesifik untuk implementasi kelas template, mari kita daftar dulu fungsi utamanya. Teman-teman yang pernah menggunakan PHPLIB sebaiknya sudah familiar dengan ini:
1) Sub Publik set_root(Nilai ByVal) menyetel direktori default templat 2) Sub Publik set_file(Pegangan ByVal, nama file ByVal) membaca file 3) Sub Publik set_var(Nama ByVal, Nilai ByVal, Penambahan ByVal) menyetel pengganti data pemetaan variabel 4) Sub Publik unset_var(Nama ByVal) Membatalkan pemetaan data 5) Sub Publik set_block(Induk ByVal, BlockTag ByVal, Nama ByVal) Setel blok data 6) Sub Publik set_unknowns(ByVal tidak diketahui) Mengatur metode pemrosesan tag untuk pemetaan yang tidak ditentukan 7) Public Sub parse(ByVal Name, ByVal BlockTag, ByVal Append) mengeksekusi kombinasi file template dan data 8) Public Sub p(ByVal Name) mengeluarkan
kode implementasi hasil pemrosesan:
<%
' ===== =======
' Metode penamaan seperti set_var dan set_block digunakan dalam objek ini untuk kompatibilitas dengan phplib
' ===== =======
'www.downcodes.com
Kelas kktTemplate
m_FileName pribadi, m_Root, m_Unknowns, m_LastError, m_HaltOnErr
m_ValueList pribadi, m_BlockList
m_RegExp pribadi
'Konstruktor
Sub Kelas Pribadi_Inisialisasi
Setel m_ValueList = CreateObject("Scripting.Dictionary")
Setel m_BlockList = CreateObject("Scripting.Dictionary")
atur m_RegExp = RegExp Baru
m_RegExp.IgnoreCase = Benar
m_RegExp.Global = Benar
m_NamaFile = ""
m_Root = ""
m_Unknowns = "hapus"
m_Kesalahan Terakhir = ""
m_HaltOnErr = benar
Akhiri Sub
'Penghancur
Sub Kelas Pribadi_Terminate
Setel m_RegExp = Tidak Ada
Setel m_BlockMatches = Tidak Ada
Setel m_ValueMatches = tidak ada
Akhiri Sub
Properti Publik GetClassName()
Nama Kelas = "kktTemplate"
Properti Akhir
Properti Publik Dapatkan Versi()
Versi = "1.0"
Properti Akhir
Sub Publik Tentang()
Response.Write("kktTemplate kelas templat halaman ASP<br>" & vbCrLf &_
"Pemrograman: Peng Guohui2004-07-05<br>" & vbCrLf &_
"Situs web pribadi: <a href='http://kacarton.yeah.net'>http://kacarton.yeah.net</a><br>" & vbCrLf &_
"Email: <a href='mailto:[email protected]'>[email protected]</a><br>")
Akhiri Sub
'Periksa apakah direktori itu ada
Folder Fungsi PublikExist (jalur ByVal)
Redupkan
Setel fso = CreateObject("Scripting.FileSystemObject")
FolderExist = fso.FolderExists(Server.MapPath(jalur))
Tetapkan fso = Tidak ada
Fungsi Akhir
'Baca konten file
Fungsi Pribadi LoadFile()
Redupkan Nama File, fso, hndFile
Nama file = m_Root
Jika Benar(Nama File, 1)<>"/" Dan Benar(Nama File, 1)<>"" Maka Nama File = Nama File & "/"
Nama File = Server.MapPath(Nama File & m_NamaFile)
Setel fso = CreateObject("Scripting.FileSystemObject")
Jika Tidak fso.FileExists(Nama File) Kemudian ShowError("File template" & m_FileName & "Tidak ada!")
setel hndFile = fso.OpenTextFile(Nama file)
LoadFile = hndFile.BacaSemua
Setel hndFile = Tidak Ada
Tetapkan fso = Tidak ada
If LoadFile = "" Then ShowError("Tidak dapat membaca file template" & m_FileName & "Atau file kosong!")
Fungsi Akhir
'Tangani pesan kesalahan
Sub Pribadi ShowError (Pesan ByVal)
m_LastError = pesan
Response.Tulis "<font color=red style='font-size;14px'><b>Kesalahan template:" & pesan & "</b></font><br>"
Jika m_HaltOnErr Lalu Respon.End
Akhiri Sub
'Tetapkan direktori default untuk file templat
'Contoh: kktTemplate.set_root("/tmplate")
' kktTemplate.Root = "/tmplate"
' root = kktTemplate.get_root()
' root = kktTemplate.Root
'Menggunakan metode penamaan seperti set_root adalah untuk kompatibilitas dengan phplib, yang tidak akan diulangi di bawah.
Sub Publik set_root (Nilai ByVal)
Jika Bukan FolderExist(Nilai) Lalu ShowError(Nilai & "Direktori tidak valid atau direktori tidak ada!")
m_Root = Nilai
Akhiri Sub
Fungsi Publik get_root()
dapatkan_root = m_Root
Fungsi Akhir
Properti Publik Biarkan Root (Nilai ByVal)
set_root(Nilai)
Properti Akhir
Properti Publik GetRoot()
Akar = m_Root
Properti Akhir
'Setel file templat
'Misalnya: kktTemplate.set_file("hndTpl", "index.htm")
'Kelas ini tidak mendukung banyak file templat, pegangannya dicadangkan untuk kompatibilitas dengan phplib
Sub Publik set_file (pegangan ByVal, nama file ByVal)
m_FileName = nama file
m_BlockList.Tambahkan Pegangan, LoadFile()
Akhiri Sub
Fungsi Publik get_file()
get_file = m_Nama File
Fungsi Akhir
' Properti Publik Biarkan File (pegangan, nama file)
'set_file pegangan, nama file
'Akhir Properti
'Properti Publik Dapatkan File()
'File = m_Nama File
'Akhir Properti
'Tetapkan metode pemrosesan untuk tag yang tidak ditentukan, termasuk simpan, hapus, dan komentar.
Sub Publik set_unknowns (ByVal tidak diketahui)
m_Tidak Diketahui = tidak diketahui
Akhiri Sub
Fungsi Publik get_unknowns()
get_unknowns = m_Unknowns
Fungsi Akhir
Properti Publik Biarkan Tidak Diketahui (ByVal tidak diketahui)
m_Tidak Diketahui = tidak diketahui
Properti Akhir
Properti Publik Tidak Diketahui()
Tidak Diketahui = m_Tidak Diketahui
Properti Akhir
Sub Publik set_block(ByVal Induk, ByVal BlockTag, Nama ByVal)
Pertandingan Redup
m_RegExp.Pattern = "<!--s+BEGIN " & BlockTag & "s+-->([sS.]*)<!--s+END " & BlockTag & "s+-- >"
Jika Bukan m_BlockList.Exists(Induk) Kemudian ShowError("Tag blok tidak ditentukan" & Induk)
set Kecocokan = m_RegExp.Execute(m_BlockList.Item(Parent))
Untuk Setiap Pertandingan Dalam Pertandingan
m_BlockList.Tambahkan BlockTag, Cocokkan.SubMatches(0)
m_BlockList.Item(Parent) = Ganti(m_BlockList.Item(Parent), Match.Value, "{" & Nama & "}")
Berikutnya
set Cocok = tidak ada
Akhiri Sub
Sub Publik set_var(Nama ByVal, Nilai ByVal, Tambahan ByVal)
Redupkan Val
Jika IsNull(Nilai) Maka Val = "" Else Val = Nilai
Jika m_ValueList.Exists(Nama) Lalu
Jika Tambahkan Kemudian m_ValueList.Item(Nama) = m_ValueList.Item(Nama) & Val _
Lain m_ValueList.Item(Nama) = Val
Kalau tidak
m_ValueList.Tambahkan Nama, Nilai
Akhiri Jika
Akhiri Sub
Sub Publik unset_var(Nama ByVal)
Jika m_ValueList.Exists(Nama) Kemudian m_ValueList.Remove(Nama)
Akhiri Sub
Nilai Instance Fungsi Pribadi (ByVal BlockTag)
Tombol redup, i
Nilai Instance = m_BlockList.Item(BlockTag)
kunci = m_ValueList.Kunci
Untuk i=0 Ke m_ValueList.Count-1
InstanceValue = Ganti(InstanceValue, "{" & kunci(i) & "}", m_ValueList.Item(kunci(i)))
Berikutnya
Fungsi Akhir
Sub parsing Publik (Nama ByVal, BlockTag ByVal, Penambahan ByVal)
Jika Bukan m_BlockList.Exists(BlockTag) Kemudian ShowError("Tag blok tidak ditentukan" & Induk)
Jika m_ValueList.Exists(Nama) Lalu
Jika Tambahkan Kemudian m_ValueList.Item(Nama) = m_ValueList.Item(Nama) & InstanceValue(BlockTag) _
Lain m_ValueList.Item(Nama) = InstanceValue(BlockTag)
Kalau tidak
m_ValueList.Tambahkan Nama, InstanceValue(BlockTag)
Akhiri Jika
Akhiri Sub
Fungsi Pribadi selesai (konten ByVal)
Pilih Kasus m_Unknowns
Kasus "simpan" selesai = konten
Kasus "hapus"
m_RegExp.Pattern = "{[^ trn}]+}"
selesai = m_RegExp.Replace(konten, "")
Kasus "komentar"
m_RegExp.Pattern = "{([^ trn}]+)}"
finish = m_RegExp.Replace(konten, "<!-- Variabel Templat $1 tidak terdefinisi -->")
Kasus Lain selesai = konten
Pilihan Akhir
Fungsi Akhir
Sub p Publik (Nama ByVal)
Jika Bukan m_ValueList.Exists(Nama) Kemudian ShowError("Tidak ada" & Nama)
Respon.Tulis(selesai(m_ValueList.Item(Nama)))
Akhiri Sub
Kelas Akhir
%>
3. Contoh penggunaan Berikut tiga contoh penjelasannya.
1) File template pengganti nilai sederhana adalah myTemple.tpl, konten:
<html><title>Pengganti sederhana template ASP</title><body>
mengucapkan selamat! Anda memenangkan Ferrari {some_color}!
</body>
Berikut ini adalah kode ASP (kktTemplate.inc.asp adalah kelas template yang diberikan di atas):
<!--#TERMASUK VIRTUAL="kktTemplate.inc.asp"-->
<%
redupkan warna_saya, kkt
warna_saya = "merah"
set kkt = new kktTemplate 'Buat objek templat
kkt.set_file "hndKktTemp", "myTemple.tpl" 'Atur dan baca file templat myTemple.tpl
kkt.set_var "some_color", my_color, false 'Tetapkan nilai variabel template some_color = my_color
kkt.parse "out", "hndKktTemp", false 'Variabel template keluar = file yang diproses
kkt.p "keluar" 'Keluarkan isi dari keluar
set kkt = Nothing 'Hancurkan objek template
%>
Output setelah eksekusi adalah:
<html><title>Pengganti sederhana template ASP</title><body>
mengucapkan selamat! Anda memenangkan Ferrari merah!
</tubuh>
2) File templat contoh demonstrasi blok loop myTemple2.tpl:
<html><title>Demonstrasi Blok Template ASP</title><body>
<table Cellspacing="2" border="1"><tr><td>Hewan berikut ini yang Anda suka</td></tr>
<!-- MULAI Daftar Hewan -->
<tr><td><input type="radio" name="chk">{animal}</td></tr>
<!-- AKHIR Daftar Hewan -->
</tabel>
</body>
Kode ASP:
<!--#TERMASUK VIRTUAL="kktTemplate.inc.asp"-->
<%
binatang redup, kkt, i
animal = Array("Babi Kecil", "Anak Anjing", "Xiaoqiang")
atur kkt = kktTemplate baru
kkt.set_file "hndKktTemp", "myTemple2.tpl"
kkt.set_block "hndKktTemp", "Daftar Hewan", "daftar"
untuk i=0 hingga UBound(hewan)
kkt.set_var "hewan", hewan(i), salah
kkt.parse "daftar", "Daftar Hewan", benar
Berikutnya
kkt.parse "keluar", "hndKktTemp", salah
kkt.p "keluar"
atur kkt = tidak ada
%>
Hasil eksekusi:
<html><title>Demonstrasi Blok Template ASP</title><body>
<table Cellspacing="2" border="1"><tr><td>Hewan berikut ini yang Anda suka</td></tr>
<tr><td><input type="radio" name="chk">Babi Kecil</td></tr>
<tr><td><input type="radio" name="chk">Anak Anjing</td></tr>
<tr><td><input type="radio" name="chk">Xiaoqiang</td></tr>
</tabel>
</tubuh>
3) File templat demonstrasi blok bersarang myTemple3.tpl:
<html><title>Template ASP - Demonstrasi Blok Bersarang</title>
<body><table width="400" border="1" bordercolor="#000000">
<tr><td><div align="center">tes {namasaya}</div></td></tr>
<tr><td>Kebun binatang dan botani saya: </td> </tr>
<!-- MULAI Daftar hewan -->
<tr><td>{hewan}</td></tr>
<!-- MULAI Daftar Tanaman -->
<tr><td> {tanaman</td></tr>
<!-- AKHIR Daftar tanaman -->
<!-- AKHIR Daftar hewan -->
</tabel>
</tubuh>
</html>
Kode ASP:
<!--#TERMASUK VIRTUAL="kktTemplate.inc.asp"-->
<%
redupkan warna_ku, kkt, namaku, hewan, tumbuhan
atur kkt = kktTemplate baru
namaku = "uji blok kktTemplate..."
hewan = array("hewan", "tumbuhan")
plant = array(array("Babi Kecil","Xiaobai","Xiaoqiang"), array("Mawar","Bunga Matahari"))
kkt.set_file "hndKktTemp", "myTemple3.tpl"
kkt.set_var "namaku", namaku, salah
kkt.set_block "hndKktTemp", "daftar hewan", "a"
kkt.set_block "animalList", "plantList", "p"
untuk i=0 hingga UBound(animal)
kkt.set_var "hewan", hewan(i), Salah
kkt.unset_var "p"
'kkt.set_var "p", "", salah
untuk j=0 hingga UBound(tanaman(i))
kkt.set_var "tanaman", tanaman(i)(j), salah
kkt.parse "p", "plantList", benar
Berikutnya
kkt.parse "a", "animalList", benar
Berikutnya
kkt.parse "keluar", "hndKktTemp", salah
kkt.p "keluar"
%>
Hasil eksekusi:
<html><title>Template ASP - Demonstrasi Blok Bersarang</title>
<body><table width="400" border="1" bordercolor="#000000">
<tr><td><div align="center">pengujian blok kktTemplate...pengujian</div></td></tr>
<tr><td>Kebun binatang dan botani saya: </td> </tr>
<tr><td>Hewan</td></tr>
<tr><td> Babi Kecil</td></tr>
<tr><td> Xiaobai</td></tr>
<tr><td> Xiaoqiang</td></tr>
<tr><td>Tanaman</td></tr>
<tr><td> Mawar</td></tr>
<tr><td> Bunga Matahari</td></tr>
</tabel>
</tubuh>
</html>
Semua kode yang disebutkan dalam artikel ini dapat diunduh di sini: