天天看點

ecshop的smarty庫還原成smarty原生庫方法

内部邀請碼:C8E245J (不寫邀請碼,沒有現金送)

國内私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統挂牌的公衆公司,股票代碼為430719,為“中國PE第一股”,市值超1000億元。 

--------------------------------------------------------

寫過ecshop模闆的人都曉得,他們是用所謂的dwt的檔案來嵌套lbi檔案進行模闆的彼此調用。在咱們調取資料的時分,ecshop的默許模闆隻提供給咱們幾個簡略的句子進行調用,那麼有沒有辦法能夠把這個精簡的cls_template類添加其他的句子呢?

首要斷定版别:ECShop v2.7.3

通過近一天對ecshop程式的研讨,發現這個所謂的cls_template類,其實是一個精簡版的smarty,而且值得幸虧的是,這個cls_template類沒有包括其他的檔案。那麼咱們完全能夠将官方smarty直接拿來用。斷定了這一點,剩餘的就是看ECShop在哪裡運用這個cls_template類了。

翻開index.php,咱們發現他裡邊有這樣一句話:

require(dirname(__FILE__) . '/includes/init.php');

是以咱們找到這個檔案,找到創立的那個cls_template類,代碼如下:

require(ROOT_PATH . 'includes/cls_template.php');

$smarty = new cls_template;

這裡發現他們創立了一個smarty的一個目标,其實咱們寫的模闆中一切能用的标簽都是用這個的。

我這裡不說廢話了,直接給辦法了。

仿制一份init.php 為 init_x.php ,在根目錄的 index.php 中,将:

改為:

require(dirname(__FILE__) . '/includes/init_x.php');

即可。原因是還有其他地方運用了init.php,直接修正的話,會形成不行預知的成果。

如今去官方下載下傳一個smarty模闆,這裡用的是2.6的版别(3.1的版别試過,有錯。估量ecshop其時用的是2.6相容的,别問我為啥。),放在include的檔案夾裡,而且在init_x.php中包括當時的原生smarty類而且用Smarty類交換之前的cls_template類,代碼如下:

/* 獲得當時ecshop地點的根目錄 */

define('ROOT_PATH', str_replace('includes/init_x.php', '', str_replace('\\', '/', __FILE__)));

/* 創立 Smarty 目标。*/

require(ROOT_PATH . 'includes/Smarty-2.6.27/libs/Smarty.class.php');

$smarty = new Smarty;

$smarty->cache_lifetime = $_CFG['cache_time'];

$smarty->template_dir = ROOT_PATH . 'themes/' . $_CFG['template'];

$smarty->cache_dir = ROOT_PATH . 'temp/caches';

$smarty->compile_dir = ROOT_PATH . 'temp/compiled';

這裡注重途徑和類名的修正。還有就是細心檢視smarty類需求的那幾個變量和路近能否都存在。

持續往下檢視:

if ((DEBUG_MODE & 2) == 2)

{

$smarty->direct_output = true; //我記住這個變量smarty如同沒有

$smarty->force_compile = true;

}

else

$smarty->direct_output = false; //

$smarty->force_compile = false;

看這一段,檢視smarty類裡能否存在這幾個變量,沒有就删掉。

斷定無誤後,能夠回到根目錄的index.php檔案上了。

之前,咱們将init.php 換成了init_x.php,這僅僅第一步。下面咱們要持續修正模闆,将一切的dwt檔案換成tpl檔案(回憶中是兩處)。

如今進入themes檔案夾,将index.dwt檔案修正為index.tpl檔案。

如今咱們來翻開debug,看看能不能進行smarty調試,并運用其他的smarty标簽了。(這裡闡明一下,smarty檔案夾需求有可運轉的權限。)

還記住剛剛你屏蔽的那兩行smarty不存在的變量麼?那個是調試。咱們細心對照發現,2.6的smarty調試的變量名稱為debuging。

咱們将方才:

$smarty->direct_output = false;

中的direct_output,修正為debuging,而且改為true就能夠彈出smarty官方的調試視窗了