Soalan ini lebih berkaitan dengan proses/logik yang ingin saya laksanakan dari segi "SKALA" berbanding cara menulis kod.
Dalam WordPress, saya mempunyai beberapa borang yang dimuatkan sebagai HTML untuk log "acara" baharu apabila pengguna mencipta catatan tersuai (sebenarnya entri pangkalan data baharu untuk anda yang tidak biasa dengan CMS) masa untuk dimuatkan. Saya tidak mahu memetakan semuanya secara manual kerana ini menggunakan update_post_meta()
来设置数据库条目/文章的名称和值 - 所以当提交表单时,我使用php循环foreach ($_POST as $name => $value) {
untuk mengisi semua jadual pangkalan data untuk acara ini.
Ini berfungsi dengan baik, tetapi sekarang, jika pengguna menyimpan borang dan kembali untuk mengeditnya kemudian, saya mahu nilai itu digemakan semula seperti ini jika wujud:
<label for="reported_by">报告人(全名)</label> <?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?> <input type="text" name="reported_by" value="<?php echo $reported_by; ?>">
Sekali lagi, pendekatan ini juga berfungsi dengan baik, tetapi saya mempunyai hampir 500 medan pada halaman ini, jadi menetapkan pembolehubah unik secara manual (dalam kes ini $reported_by
) untuk setiap medan akan mengambil masa yang lama dan pada asasnya Meningkatkan asas kod sebanyak hampir 50%, menyukarkan penyelenggaraan dan tidak cekap.
Ada idea bagaimana untuk menyelesaikan masalah ini? Difahamkan, saya boleh membina borang melalui php dan menggemakannya dalam HTML, tetapi ini juga terasa seperti proses yang sangat manual. PHP adalah bahagian pelayan, jadi saya tidak boleh dengan mudah mendapatkan nilai nama tag/input pada bahagian klien, melainkan menggunakan AJAX, tetapi saya rasa itu juga akan menjadi agak manual.
Jadi bagaimanapun, saya berhadapan dengan banyak pertindihan usaha, melainkan ada cara untuk menjadikan proses ini lebih mudah untuk skala kepada semua 500 medan tanpa memerlukan saya menetapkan nama pembolehubah secara manual.
Terima kasih atas masa anda!
Perkara pertama yang perlu diambil perhatian ialah anda sebenarnya tidak perlu mencipta pembolehubah tempatan yang dinamakan berbeza untuk setiap input borang. Dengan kata lain, tidak perlu menulis seperti ini:
Anda boleh menulis seperti ini:
Mengapa ini membantu? Kerana sekarang hanya ada dua item yang berkaitan dengan entri ini:
Kedua-dua ini hanyalah rentetan, jadi mudah untuk diekstrak ke dalam pembolehubah PHP:
Ini kelihatan seperti parameter, jadi mari kita ubah ini menjadi fungsi, ingat untuk lulus
$incident_id
juga:Kini, anda hanya perlu memanggil gelung
display_input
函数500次就可以显示500个输入项。为了避免这样,可以使用一个数组和foreach
:Anda kemudian boleh mendapatkan tatasusunan daripada fail konfigurasi atau jadual pangkalan data dan bukannya pengekodan keras. Anda telah mengautomasikan bahagian berulang (butiran pemaparan HTML), hanya meninggalkan bahagian "seronok": mentakrifkan senarai medan untuk dipaparkan.
Jika sesetengah medan perlu berbeza sedikit, anda boleh menambah beberapa pilihan tambahan pada fungsi (dan tatasusunan konfigurasi), tetapi selagi tidak terdapat terlalu banyak perubahan, kod itu harus kekal agak mudah dan mudah.