版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Zencart二次開發(fā)資料(由zencart-magento論壇整理)數(shù)據(jù)庫分析模塊機(jī)制分析admin后臺(tái)管理目錄cache緩存目錄docs文檔目錄download用于存放下載類商品editors所見即所得編輯器email電子郵件模版目錄extras測(cè)試文件目錄images商品圖片目錄includes前臺(tái)media媒體類商品目錄pub公用目錄(空)includes里面的目錄:auto_loaders自動(dòng)加載的腳本classes主要的類函數(shù)extra_cart_actions空extra_configures第三方模塊設(shè)置文件extra_datafiles第三方模塊數(shù)據(jù)表名定義functions
2、主要的功能函數(shù)index_filters過濾功能init_includes初始化功能languages語言文件包目錄modules所有的模塊目錄templates模版目錄zencart與oscommerce在某中意義上很相似,可以看做是一個(gè)升級(jí)版,兩者之間共用了很多相同的函數(shù)或類,不同的是他們是按照不同的方式組織在一起zencart采用摸板,單一文件index.php入口,后面跟參數(shù),參數(shù)決定顯示的內(nèi)容,基本上網(wǎng)頁變換的部分只是中間的主區(qū)域重點(diǎn)介紹幾個(gè)文件includes目錄,該目錄無疑是zencart的核心(前臺(tái)),通常情況下index.php第一句話則是包含include目錄下的appli
3、cation_top.php文件,如:require(includes/application_top.php);在該系統(tǒng)中application_top.php負(fù)責(zé)的是初始化工作,比如加載配置文件include(includes/configure.php);如果系統(tǒng)程序沒檢測(cè)到該文件的存在則會(huì)嘗試調(diào)用安裝文件,然后它會(huì)自動(dòng)遍歷include/extra_configures下的配置文件并包含進(jìn)來在加載了系統(tǒng)配置文件以后接下來是一個(gè)非常重要的文件,這也導(dǎo)致了zencart和oscommerce感覺上很大不同的原因(事實(shí)上都一回事)首先調(diào)用一個(gè)文件require(includes/initsy
4、stem.php);在initsystem.php中最先加載include/auto_loaders/config.core.php,config.core.php是一一個(gè)二圍數(shù)組$autoLoadConfig,即以數(shù)組的形式保存文件的信息供后面文件調(diào)用,然后系統(tǒng)會(huì)接著加載完include/auto_loaders目錄下所有文件名匹配$loaderPrefix(默認(rèn)為config)的文件上面程序執(zhí)行完以后就可以加載自動(dòng)執(zhí)行程序了require(includes/autoload_func.php);在這里它會(huì)遍歷$autoLoadConfig數(shù)組,它最終執(zhí)行的效果會(huì)包含所有必須用到的函數(shù)或者類
5、的定義,還有變量的初始化,config.core.php里面的注釋比較清楚比如$autoLoadConfig0=array(autoType=class,loadFile=class.base.php);在autoload_func.php里面執(zhí)行完以后的效果就是require(DIR_WS_CLASSES.class.base.php),事實(shí)上本人是不贊成這種寫法,大部分的初始化化工作是通過包含init_includes目錄下的文件來實(shí)現(xiàn)的如:$autoLoadConfig110=array(autoType=init_script,loadFile=init_templates.php);
6、它在執(zhí)行完autoload_func.php文件后就已經(jīng)加載了init_includes目錄下的init_templates.php文件,由于里面包含的文件太多,在這就不做一一介紹了下面我來介紹下zencart是怎么根據(jù)摸版把內(nèi)容顯示出來的require(includes/application_top.php);初始化所以需要用到的公共信息以后接下來就應(yīng)該是顯示了在index.php的第29行有句$directory_array=$template-get_template_part($code_page_directory,/Aheader_php/);由于所有初始化工作已經(jīng)完成,所有我們
7、就可以在上面的文件找到他們的定義,如$autoLoadConfig100=array(autoType=classInstantiate,className=template_func,objectName=template);在這里就定義了$template=newtemplate_func();,然后$code_page_directory變量的定義是在init_includes/init_sanitize.php文件中定義在這里必須要對(duì)class/template_func.php中定義的template_func類比較熟悉,在改類中主要定義了兩個(gè)方法get_template_dir()
8、和get_template_part();這兩個(gè)方法在zencart的摸版中起到了決定性的作用我簡(jiǎn)單的說下get_template_dir方法functionget_template_dir($template_code,$current_template,$current_page,$template_dir,$debug=false)它定義了5個(gè)參數(shù),第一個(gè)參數(shù)一般是個(gè)文件名,它是用來判斷后兩個(gè)參數(shù)組成的目錄中有沒有匹配$template_code的這個(gè)文件,該類復(fù)寫了默認(rèn)的系統(tǒng)函數(shù)file_exists所以很多初學(xué)者可能會(huì)比較迷惑functionget_template_dir($tem
9、plate_code,$current_template,$current_page,$template_dir,$debug=false)/echotemplate_default/.$template_dir.=.$template_code;if($this-file_exists($current_template.$current_page,$template_code)return$current_template.$current_page./;elseif($this-file_exists(DIR_WS_TEMPLATES.template_default/.$current
10、_page,ereg_replace(/,$template_code),$debug)returnDIR_WS_TEMPLATES.template_default/.$current_page;elseif($this-file_exists($current_template.$template_dir,ereg_replace(/,$template_code),$debug)return$current_template.$template_dir;elsereturnDIR_WS_TEMPLATES.template_default/.$template_dir;/return$c
11、urrent_template.$template_dir;/*如includes/templates/zccn/indexincludes/templates/template_default/indexincludes/templates/zccn/commonincludes/templates/template_default/common*/get_template_part()方法有兩個(gè)函數(shù),第一個(gè)參數(shù)是文件目錄,第二個(gè)參數(shù)是匹配的條件,執(zhí)行的結(jié)果是包含該目錄下所有文件名匹配這個(gè)條件的文件比如$directory_array=$template-get_template_part(
12、$code_page_directory,header_php/);這句話執(zhí)行的結(jié)果就是返回目錄下$code_page_directory所有文件名以header_php開頭的文件如此時(shí)的url( HYPERLINK http:/localhost/zencart/index.php?main_page=product_info&cPath=49_27&products_id=83 http:/localhost/zencart/index.php?main_page=product_info&cPath=49_27&products_id=83)你現(xiàn)在應(yīng)該查看init_sanitize.ph
13、p中$code_page_directory的定義此時(shí)的$code_page_directory的值應(yīng)該是includes/modules/product_info/所以它就應(yīng)該包含該目錄下所有以header_php開頭的文件,在這里好象就只有一個(gè)header_php.php$directory_array=$template-get_template_part($code_page_directory,/Aheader_php/);這個(gè)包含文件其實(shí)是初始化前臺(tái)不同頁面顯示所需要用到的變量函數(shù),主要是初始化數(shù)據(jù)庫的東西,因?yàn)槊總€(gè)頁面需要的數(shù)據(jù)資料都有可能不同,所以index.php?main_
14、page=index當(dāng)main_page的值不同是在includes/modules/目錄下都會(huì)有個(gè)對(duì)應(yīng)的目錄,這里是index目錄只要知道了這兩個(gè)方法的用法,你就會(huì)知道模板文件都是怎么顯示出來的了再來解釋一require($template-get_template_dir(html_header.php,DIR_WS_TEMPLATE,$current_page_base,common)./html_header.php);假設(shè)當(dāng)前 HYPERLINK http:/localhost/zencart/index.php?main_page=index&cPath=48 http:/loca
15、lhost/zencart/index.php?main_page=index&cPath=48DIR_WS_TEMPLATE定義是在includes/init_templates.php中定義define(DIR_WS_TEMPLATE,DIR_WS_TEMPLATES.$template_dir./);,因?yàn)槲椰F(xiàn)在用的是默認(rèn)的zccn模板所以現(xiàn)在的DIR_WS_TEMPLATE=includes/templates/zccn/$current_page_base在這里已經(jīng)就是index上面已經(jīng)解釋了$template-get_template_dir()的方法了程序會(huì)依次在includes
16、/templates/zccn/indexincludes/templates/template_default/indexincludes/templates/zccn/commonincludes/templates/template_default/common這四個(gè)目錄下找html_header.php,在這里,最終在template_defaultcommon目錄下找到html_header.php到這里就可以自己寫摸板文件了,因?yàn)?template-get_template_dir()是按順序找的,所以你只要在你的模板文件中存在該文件即可zencart的sidebox機(jī)制zenca
17、rt的左右邊欄很有特色,由一塊一塊的sidebox拼合起來的,在模板的sidebox文件夾建立一個(gè)sidebox程序,登陸管理后臺(tái)后,選擇外觀控制,系統(tǒng)會(huì)自動(dòng)檢測(cè)到新增加的sidebox程序,并提醒你操作。并把所有的sidebox配置信息存儲(chǔ)在layout_boxes的表格中。程序調(diào)用邊欄是通過includes/modules目錄下的columneft.php,和column_right.php控制。分析下源碼也非常簡(jiǎn)單:首頁查詢layout_boxes數(shù)據(jù)表,檢索出在左欄和或右欄顯示的所有sidebox,再直接require進(jìn)來layout_box_name字段標(biāo)記的sidebox名稱。隨便
18、打開一個(gè)sidebox的源代碼,如系統(tǒng)自帶的includes/modules/sideboxes/banner_box.php,banner_box.php只要用來獲取sidebox顯示所要的數(shù)據(jù),再通過require($template-get_template_dir(tpl_banner_box.php,DIR_WS_TEMPLATE,$current_page_base,sideboxes),載入顯示這個(gè)sidebox的模板,其實(shí)這個(gè)所謂的模板就是生成一個(gè)$content的字符串,然后再require($template-get_template_dir($column_box_def
19、ault,DIR_WS_TEMPLATE,$current_page_base,common)./.$column_box_default)再用一個(gè)顯示sidebox的公共模板,在$column_box_default中打印出$content的內(nèi)容,這樣一個(gè)sidebox就顯示完成了!如何添加一個(gè)自己的sidebox?其實(shí)很簡(jiǎn)單,在includes/modules/sideboxes/模板目錄/建立一個(gè)文件,就是一個(gè)sidebox了,可以在后臺(tái)控制是否顯示在默認(rèn)的左右邊欄和排序。在這個(gè)文件中就輸出任何內(nèi)容了,當(dāng)然可以按照標(biāo)準(zhǔn)的模式,再在includes/templates/模板目錄/sideb
20、oxes下建立一個(gè)模板文件require進(jìn)來,盡量做到M/V的分離,這樣以后修改也會(huì)比較方便!在zencart左側(cè)欄目中,每個(gè)小模塊都是用box方式顯示的。zencart函數(shù)zen_get_box_id()主要是對(duì)box_id進(jìn)行處理.while(strstr($box_id,_)$box_id=str_replace(_,”,$box_id);$box_id=str_replace(.php,$box_id);return$box_id;看的出來,他的主要作用是除去_和.phquot;的后綴,形成一個(gè)新的字符串,形成的注釋中會(huì)有!-/bof:/-quot;style=width:quotgt
21、;quotgtlt;?phpecho$title;?氏/山3借助$box_id還可以形成樣式html的id前臺(tái)首頁分析Index.php加載需要的所有文件,簡(jiǎn)稱入口文件。/*/main_template_vars.php會(huì)根據(jù)$_GETmain_page顯示不同的模板require($template-get_template_dir(main_template_vars.php,DIR_WS_TEMPLATE,$current_page_base,common)./main_template_vars.php);后臺(tái)首頁分析首部導(dǎo)航菜單欄機(jī)制index.php-header.php-head
22、er_navigation.php-includes/boxes/*.dhtml.php-functionzen_draw_admin_box($za_heading,$za_contents)二次開發(fā)導(dǎo)航實(shí)例主要改動(dòng)tpl_main_page.php(改后非zencart的tpl_main_pagephp,為了繼承系統(tǒng)功能應(yīng)用,需要為tpl_main_pages.php提供頁面參數(shù)判斷轉(zhuǎn)入功能。但還是有indexphp入口文件引導(dǎo))定義整個(gè)頁面樣式,可以定義自己的整個(gè)風(fēng)格和數(shù)據(jù)庫操作(更改了zencart的MVC模式,使頁面和業(yè)務(wù)邏輯處于同一個(gè)請(qǐng)求頁面),如果需要用到zencart本身的功能
23、,則重新定義一個(gè)tpl_main_pagesphp(屬于zencart的tpl_main_page.php的重命名同文件-至少保留$body_code中心部位,由自定義tpl_main_pagephp頁面轉(zhuǎn)入)。Tpl_headerphp和tpl_footerphp可以自定義其頁面,一般還有自定義左右分欄tpl_left.php和tpl_right.php(以上文件供自定義tpl_main_pagephp引入使用)經(jīng)過頁面改動(dòng),自定義頁面上的url基本硬編碼路徑Zencart類和函數(shù)及特別變量分析/*獲取模板目錄$page_directory下,含$template_part并后綴為php的文
24、件*/Functionget_template_part($page_directory,$template_part,$file_extension=php)$directory_array=array();if($dir=dir($page_directory)while($file=$dir-read()$file_extension&if(!is_dir($page_directory$file)if(substr($file,strrpos($file,)preg_match($template_part,$file)$directory_array=$file;sort($dire
25、ctory_array);$dir-close();return$directory_array;2/*獲取當(dāng)前模板($current_template/$current_page或者$current_template/$template_dir或者DIR_WS_TEMPLATES.template_default/.$template_dir組成的模板目錄文件)含$template_code的文件的目錄*/functionget_template_dir($template_code,$current_template,$current_page,$template_dir,$debug=f
26、alse)/echotemplate_default/.$template_dir.=.$template_code;if($this-file_exists($current_template.$current_page,$template_code)return$current_template.$current_page./;elseif($this-file_exists(DIR_WS_TEMPLATES.template_default/.$current_page,preg_replace(/,$template_code),$debug)returnDIR_WS_TEMPLATE
27、S.template_default/.$current_page;elseif($this-file_exists($current_template.$template_dir,preg_replace(/,$template_code),$debug)return$current_template.$template_dir;elsereturnDIR_WS_TEMPLATES.template_default/.$template_dir;/return$current_template.$template_dir;3*methodtodobindvariablestoaquery將字
28、符串$sql中的$bindVarString綁定為值$bindVarVaue且類型$bindVarType*/functionbindVars($sql,$bindVarString,$bindVarValue,$bindVarType,$debug=false)$bindVarTypeArray=explode(:,$bindVarType);$sqlNew=$this-getBindVarValue($bindVarValue,$bindVarType);$sqlNew=str_replace($bindVarString,$sqlNew,$sql);return$sqlNew;/*傳遞參
29、數(shù)(&$rent_page_number,每頁數(shù)量$max_rows_per_page,原始&$sql_query要顯示的結(jié)果總數(shù)&$query_num_rows),返回新&b$sql_query.=limit.$offset.,.$max_rows_per_page和$query_num_rows以及$num_pages、$offset*/functionsplitPageResults(&$current_page_number,$max_rows_per_page,&$sql_query,&$query_num_rows)$reviews_count=$db-Execute($sql);
30、$query_num_rows=$reviews_count-fieldstotal;$num_pages=ceil($query_num_rows/$max_rows_per_page);if($current_page_number$num_pages)$current_page_number=$num_pages;$offset=($max_rows_per_page*($current_page_number-1);/fixoffseterroronsomeversionsif($offset區(qū)域插入javascript函數(shù)如下:functiongetXMLRequester()var
31、xmlhttp_request=false;tryif(window.ActiveXObject)for(vari=5;i;i-)tryif(i=2)xmlhttp_request=newActiveXObject(Microsoft.XMLHTTP);elsexmlhttp_request=newActiveXObject(Msxml2.XMLHTTP.+i+.0);xmlhttp_request.setRequestHeader(Content-Type,text/xml);xmlhttp_request.setRequestHeader(Content-Type,gb2312);brea
32、k;catch(e)xmlhttp_request=false;elseif(window.XMLHttpRequest)xmlhttp_request=newXMLHttpRequest();if(xmlhttp_request.overrideMimeType)xmlhttp_request.overrideMimeType(text/xml);catch(e)xmlhttp_request=false;returnxmlhttp_request;functionIDRequest(n)/定義收到服務(wù)器的響應(yīng)后需要執(zhí)行的javascript函數(shù)url=n+document.getEleme
33、ntByld(163id)value;定義網(wǎng)址參數(shù)xmlhttp_request=getXMLRequester();調(diào)用創(chuàng)建XMLHttpRequest的函數(shù)xmlhttp_request.onreadystatechange=doContents;/調(diào)用doContents函數(shù)xmlhttp_requestopen(GET,url,true);xmlhttp_requestsend(null);functiondoContents()if(xmlhttp_requestreadyState=4)/收到完整的服務(wù)器響應(yīng)if(xmlhttp_request.status=200)/HTTP服務(wù)
34、器響應(yīng)的值OKdocumentgetElementByld(message)innerHTML=xmlhttp_requestresponseText;/將服務(wù)器返回的字符串寫到頁面中ID為message的區(qū)域elsealert(http_request.status);在vbody區(qū)域建立一個(gè)文本框,id為163id再建一個(gè)id為messsge的空白區(qū)域用來顯示返回字符串(也可以通過javascript函數(shù)截取一部分字符串顯示):vdivid=messagev/div這樣,一個(gè)基于AJAX技術(shù)的用戶名檢測(cè)頁面就做好了,不過這個(gè)頁面將返回服務(wù)器響應(yīng)生成頁面的所有字符串,當(dāng)然還可以對(duì)返回的字符串
35、進(jìn)行一些操作,便于應(yīng)用到不同的需要當(dāng)中。實(shí)例二:以XMLDocument對(duì)象方式返回響應(yīng)來驗(yàn)證金山通行證帳號(hào)是否存在在上面的例子中,當(dāng)服務(wù)器對(duì)HTTP請(qǐng)求的響應(yīng)被收到后,我們會(huì)調(diào)用請(qǐng)求對(duì)象的reponseText屬性。該屬性包含了服務(wù)器返回響應(yīng)文件的內(nèi)容?,F(xiàn)在我們以XMLDocument對(duì)象方式返回響應(yīng),此時(shí)將不再需要reponseText屬性而使用responseXML屬性。首先登陸金山通行證注冊(cè)頁面,我們發(fā)現(xiàn)金山通行證用戶名的檢測(cè)方式為:/ksgweb/jsp/login/uid.jsp?uid二用戶名,并且返回XML數(shù)據(jù):isExistedUid-2當(dāng)result值為-1時(shí)表示此用戶名已
36、被注冊(cè),當(dāng)result值為-2時(shí)表示此用戶名尚未注冊(cè),因此通過對(duì)result值的判斷可以知道用戶名是否被注冊(cè)。對(duì)上例代碼進(jìn)行修改:首先找到document.getElementById(message).innerHTML=xmlhttp_request.responseText;改為:varresponse=xmlhttp_request.responseXML.documentElement;varresult=response.getElementsByTagName(result)0.firstChild.data;/返回result節(jié)點(diǎn)數(shù)據(jù)if(result=-2)document.
37、getElementById(message).innerHTML=用戶名+document.getElementByld(163id).value+尚未注冊(cè);elseif(result=-1)document.getElementById(message).innerHTML=對(duì)不起,用戶名+document.getElementByld(163id).value+已經(jīng)注冊(cè);通過以上兩個(gè)實(shí)例說明了AJAX的客戶端基礎(chǔ)應(yīng)用,采用的是網(wǎng)易和金山現(xiàn)成的服務(wù)器端程序,當(dāng)然為了開發(fā)合適自己頁面的程序,還需要對(duì)自己編寫服務(wù)器端程序,這設(shè)計(jì)到程序語言及數(shù)據(jù)庫的操作,對(duì)于有一定程序基礎(chǔ)的讀者一定不是很難的事
38、情,本文著重討論了客戶端AJAX的應(yīng)用體驗(yàn),廣大讀者可以根據(jù)本文講的原理結(jié)合各種樣式表現(xiàn)手法作出絢麗多彩的應(yīng)用,希望本文能夠起到拋磚引玉的作用。附錄(一)HTTP1.1支持的狀態(tài)代碼Continue初始的請(qǐng)求已經(jīng)接受,客戶應(yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求的其余部分SwitchingProtocols服務(wù)器將遵從客戶的請(qǐng)求轉(zhuǎn)換到另外一種協(xié)議OK一切正常,對(duì)GET和POST請(qǐng)求的應(yīng)答文檔跟在后面。Created服務(wù)器已經(jīng)創(chuàng)建了文檔,Location頭給出了它的URL。Accepted已經(jīng)接受請(qǐng)求,但處理尚未完成。Non-AuthoritativeInformation文檔已經(jīng)正常地返回,但一些應(yīng)答頭可能不正確,因
39、為使用的是文檔的拷貝NoContent沒有新文檔,瀏覽器應(yīng)該繼續(xù)顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個(gè)狀態(tài)代碼是很有用的ResetContent沒有新的內(nèi)容,但瀏覽器應(yīng)該重置它所顯示的內(nèi)容。用來強(qiáng)制瀏覽器清除表單輸入內(nèi)容PartialContent客戶發(fā)送了一個(gè)帶有Range頭的GET請(qǐng)求,服務(wù)器完成了它MultipleChoices客戶請(qǐng)求的文檔可以在多個(gè)位置找到,這些位置已經(jīng)在返回的文檔內(nèi)列出。如果服務(wù)器要提出優(yōu)先選擇,則應(yīng)該在Location應(yīng)答頭指明。MovedPermanently客戶請(qǐng)求的文檔在其他地方,新的URL在Location頭中
40、給出,瀏覽器應(yīng)該自動(dòng)地訪問新的URL。Found類似于301,但新的URL應(yīng)該被視為臨時(shí)性的替代,而不是永久性的。SeeOther類似于301/302,不同之處在于,如果原來的請(qǐng)求是POST,Location頭指定的重定向目標(biāo)文檔應(yīng)該通過GET提取NotModified客戶端有緩沖的文檔并發(fā)出了一個(gè)條件性的請(qǐng)求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務(wù)器告訴客戶,原來緩沖的文檔還可以繼續(xù)使用。UseProxy客戶請(qǐng)求的文檔應(yīng)該通過Location頭所指明的代理服務(wù)器提取307TemporaryRedirect和302(Found)相同。許多瀏覽器會(huì)
41、錯(cuò)誤地響應(yīng)302應(yīng)答進(jìn)行重定向,即使原來的請(qǐng)求是POST,即使它實(shí)際上只能在POST請(qǐng)求的應(yīng)答是303時(shí)才能重定向。由于這個(gè)原因,HTTP1.1新增了307,以便更加清除地區(qū)分幾個(gè)狀態(tài)代碼:當(dāng)出現(xiàn)303應(yīng)答時(shí),瀏覽器可以跟隨重定向的GET和POST請(qǐng)求;如果是307應(yīng)答,則瀏覽器只能跟隨對(duì)GET請(qǐng)求的重定向。BadRequest請(qǐng)求出現(xiàn)語法錯(cuò)誤。Unauthorized客戶試圖未經(jīng)授權(quán)訪問受密碼保護(hù)的頁面。應(yīng)答中會(huì)包含一個(gè)WWW-Authenticate頭,瀏覽器據(jù)此顯示用戶名字/密碼對(duì)話框,然后在填寫合適的Authorization頭后再次發(fā)出請(qǐng)求。Forbidden資源不可用。NotFound無法找到指定位置的資源MethodNotAllowed請(qǐng)求方法(GET、POS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度展覽館場(chǎng)地租賃合同范本11篇
- 二零二五年度環(huán)保型民爆物品供應(yīng)商合作協(xié)議4篇
- 2025年度電梯安裝與綠色建筑認(rèn)證合作協(xié)議4篇
- 頭皮護(hù)理產(chǎn)品配方優(yōu)化-深度研究
- 2024版酒店物業(yè)綜合服務(wù)合作合同版B版
- 2025年度商場(chǎng)店面窗簾改造合同3篇
- 2025年度新型木材綠色采購與銷售合同范本4篇
- 2025年度智能儲(chǔ)罐租賃服務(wù)合同模板4篇
- 二零二五年度商業(yè)地產(chǎn)物業(yè)管理與品牌合作合同4篇
- 二零二五版門衛(wèi)信息化服務(wù)與安保培訓(xùn)承包3篇
- 南安市第三次全國文物普查不可移動(dòng)文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識(shí)培訓(xùn)課件
- 項(xiàng)目前期選址分析報(bào)告
- 急性肺栓塞搶救流程
- 《統(tǒng)計(jì)學(xué)-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時(shí)間序列分析和預(yù)測(cè)
- 《形象價(jià)值百萬》課件
- 紅色文化教育國內(nèi)外研究現(xiàn)狀范文十
- 中醫(yī)基礎(chǔ)理論-肝
- 小學(xué)外來人員出入校門登記表
- 《土地利用規(guī)劃學(xué)》完整課件
- GB/T 25283-2023礦產(chǎn)資源綜合勘查評(píng)價(jià)規(guī)范
評(píng)論
0/150
提交評(píng)論