Rumah  >  Artikel  >  hujung hadapan web  >  Penyelesaian kepada masalah yang templat Thinkphp tidak menghuraikan dan mengeluarkan secara langsung kerana kemahiran is_javascript

Penyelesaian kepada masalah yang templat Thinkphp tidak menghuraikan dan mengeluarkan secara langsung kerana kemahiran is_javascript

WBOY
WBOYasal
2016-05-16 16:32:323406semak imbas

Contoh dalam artikel ini menerangkan penyelesaian kepada masalah bahawa templat Thinkphp tidak dihuraikan dan secara langsung mengeluarkannya sebagaimana adanya. Kongsikan dengan semua orang untuk rujukan anda. Butirannya adalah seperti berikut:

1. Soalan:

Saya sedang mempelajari templat thinkphp baru-baru ini, tetapi saya mendapati bahawa halaman templat itu keluar seperti sedia ada Selepas beberapa pencarian yang sukar, saya akhirnya menemui penyelesaiannya.

2. Penyelesaian:

Ramai orang telah menghadapi masalah yang sama __ROOT__, __PUBLIC__ dan __APP__ yang terkandung dalam rentetan yang diberikan kepada pembolehubah digantikan dengan laluan sebenar apabila dipaparkan dalam templat. Saya menemui masalah ini semasa menulis sistem pengurusan fail Timi.

Selepas membaca kod sumber daripada fail dan mengeluarkannya ke halaman, saya mendapati bahawa selagi ia adalah watak laluan TP, ia telah digantikan dengan laluan sebenar.
Contohnya:

Salin kod Kod adalah seperti berikut:
$this->assign('fileContent',$ fileContent); //$fileContent mengandungi __PUBLIC__ aksara "pemalar laluan".


Selepas halaman dikeluarkan, ia dipaparkan sebagai laluan sebenar /public/.
Dalam tempoh ini, saya telah melalui banyak percubaan, seperti penyulitan base64 semasa menetapkan, menyahkod semasa mengeluarkan templat, dan mendapati ia tidak berfungsi. Akhirnya, saya tidak dapat membantu tetapi melihat kod sumber Tp, dan mendapati bahawa dalam langkah terakhir kaedah paparan, "Pemalar laluan Tp" telah digantikan dengan laluan sebenar dengan memanggil kaedah teg. Semuanya normal sebelum kaedah render.

Saya pada asalnya merancang untuk menukar kod sumber untuk melaksanakan penyelesaian berikut untuk kasut kanak-kanak:
Bos, adakah ini penyelesaian sementara atau penyelesaian muktamad?
Tetapi saya rasa tidak salah untuk menambah pertimbangan dalam kaedah assign(),
Jika ia $this->assign('','',false), kandungan tidak akan diganti dan akan dikeluarkan seperti sedia ada.

Hasilnya, selepas membaca kod sumber ini, saya menyedari bahawa ia tidak semudah itu dan perubahannya terlalu besar.

Balasan terakhir daripada kanak-kanak lain menunjukkan penyelesaian terakhir:

"Anda boleh merujuk kandungan di sini: http://www.jb51.net/article/54217.htm(penggantian templat)

Dengan peraturan penggantian templat, semua rentetan __PUBLIC__ pada halaman akan digantikan Jika kita benar-benar perlu mengeluarkan rentetan __PUBLIC__ pada templat, kita boleh menambah peraturan penggantian, contohnya:
.

Salin kod Kod adalah seperti berikut:
'TMPL_PARSE_STRING' =>array(
'--PUBLIC--' => '__PUBLIC__', // Gunakan peraturan baharu untuk mengeluarkan /Rentetan awam
)

Selepas menambah peraturan penggantian dengan cara ini, jika kita ingin mengeluarkan rentetan __PUBLIC__, kita hanya perlu menambah --PUBLIC-- dalam templat Kaedah keluaran rentetan gantian lain adalah serupa.

Selepas menambah peraturan penggantian dengan cara ini, jika kita ingin mengeluarkan rentetan __PUBLIC__, kita hanya perlu menambah --PUBLIC-- dalam templat Kaedah keluaran rentetan gantian yang lain adalah serupa.

Jadi, rancangan itu dikeluarkan:

Konfigurasikan dalam fail konfigurasi Tp config.php

Salin kod Kod adalah seperti berikut:
'TMPL_PARSE_STRING' => tatasusunan (//konfigurasi laluan
                           
//Pemulihan laluan fail Timi
'--AWAM--' => '__AWAM__',
'--APP--' => '__APP__',
'--URL--' => '__URL__',
'--ACTION--' => '__ACTION__',
'--SELF--' => '__SELF__',
'--INFO--' => '__INFO__',
'--EXT--' => '__EXT__'
),

Apabila membaca kod sumber, gantikan "path constant character" __ROOT__ dengan --ROOT--:

Salin kod Kod adalah seperti berikut:
$fileContent=file_get_contents($filePath); $fileContent=htmlspecialchars(preg_replace('/__(.*?)__/is','--$1--',$fileContent));

Kemudian konfigurasi TMPL_PARSE_STRING hanya diganti apabila templat dihuraikan, seperti yang ditunjukkan dalam rajah di bawah:

Sejak itu, masalah ini telah "sementara" dan "sempurna" diselesaikan.

Saya harap artikel ini akan membantu pengaturcaraan rangka kerja ThinkPHP semua orang.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn