cari
Rumahpembangunan bahagian belakangtutorial php一个PHP模板,主要想体现一下思路

思路:
欲在速度和易用(主要指的是美工设计的方便性)之间取得一个平衡点.于是采用了由html文件生成php文件的办法(编译?)
也想在分离显示逻辑和分离html代码之间平衡一下
例如一个论坛首页(index.php):
代码:

require('./template.php');
//由html生成的php文件的前缀,区别使用多种风格.
$tpl_prefix = 'default';
//模板文件名
$tpl_index = 'index';
$tpl = new Template($tpl_prefix);
$cats = array(
    array('forum_id'=>'1','forum_cat_id'=>'0','forum_name'=>'PHP学习'),
   array('forum_id'=>'2','forum_cat_id'=>'0','forum_name'=>'MYSQL学习')
);
$forums = array(
   array('forum_id'=>'3','forum_cat_id'=>'1','forum_name'=>'PHP高级教程'),
   array('forum_id'=>'4','forum_cat_id'=>'1','forum_name'=>'PHP初级教程'),
   array('forum_id'=>'5','forum_cat_id'=>'2','forum_name'=>'MYSQL相关资料')
);
if ($cats)
{
   if ($tpl->chk_cache($tpl_index))//检查判断是否需要重新生产PHP模板文件.
    {
       $tpl->load_tpl($tpl_index);//加载html模板文件.
      //替换PHP语句
      $tpl->assign_block("{block_cat}","");
      $tpl->assign_block("{/block_cat}","}?>");
        $tpl->assign_block("{block_forum}","\nif(\$forum['forum_cat_id'] == \$cat['forum_id']) {?>");
       $tpl->assign_block("{/block_forum}","}\n}?>");
      //生产PHP模板文件.
      $tpl->write_cache($tpl_index);
   }
}
//包含PHP模板文件.
include($tpl->parse_tpl($tpl_index));
?>

对应的html模板文件(index.html):
代码:

{block_cat}

 
   
 
{block_forum}
 
   
 
{/block_forum}
{=$cat['forum_name']}
{=$forum['forum_name']}



{/block_cat}

经过处理,里面的{block_forum}{block_cat}标签被替换成PHP循环语句,用于显示数组种所有元素.
生成的PHP模板文件(default_index.php):
代码:



 
   
 
if($forum['forum_cat_id'] == $cat['forum_id']) {?>
 
   
 
}
}?>
=$cat['forum_name']?>
=$forum['forum_name']?>



}?>

default_index.php被包含在index.php,这样就可以正常显示了.
这样,HTML模板文件可以用dw来进行修改美化,美工人员应该会方便一些.

template.php
代码:

/*********************************************************************************
*                                                                 模板类(Template)
*    最后修改时间:2004.4.07    本论坛使用   
*   
*
*
**********************************************************************************/
class Template {
   //$this->$template,储存模板数据.
   var $template = '';
   //模板路径.
   var $tpl_path = '';
   //模板前缀(风格名称).
   var $tpl_prefix = '';
    //cache路径(编译后的路径).
   var $cache_path = '';
   //css文件路径.
   var $css_path = '';
   //header文件路径.
   var $header_path = '';
   //footer文件路径
    var $footer_path = '';
   /**
   * 初始化模板路径.
   */
   function Template($root = 'default')
   {
      //模板前缀(风格名称).
      $this->tpl_prefix = $root;
      //模板文件路径.
      $this->tpl_path = './templates/' . $root . '/';
      //生成的PHP文件存放路径.
      $this->cache_path = './template_data/' .$this->tpl_prefix . '_';
      return true;
   }
   /**
   * chk_cache,检查"编译"后的模板是否需要更新,判断依据:最后修改时间,"编译"文件是否存在.
   */
   function chk_cache($tpl_index)
    {
      $tpl_file = $this->tpl_path . $tpl_index . '.html';
      $cache_file = $this->cache_path . $tpl_index . '.php';
      //判断是否需要更新.
      if(!file_exists($cache_file))
        {
         return true;
      }
        elseif(filemtime($tpl_file) > filemtime($cache_file))
        {
         return true;
      }
   }
   /**
   * 输出模板文件.
   */
   function parse_tpl($tpl_index,$message='')
    {
       return $this->cache_path . $tpl_index . '.php';
    }
   /**
   * 加载模板文件.
   */
   function load_tpl($tpl_index)
    {
      $tpl_file = $this->tpl_path . $tpl_index . '.html';
      $fp = fopen($tpl_file, 'r');
      $this->template = fread($fp, filesize($tpl_file));
      fclose($fp);
   }
   /**
   * 替换变量,并且"编译"模板.
   */
   function write_cache($tpl_index)
    {
      $cache_file = $this->cache_path . $tpl_index . '.php';
      //变量显示.
      $this->template = preg_replace("/(\{=)(.+?)(\})/is", "=\\2?>", $this->template);
      //界面语言替换.
      $this->template = preg_replace("/\{lang +(.+?)\}/ies", "\$lang['main']['\\1']", $this->template);
        $fp = fopen($cache_file, 'w');
        flock($fp, 3);
        fwrite($fp, $this->template);
        fclose($fp);
    }
   /**
   * 替换block.
   */
   function assign_block($search,$replace)
    {
      $this->template = str_replace($search,$replace,$this->template);
   }
}
?>

以上就介绍了 一个PHP模板,主要想体现一下思路,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

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
Penalaan prestasi PHP untuk laman web trafik yang tinggiPenalaan prestasi PHP untuk laman web trafik yang tinggiMay 14, 2025 am 12:13 AM

Thesecrettokeepingaphp-poweredwebsiterunningsmoothlyunderheavyloadinVolvesserVeSkeystrategies: 1) pelaksanaanPodeCachingWithopCachetoreduceScriptexecutionTime, 2) UsedataBasequerycachingWnithSoRessendataBaBAboad, 3)

Suntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaSuntikan Ketergantungan dalam PHP: Contoh Kod untuk PemulaMay 14, 2025 am 12:08 AM

Anda harus mengambil berat tentang kebergantungan (DI) kerana ia menjadikan kod anda lebih jelas dan lebih mudah untuk dikekalkan. 1) Di menjadikannya lebih modular dengan decoupling kelas, 2) meningkatkan kemudahan ujian dan fleksibiliti kod, 3) menggunakan bekas DI untuk menguruskan kebergantungan kompleks, tetapi memberi perhatian kepada kesan prestasi dan kebergantungan bulat, 4) Amalan terbaik adalah bergantung kepada antara muka abstrak untuk mencapai gandingan longgar.

Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?Prestasi PHP: Adakah mungkin untuk mengoptimumkan aplikasi?May 14, 2025 am 12:04 AM

Ya, OptimizingaphpapplicationIspossibleandessential.1) pelaksanaanCachingUsingAputeDeducedeDataBaseload.2) OptimisedataTabaseseseshithindexing, eficientqueries, danConnectionPooling.3) EnhancecodeWithBuilt-Infungsi, EveringGlobalVariables

Pengoptimuman Prestasi PHP: Panduan TerbaikPengoptimuman Prestasi PHP: Panduan TerbaikMay 14, 2025 am 12:02 AM

ThekeystrategiestoSignificLantantlyboostphpapplicationperformanceare: 1) useopcodecachinglikLikeopcachetoreduceExecutionTime, 2) OptimizedataBaseInteractionsWithPreparedStatementsandProperindexing, 3) ConfigureWebserverserverLikenginxWithPmforbetterShipter.

Kontena Suntikan Ketergantungan PHP: Permulaan yang cepatKontena Suntikan Ketergantungan PHP: Permulaan yang cepatMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Suntikan ketergantungan berbanding pencari perkhidmatan di phpSuntikan ketergantungan berbanding pencari perkhidmatan di phpMay 13, 2025 am 12:10 AM

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Strategi Pengoptimuman Prestasi PHP.Strategi Pengoptimuman Prestasi PHP.May 13, 2025 am 12:06 AM

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

Pengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulPengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulMay 13, 2025 am 12:06 AM

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini