程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> ECMall的請求與系統跳轉

ECMall的請求與系統跳轉

編輯:關於PHP編程

ecmall是一個基於mvc模式框架系統,跟thinkphp有點像。先從ecmall的入口開始,ecmall入口文件upload/index.php、admin.php:

index.php啟動ecmall前台,啟動後則進入ecmall框架核心文件ecmall.php. ecmall.php相當於一個調度中心,接收不同的控制命令(app)以及命令的相關操作(funciton),接著對其進行分配處理。然後調度中心把這些命令(app)和方法(function) 傳到前台控制中心對應的具體控制器上。"控制器"接收到命令後,開始實施執行控制,接著把處理後的結果傳給view模板文件(模板命名規則:appname.fucname.html)。

其中控制器接收到命令執行過程中,可以調用調度中心的模型獲取方法&m()實例化一個模型,進行數據的curd操作。

index.php:

include(ROOT_PATH . '/eccore/ecmall.php');  
/* 啟動ECMall */  
ECMall::startup(array(  
    'default_app'   =>  'default',  
    'default_act'   =>  'index',  
    'app_root'      =>  ROOT_PATH . '/app',  
//加載系統所需要的基礎類  
    'external_libs' =>  array(  
        ROOT_PATH . '/includes/global.lib.php',  
        ROOT_PATH . '/includes/libraries/time.lib.php',  
        ROOT_PATH . '/includes/ecapp.base.php',  
        ROOT_PATH . '/includes/plugin.base.php',  
        ROOT_PATH . '/app/frontend.base.php',  
    ),  
));  

ecmall.php:

class ECMall  
{  
    /* 啟動 */  
    function startup($config = array())  
    {  
        /* 加載初始化文件 */  
        require(ROOT_PATH . '/eccore/controller/app.base.php');     //基礎控制器類  
        require(ROOT_PATH . '/eccore/model/model.base.php');   //模型基礎類  
  
        if (!emptyempty($config['external_libs']))  
        {  
            foreach ($config['external_libs'] as $lib)  
            {  
                require($lib);  
            }  
        }  
        /* 數據過濾 */  
        if (!get_magic_quotes_gpc())  
        {  
            $_GET   = addslashes_deep($_GET);  
            $_POST  = addslashes_deep($_POST);  
            $_COOKIE= addslashes_deep($_COOKIE);  
        }  
  
        /* 請求轉發 */  
        $default_app = $config['default_app'] ? $config['default_app'] : 'default';  
        $default_act = $config['default_act'] ? $config['default_act'] : 'index';  
  
        $app    = isset($_REQUEST['app']) ? trim($_REQUEST['app']) : $default_app;  
        $act    = isset($_REQUEST['act']) ? trim($_REQUEST['act']) : $default_act;  
  
        $app_file = $config['app_root'] . "/{$app}.app.php";  
        if (!is_file($app_file))  
        {  
            exit('Missing controller');  
        }  
  
        require($app_file);  
        define('APP', $app);  
        define('ACT', $act);  
        $app_class_name = ucfirst($app) . 'App';  
  
        /* 實例化控制器 */  
        $app     = new $app_class_name();  
        c($app);  
        $app->do_action($act);        //轉發至對應的Action  
        $app->destruct();  
    }  
}  
  
//根據app後面所跟的參數,來判斷加載對應的控制器類文件,類文件在app文件夾下,對應名稱與參數相同,act後面的參數是對應控制器中的操作方法處理請求  
//而對應的動作中,會有一個判斷: if (!IS_POST){請求前的頁面內容的顯示}else{請求後的表單處理及處理完成後的頁面跳轉}。其中包括使用json處理數據  
//這裡需要提出的是:在控制器中:   
$this->assign('order', $order_info);      //向模板頁傳遞所需要參數的值       
$this->display('buyer_order.confirm.html');//跳轉到哪個頁面  
$this->json_result($new_data, 'confirm_order_successed');//使用json的方式傳遞參數,然後在頁面上使用javascript處理請求的跳轉 

由於這個機制,ECMALL中可以自行添加APP,模塊,插件等。如何在ECMALL中添加自己的APP呢?比如訪問地址為http://xxx.com/index.php?app=hello

  1. 在ecmall的app目錄下建立一個新的名稱為hello.app.php的應用文件
  2. 在languages的sc-utf8的目錄下建立對應的語言文件 hello.lang.php ,並返回數組 (若不建立,會出錯)
  3. hello.app.php中的類為HelloApp,並繼承FrontendApp
  4. 此為前端程序,在ecmall的themes/mall/default文件夾下建立一個hello.index.html模板文件
  5. 重寫默認的index方法,可以使用模板的方式輸出:
  6. $h = "Hello";  
        $this->assign("h",$h);  
        $this->display('hello.index.html');  
    
  7. 編寫其他方法比如訪問地址為http://xxx.com/index.php?app=hello&act=test

這個URL訪問的名為hello的app類中的test方法,其實http://xxx.com/index.php?app=hello默認訪問的是index方法。

//1、在upload/app/下建立一個test.app.php  
<?php  
class TestApp extends MallbaseApp  
{  
	public function index()  
	{  
		$str="hello world";  
		$uc_first= ucfirst($str).'<br>';  
		$uc_words=ucwords($str).'<br>';  
           
    	$Model=&m('goods');  
    	$res=$Model->get(27);  
   		print_r($res);  
       
       
     	$this->assign('ss',$uc_first);  
    	$this->assign('sss',$uc_words);  
     	$this->display('test.index.html');   
	}  
}     
?>  
   
//2、在upload/languages/sc-utf-8/下建立一個test.lang.php  
<?php  
	return array();             
?>  
   
//  3、在upload/themes/mall/default/建立一個test.index.html  

admin.php這是啟動ecmall後台。啟動後也進入ecmall框架核心文件ecmall.php。之後的操作跟前台差不多,區別是調度中心把命令傳給"後台"控制中心。但控制器調用的模型是同一個模型中心。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved