EcShop開發手冊

Ecshop文件結構javascript

ecshop文件架構說明 

ECShop 結構圖及各文件相應功能介紹 
ECShop upload 的目錄 
┣ activity.php 活動列表 
┣ affiche.php 廣告處理文件 
┣ affiliate.php 生成商品列表 
┣ article.php 文章內容 
┣ article_cat.php文章分類 
┣ auction.php 拍賣前臺文件 
┣ brand.php 品牌列表 
┣ captcha.php 生成驗證碼 
┣ catalog.php 列出因此分類及品牌 
┣ category.php 商品分類 
┣ comment.php 提交用戶評論 
┣ compare.php 商品比較程序 
┣ cycle_image.php 輪播圖片程序 
┣ feed.php RSS Feed 生成程序 
┣ flow.php 購物流程 
┣ gallery.php 商品相冊 
┣ goods.php 商品詳情 
┣ goods_script.php 生成商品列表 
┣ group_buy.php 團購商品前臺文件 
┣ index.php 首頁文件 
┣ myship.php 支付配送DEMO 
┣ pick_out.php 選購中心 
┣ receive.php 處理收回確認的頁面 
┣ region.php 地區切換程序 
┣ respond.php 支付響應頁面 
┣ robots.txt 
┣ search.php 搜索程序 
┣ sitemaps.php google sitemap 文件 
┣ snatch.php 奪寶奇兵前臺頁面 
┣ tag_cloud.php 標籤雲 
┣ topic.php 專題前臺 
┣ user.php 會員中心 
┣ vote.php 調查程序 
┣ wholesale.php 批發前臺文件 
┣ admin文件夾 
┃ ┣ account_log.php 管理中心賬戶變更記錄 
┃ ┣ admin_logs.php 記錄管理員操做日誌 
┃ ┣ ads.php 廣告管理程序 
┃ ┣ adsense.php 站外JS投放的統計程序 
┃ ┣ ad_position.php廣告位置管理程序 
┃ ┣ affiliate.php 程序說明 
┃ ┣ affiliate_ck.php 程序說明 
┃ ┣ agency.php 管理中心辦事處管理 
┃ ┣ area_manage.php 地區列表管理文件 
┃ ┣ article.php 管理中心文章處理程序文件 
┃ ┣ articlecat.php 文章分類管理程序 
┃ ┣ article_auto.php 
┃ ┣ attention_list.php 
┃ ┣ attribute.php 屬性規格管理 
┃ ┣ auction.php 管理中心拍賣活動管理 
┃ ┣ bonus.php 紅包類型的處理 
┃ ┣ brand.php管理中心品牌管理 
┃ ┣ captcha_manage.php 
┃ ┣ card.php 賀卡管理程序 
┃ ┣ category.php 商品分類管理程序 
┃ ┣ check_file_priv.php 系統文件檢測 
┃ ┣ comment_manage.php 用戶評論管理程序 
┃ ┣ convert.php 轉換程序 
┃ ┣ cron.php 計劃任務 
┃ ┣ database.php 數據庫管理 
┃ ┣ ebao_commend.php 易寶推薦 
┃ ┣ edit_languages.php 管理中心語言項編輯(前臺語言項) 
┃ ┣ email_list.php 郵件列表管理 
┃ ┣ favourable.php 管理中心優惠活動管理 
┃ ┣ flashplay.php 
┃ ┣ flow_stats.php 綜合流量統計 
┃ ┣ friend_link.php 友情連接管理 
┃ ┣ gen_goods_script.php 生成顯示商品的js代碼 
┃ ┣ get_password.php 找回管理員密碼 
┃ ┣ goods.php 商品管理程序 
┃ ┣ goods_auto.php 
┃ ┣ goods_batch.php 商品批量上傳、修改 
┃ ┣ goods_booking.php 缺貨處理管理程序 
┃ ┣ goods_export.php 
┃ ┣ goods_type.php 商品類型管理程序 
┃ ┣ group_buy.php 管理中心團購商品管理 
┃ ┣ guest_stats.php 客戶統計 
┃ ┣ index.php 控制檯首頁 
┃ ┣ integrate.php 第三方程序會員數據整合插件管理程序 
┃ ┣ magazine_list.php 
┃ ┣ mail_template.php 管理中心模版管理程序 
┃ ┣ message.php 管理中心管理員留言程序 
┃ ┣ navigator.php 

┃ ┣ order.php 訂單管理 
┃ ┣ order_stats.php 訂單統計 
┃ ┣ pack.php 包裝管理程序 
┃ ┣ payment.php 支付方式管理程序 
┃ ┣ picture_batch.php 圖片批量處理程序 
┃ ┣ privilege.php 管理員信息以及權限管理程序 
┃ ┣ sale_general.php 銷售概況 
┃ ┣ sale_list.php 銷售明細列表程序 
┃ ┣ sale_order.php 商品銷售排行 
┃ ┣ searchengine_stats.php 搜索引擎關鍵字統計 
┃ ┣ search_log.php 
┃ ┣ shipping.php 配送方式管理程序 
┃ ┣ shipping_area.php 配送區域管理程序 
┃ ┣ shophelp.php 幫助信息管理程序 
┃ ┣ shopinfo.php 網店信息管理頁面 
┃ ┣ shop_config.php 管理中心商店設置 
┃ ┣ sitemap.php 站點地圖生成程序 
┃ ┣ sms.php 短信模塊 之 控制器 
┃ ┣ snatch.php 奪寶奇兵管理程序 
┃ ┣ sql.php sql管理程序 
┃ ┣ tag_manage.php 後臺標籤管理 
┃ ┣ template.php 管理中心模版管理程序 
┃ ┣ topic.php 專題管理 
┃ ┣ users.php 會員管理程序 
┃ ┣ users_order.php 會員排行統計程序 
┃ ┣ user_account.php 會員賬目管理(包括預付款,餘額) 
┃ ┣ user_msg.php 客戶留言 
┃ ┣ user_rank.php 會員等級管理程序 
┃ ┣ view_sendlist.php 
┃ ┣ virtual_card.php 虛擬卡商品管理程序 
┃ ┣ visit_sold.php 訪問購買比例 
┃ ┣ vote.php 調查管理程序 
┃ ┣ wholesale.php 管理中心批發管理 
┃ ┣ help 的目錄 後臺操做幫助文件 
┃ ┣ images 的目錄 
┃ ┣ includes 的目錄 
┃ ┃ ┣ cls_exchange.php 後臺自動操做數據庫的類文件 
┃ ┃ ┣ cls_google_sitemap.php Google sitemap 類 
┃ ┃ ┣ cls_phpzip.php ZIP 處理類 
┃ ┃ ┣ cls_sql_dump.php 數據庫導出類 
┃ ┃ ┣ inc_menu.php 管理中心菜單數組 
┃ ┃ ┣ init.php 管理中心公用文件 
┃ ┃ ┣ lib_goods.php 管理中心商品相關函數 
┃ ┃ ┣ lib_main.php 管理中心公用函數庫 
┃ ┃ ┗ lib_template.php 管理中心模版相關公用函數庫 
┃ ┣ styles 的目錄 
┃ ┣ templates 的目錄 
┃ ┗ js 的目錄 
┃ ┣ colorselector.js 
┃ ┣ common.js 
┃ ┣ listtable.js 
┃ ┣ md5.js 
┃ ┣ selectzone.js 
┃ ┣ tab.js 
┃ ┣ todolist.js 
┃ ┣ topbar.js 
┃ ┗ validator.js 表單驗證類 
┣ api 的目錄 
┃ ┣ checkorder.php 檢查訂單 API 
┃ ┣ cron.php 
┃ ┗ init.php API 公用初始化文件 
┣ cert 的目錄 
┣ data 的目錄 
┃ ┣ ffiliate.html 
┃ ┣ goods_script.html 
┃ ┣ order_print.html 
┃ ┣ afficheimg 的目錄 
┃ ┣ brandlogo 的目錄 
┃ ┣ captcha 的目錄 驗證碼背景圖片存放位置 
┃ ┣ cardimg 的目錄 
┃ ┣ feedbackimg 的目錄 
┃ ┣ images 的目錄 
┃ ┣ packimg 的目錄 
┃ ┗ sqldata 的目錄 
┣ images 的目錄 
┃ ┗ upload 的目錄 
┃ ┣ File 文件上傳存放處 
┃ ┣ Flash flash上傳存放處 
┃ ┣ Image 圖片上傳存放處 
┃ ┗ Media 視頻上傳存放處 
┣ includes 的目錄 
┃ ┣ cls_captcha.php 驗證碼圖片類 
┃ ┣ cls_ecshop.php 基礎類 
┃ ┣ cls_error.php 用戶級錯誤處理類 
┃ ┣ cls_iconv.php 字符集轉換類 
┃ ┣ cls_image.php 後臺對上傳文件的處理類(實現圖片上傳,圖片縮小, 增長水印) 
┃ ┣ cls_json.php JSON 類 
┃ ┣ cls_mysql.php MYSQL 公用類庫 
┃ ┣ cls_rss.php RSS 類 
┃ ┣ cls_session.php SESSION 公用類庫 
┃ ┣ cls_sms.php 短信模塊 之 模型(類庫) 
┃ ┣ cls_smtp.php SMTP 郵件類 
┃ ┣ cls_sql_executor.php SQL語句執行類。 
┃ ┣ cls_template.php 模版類 
┃ ┣ cls_transport.php 服務器之間數據傳輸器 
┃ ┣ inc_constant.php 常量 
┃ ┣ init.php 前臺公用文件 
┃ ┣ lib.debug.php 
┃ ┣ lib_article.php 文章及文章分類相關函數庫 
┃ ┣ lib_clips.php ECSHOP 用戶相關函數庫 
┃ ┣ lib_code.php 加密解密類 
┃ ┣ lib_common.php 公用函數庫 
┃ ┣ lib_goods.php 商品相關函數庫 
┃ ┣ lib_insert.php 動態內容函數庫 
┃ ┣ lib_main.php 前臺公用函數庫 
┃ ┣ lib_order.php 購物流程函數庫 
┃ ┣ lib_passport.php 用戶賬號相關函數庫 
┃ ┣ lib_payment.php 支付接口函數庫 
┃ ┣ lib_time.php 時間函數 
┃ ┣ lib_transaction.php ECSHOP 用戶交易相關函數庫 
┃ ┣ codetable 的目錄 
┃ ┃ ┣ big5-gb.table 
┃ ┃ ┣ big5_utf8.php 
┃ ┃ ┣ gb-big5.table 
┃ ┃ ┣ gb_utf8.php 
┃ ┃ ┗ ipdata.dat 
┃ ┣ fckeditor 的目錄 fckeditor編輯器目錄 
┃ ┗ modules 的目錄 
┃ ┣ convert 的目錄 
┃ ┃ ┣ shopex46.php vshopex4.6轉換程序插件 
┃ ┃ ┗ shopex47.php shopex4.7轉換程序插件 
┃ ┣ cron 的目錄 
┃ ┃ ┣ auto_manage.php 自動上下架管理 
┃ ┃ ┗ ipdel.php 按期刪除 
┃ ┣ integrates 的目錄 
┃ ┃ ┣ bmforum.php 會員數據處理類 
┃ ┃ ┣ discuz.php 
┃ ┃ ┣ discuz55.php 
┃ ┃ ┣ dvbbs.php 
┃ ┃ ┣ ecshop.php 
┃ ┃ ┣ integrate.php 
┃ ┃ ┣ ipb.php 
┃ ┃ ┣ molyx.php 
┃ ┃ ┣ phpbb.php 
┃ ┃ ┣ phpwind.php 
┃ ┃ ┣ phpwind5.php 
┃ ┃ ┗ vbb.php 
┃ ┣ payment 的目錄 
┃ ┃ ┣ alipay.php 支付寶插件 
┃ ┃ ┣ balance.php 餘額支付插件 
┃ ┃ ┣ bank.php 銀行匯款(轉賬)插件 
┃ ┃ ┣ cappay.php 首信易支付插件 
┃ ┃ ┣ chinabank.php 網銀在線插件 
┃ ┃ ┣ cncard.php 雲網支付插件 
┃ ┃ ┣ cod.php 貨到付款插件 
┃ ┃ ┣ ctopay.php Ctopay 支付插件 
┃ ┃ ┣ express.php express支付系統插件 
┃ ┃ ┣ ips.php ips支付系統插件 
┃ ┃ ┣ kuaiqian.php 快錢插件 
┃ ┃ ┣ nps.php NPS支付插件 
┃ ┃ ┣ pay800.php 800pay 支付寶插件 
┃ ┃ ┣ paypal.php 貝寶插件 
┃ ┃ ┣ paypalcn.php 貝寶中國插件 
┃ ┃ ┣ post.php 郵局匯款插件 
┃ ┃ ┣ tenpay.php 財付通插件 
┃ ┃ ┣ udpay.php 網匯通插件 
┃ ┃ ┣ xpay.php 易付通插件 
┃ ┃ ┗ yeepay.php YeePay易寶插件 
┃ ┗ shipping 的目錄 
┃ ┣ cac.php 上門取貨插件 
┃ ┣ city_express.php 城際快遞插件 
┃ ┣ ems.php EMS插件 
┃ ┣ flat.php 郵政包裹插件 
┃ ┣ fpd.php 到付運費插件 
┃ ┣ post_express.php 郵政包裹插件 
┃ ┣ post_mail.php 郵局平郵插件 
┃ ┣ presswork.php 掛號印刷品插件 
┃ ┣ sf_express.php 順豐速運 配送方式插件 
┃ ┣ sto_express.php 申通快遞 配送方式插件 
┃ ┣ yto.php 圓通速遞插件 
┃ ┗ zto.php 中通速遞插件 
┣ install 的目錄 安裝文件目錄 
┣ js 的目錄 
┃ ┣ auto_complete.js 
┃ ┣ calendar.php 
┃ ┣ common.js 
┃ ┣ compare.js 
┃ ┣ global.js 
┃ ┣ lefttime.js 
┃ ┣ myship.js 
┃ ┣ region.js 
┃ ┣ shopping_flow.js 
┃ ┣ transport.js 
┃ ┣ user.js 
┃ ┣ utils.js 
┃ ┗ calendar 的目錄 
┣ languages 的目錄 語言風格文件 
┃ ┣ zh_cn 的目錄 
┃ ┃ ┣ 
┃ ┃ ┣ admin 的目錄 
┃ ┃ ┣ convert 的目錄 
┃ ┃ ┣ cron 的目錄 
┃ ┃ ┣ payment 的目錄 
┃ ┃ ┗ shipping 的目錄 
┃ ┗ zh_tw 的目錄 
┃ ┣ admin 的目錄 
┃ ┣ convert 的目錄 
┃ ┣ cron 的目錄 
┃ ┣ payment 的目錄 
┃ ┗ shipping 的目錄 
┣ plugins 的目錄 
┣ templates 的目錄 
┃ ┣ backup 的目錄 
┃ ┃ ┗ ibrary 的目錄 
┃ ┣ caches 的目錄 
┃ ┗ compiled 的目錄 
┃ ┗ admin 的目錄 

┣ themes 的目錄 
┃ ┣ default 的目錄 
┃ ┃ ┣ images 的目錄 
┃ ┃ ┗ library 的目錄 
┃ ┗ sport 的目錄 
┣ wap 的目錄 
┃ ┣ article.php 
┃ ┣ brands.php 
┃ ┣ buy.php 
┃ ┣ category.php 
┃ ┣ comment.php 
┃ ┣ goods.php 
┃ ┣ goods_list.php 
┃ ┣ index.php 
┃ ┣ user.php 
┃ ┣ includes 的目錄 
┃ ┃ ┣ init.php 
┃ ┃ ┣ lib_main.php 
┃ ┗ templates 的目錄 
┃ ┣ article.wml 
┃ ┣ article_list.wml 
┃ ┣ brands.wml 
┃ ┣ buy.wml 
┃ ┣ category.wml 
┃ ┣ comment.wml 
┃ ┣ goods.wml 
┃ ┣ goods_img.wml 
┃ ┣ goods_list.wml 
┃ ┣ index.wml 
┃ ┣ login.wml 
┃ ┣ order_list.wml 
┃ ┗ user.wml 
┗ widget 的目錄 
┣ blog_sohu.php 
┣ blog_sohu.xhtml 
┗ images 的目錄
View Code

ECShop的庫項目功能php

認識一下ECShop的庫項目功能。

1、認識ECShop模板管理。
1.進入EC的後臺,進入「模板管理」–>「設置模板」,如圖

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情

 能夠看到模板編輯頁面在此我能夠編輯不用頁面的區塊(庫項目)是否顯示、顯示位置、甚至是顯示商品的數量,如圖
ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情

在此對模板進行的修改都會顯示在頁面。(EC好強大呀~~^3^)

2、認識庫項目
1.一個庫項目眷漲個庫文件。
打開ECShop的裝置目錄,進入 themes/default/library文件夾。你會看到許多以 「.lbi」(擴展名)結尾的文件。如圖:

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情

ad_position?廣告位嗎?
category_tree?分類樹嗎?
recommend_new?新品推薦嗎?

對了,這裏放的眷漲頁面上一塊一塊能夠編輯的庫項目的文件了。沒錯,若是你想加一個本身的顯示庫項目,就在此添加。

其實ECShop提供了編輯庫文件編輯的地方,就在管理後臺的「模板管理」–>「庫文件管理」。

那麼這些庫項目是如何顯示在頁面上的呢?讓咱們以「新品推薦」爲例。往下看。

2.庫項目的頁面添加。

進入themes/default文件夾,用編輯器(文本打開也能夠)打開index.dwt文件。ctrl + f ,查找recommend_new

會找到一行代碼:

對,眷漲這個「東西」把recommend_new.lbi裏的內容加宰出來併成爲頁面的一部分的。

可是這只是他的開始部分,完整的應該是:

有開始,有結束。
而這個: 和這個
將頁面劃分爲幾個不一樣的大區域,這樣後臺就能夠把那些庫項目在這些區域裏排序了。

因此若是你僅僅想添加一塊本身的定義的庫文件顯示,那麼僅須要在library裏添加了本身的lbi文件後,用加到頁面合適位置就能夠了。若是想之後在後臺的「模板管理」裏編輯它,那還須要作下面的工做。
3、爲後臺添加可配置(設置)的庫項目

1.在根目錄/themes/default/library 中添加一個」test.lbi」 空文件。

而後開打 根目錄/languages/zh_cn/admin/template.php(注意大宇用的語言包是簡體中文,因此是zh_cn),找到 $_LANG['template_libs'],在此上面添加一行「$_LANG['template_libs']['test'] = ‘test測試’;」。

好了,如今你能夠打開你的管理後臺,進入「模板管理」–>」庫文件管理」 而後點開庫文件列表的下拉菜單找找看,是否是有一個 「test.lbi – test測試」。哈哈,咱們給它加點內容吧:


我眷漲測試一下下

ps:第一行是設置編碼用的。不明白不要緊。繼續…

2.打開 根目錄/admin/includes/lib_template.php。

大體看一下這個文件,你會發現,原來後臺的「設置模板」的初始配置都是在這裏聲明的。

在這裏能夠編輯 「能夠設置內容的模板」,還能夠編輯「每一個模板允卷設置的庫項目」。也眷漲說,這裏聲明瞭哪一個模板裏能夠設置哪些庫項目。相關數組都有註釋,至關方便。

下面咱們要把本身定義的「test.lbi」添加到到index.dwt裏。

找到 「’index’ => array(」 這一行,通常在文件的120行。這裏是個數組。往數組裏添加一行:

「’/library/test.lbi’ => 4」,如圖:

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情

咱們給它設置的默認顯示數量爲4。

好了,如今點開 「模板管理」 –> 「設置模板」,能夠在首頁的編輯模板裏看到咱們的庫項目了。如圖

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情

可是,它的「顯示」框式灰色的,不能選中,並且「區域」裏也不能設置顯示區域。

該怎麼辦呢?

這麼辦:

打開 根目錄/themes/default/libs.xml

查找「」,在region標籤裏添加一行「test」,如圖:

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情


保存後,再次進入「模板管理」 –> 「設置模板」,看看咱們的test庫項目是否是能夠編輯了。呵呵

編輯好看看效果吧~~~如圖

ecshop 增長「庫項目」而且添加到模板中-》非可編輯區改成可編輯區 - pepsl - Pepsl的心情
View Code

 

ecshop 實現全站調用購物車功能css

此功能是根據網友提供的方法,而後本身實際操做後發現了一些問題,更改了部分代碼,完美了一些,下面的代碼都貼出來了
今天給一朋友解決一個問題,須要在商城每一個頁面中的購物車處都顯示購物車詳情!其實,這個功能很簡單,如今不少商城都在用(PS:雖然個人成都零食網如今尚未使用這個功能,而且之後暫時也沒有打算使用這個功能,今天仍是把這個寫出來分享給你們。)。要實現並非難事,就是在訂單模板中加幾個關於訂單詳情的顯示嘛。若是須要在這裏面加入刪除或更新也只須要結合JS進行調用就好了。如今將我實現這個功能的方法公佈以下:
能夠從圖中看出,我主要是添加了購物車詳單和刪除操做。其它都是同樣的。如下是具體實現方法和簡單原理:
要實現,首先要知道這一塊是怎麼出來的,作過ECSHOP二次開發的朋友對這個確定不陌生了,模板文件在模板文件夾中的庫文件夾的cart_info.lbi(找不到的同志能夠搜索一下),原來這個模板裏的東西很簡單,就是添顯示了「購物車裏有X個商品,去結算」這類的信息。今天,咱們要將其所有顯示。
其次,咱們要顯示詳情,確定須要將這個詳情使用彈出的方式來顯示,不能直接顯示,直接顯示誰都會,那樣有打開訂單結算頁有什麼區別呢?佔有太多地方了,這裏就要用到css和js的一些基礎知識了。
個人代碼和註釋以下:
<!--{if $goods11}-->
                <ul id="mcart-mz">   
                  {foreach from=$goods11 item=goods11 name=goods11}             
                   <li>
                    <div class="p-img fl">
                       <a href="{$goods11.url}" target="_blank">
                         <img src="{$goods11.goods_thumb}" alt="" height="50" width="50">
                       </a>
                    </div>      
                    <div class="p-name fl">
                       <a href="{$goods11.url}" target="_blank">{$goods11.short_name}</a>
                    </div>      
                     <div class="p-detail fr ar">          
                        <span class="p-price"><strong>{$goods11.goods_price}</strong>×{$goods11.goods_number}</span><br>          
                        <span class="hl-green">小計:{$goods11.subtotal}</span><br>           
                         <a class="del" href="javascript:" onClick="deleteCartGoods({$goods11.rec_id})">[刪除]</a> 
                     </div>   
                  </li>
                  <hr class="hr1"/>
                 <!--{/foreach}-->
                </ul>
                <div class="smb ar">共<b>{$goods_number}</b>件商品 共計<strong>¥:{$order_amount}</strong><br><a href="flow.php">
<img src="themes/chengrenyongpin/images/car1_14.jpg" width="120" alt="去結算">
</a></div>  
             <!--{else}-->
                您的購物車暫無商品
            <!--{/if}--> 


以上代碼僅供參考。如須要使用,須要結合如下CSS代碼,請同步複製到相應目錄文件或嵌入相關文件中
.car_ul {
    background: none repeat scroll 0 0 #FFFFFF;
    border: 1px solid #F5859D;
    display: none;
    float: left;
    margin-top: 4px;
    padding: 5px;
    position: absolute;
    right: -1px;
    top: 20px;
    width: 270px;
}
.car_ul li {
    padding: 3px 0;
}
.car_ul li {
    line-height: 22px;
    width: 270px;
}
.car_ul .f_l {
    float: left;
    width: 177px;
}
.car_ul .f_r {
    float: right;
    padding-top: 2px;
    text-align: right;
    width: 90px;
}
car_ul .name {
    float: left;
    height: 46px;
    line-height: 23px;
    overflow: hidden;
    padding: 2px 0 0 5px;
    width: 117px;
}
.car_ul .f_r b {
    color: #FF0000;
}
.car_ul .f_r .del {
    color: #999999;
}
複製代碼

固然。這裏默認這個詳單是display:none的。須要您經過js進行調用將期display:block。
接下來,就是要改程序了:
打開/include/lib_insert.php找到function insert_cart_info()。將其改爲如下內容
function insert_cart_info1()
{
    $sql = 'SELECT c.*,g.goods_name,g.goods_thumb,g.goods_id,c.goods_number,c.goods_price' .
           ' FROM ' . $GLOBALS['ecs']->table('cart') ." AS c ".
                                         " LEFT JOIN ".$GLOBALS['ecs']->table('goods')." AS g ON g.goods_id=c.goods_id ".
           " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
    $row = $GLOBALS['db']->GetAll($sql);
                $arr = array();
                foreach($row AS $k=>$v)
                {
                                $arr[$k]['goods_thumb']  =get_image_path($v['goods_id'], $v['goods_thumb'], true);
        $arr[$k]['short_name']   = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
                                               sub_str($v['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $v['goods_name'];
                                $arr[$k]['url']          = build_uri('goods', array('gid' => $v['goods_id']), $v['goods_name']);
                                $arr[$k]['goods_number'] = $v['goods_number'];
                                $arr[$k]['goods_name']   = $v['goods_name'];
                                $arr[$k]['goods_price']  = price_format($v['goods_price']);
                                $arr[$k]['rec_id']       = $v['rec_id'];
                }
    $sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
           ' FROM ' . $GLOBALS['ecs']->table('cart') .
           " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
    $row = $GLOBALS['db']->GetRow($sql);


    if ($row)
    {
        $number = intval($row['number']);
        $amount = floatval($row['amount']);
    }
    else
    {
        $number = 0;
        $amount = 0;
    }


    $GLOBALS['smarty']->assign('str',sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false)));
        $GLOBALS['smarty']->assign('goods11',$arr);
        $GLOBALS['smarty']->assign('goods_number',$number);
        $GLOBALS['smarty']->assign('order_amount',$amount);
    $output = $GLOBALS['smarty']->fetch('library/car_info.lbi');
    return $output;
}


這樣,就大功告成了!!購物車詳細內容會顯示了。但關鍵的是購物車中的刪除。這個就要咱們從新寫入相應程序了才行。
咱們在網站根目錄建一個文件爲delete_cart_goods.php。它的做用,來專門負責購物車進行更新的那麼一個程序(其實只用於刪除購物車的訂單)
<?php
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
include_once('includes/cls_json.php');
$result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => '');
$json  = new JSON;
if($_POST['id'])
{
$sql = 'DELETE FROM '.$GLOBALS['ecs']->table('cart')." WHERE rec_id=".$_POST['id'];
$GLOBALS['db']->query($sql);
}
$sql = 'SELECT c.*,g.goods_name,g.goods_thumb,g.goods_id,c.goods_number,c.goods_price' .
                         ' FROM ' . $GLOBALS['ecs']->table('cart') ." AS c ".
                         " LEFT JOIN ".$GLOBALS['ecs']->table('goods')." AS g ON g.goods_id=c.goods_id ".
                         " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetAll($sql);
$arr = array();
foreach($row AS $k=>$v)
{
                $arr[$k]['goods_thumb']  =get_image_path($v['goods_id'], $v['goods_thumb'], true);
                $arr[$k]['short_name']   = $GLOBALS['_CFG']['goods_name_length'] > 0 ?
                                                                                                                                                                         sub_str($v['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $v['goods_name'];
                $arr[$k]['url']          = build_uri('goods', array('gid' => $v['goods_id']), $v['goods_name']);
                $arr[$k]['goods_number'] = $v['goods_number'];
                $arr[$k]['goods_name']   = $v['goods_name'];
                $arr[$k]['goods_price']  = price_format($v['goods_price']);
                $arr[$k]['rec_id']       = $v['rec_id'];
}
$sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
                         ' FROM ' . $GLOBALS['ecs']->table('cart') .
                         " WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetRow($sql);
if ($row)
{
                $number = intval($row['number']);
                $amount = floatval($row['amount']);
}
else
{
                $number = 0;
                $amount = 0;
}
$GLOBALS['smarty']->assign('str',sprintf($GLOBALS['_LANG']['cart_info'], $number, price_format($amount, false)));
$GLOBALS['smarty']->assign('goods11',$arr);
$GLOBALS['smarty']->assign('goods_number',$number);
$GLOBALS['smarty']->assign('order_amount',$amount);
$result['content'] = $GLOBALS['smarty']->fetch('library/car_info.lbi');
die($json->encode($result));
?>


代碼如上了,但細心的人看,這其實和lib_insert中的insert_cart_info函數是同樣的,只是最後一行不同,一個是輸出到json數據組,一個直接返回。
這樣有了這些之後就只差模板中的JS調用了。咱們給刪除連接添加了代碼<a class="del" href="javascript:">[刪除]</a>
插入deleteCartGoods這個js就好了。在這裏提示一下,使用Jquery和使用EC自帶的JS寫法是有必定區別的,JQuery 我在這裏就不寫了,由於我火柴網的確沒有使用,我也就懶得寫了。
<script type="text/javascript">
function deleteCartGoods(rec_id)
{
Ajax.call('delete_cart_goods.php', 'id='+rec_id, deleteCartGoodsResp**e, 'POST', 'JSON');
}
/**
* 接收刪除後返回的信息
*/
function deleteCartGoodsResp**e(res)
{
  if (res.error)
  {
    alert(res.err_msg);
  }
  else
  {
      document.getElementById('ECS_CARTINFO').innerHTML = res.content;//這裏的ID須要改一下
  }
}
</script>
複製代碼


原理很簡單,先發送刪除指令,而後將返回的json數據從新加載到ECS_CARTINFO中的代碼中就好了。

到此,大功告成!!
View Code

ECSHOP換KindEditor編輯器html

ECSHOP一直用的FCK,這個不解釋,太多杯具太多糾結。

---------------------
KindEdito主要特色
快速:體積小,加載速度快
開源:開放源代碼,高水平,高品質
底層:內置自定義 DOM 類庫,精確操做 DOM
擴展:基於插件的設計,全部功能都是插件,可根據需求增減功能
風格:修改編輯器風格很是容易,只需修改一個 CSS 文件
兼容:支持大部分主流瀏覽器,好比 IE、Firefox、Safari、Chrome、Opera
---------------------
官方下載最新版,解壓直接扔在根目錄算了,如今拿編輯產品信息開刀,模板頁面?這個不用說了吧(admin/templates/goods_info.html).
1.在head部分添加:

<script charset=」utf-8″ src=」../kindeditor/kindeditor.js」></script>
<script>
KE.show({
id : ‘editor_id’,
allowFileManager : true

});
</script>

2.修改產品描述所調用的FCK編輯器 {$FCKeditor} 爲
<textarea id=」editor_id」 name=」goods_desc」 style=」width:90%;height:300px;」>
{$goods.goods_desc}
</textarea>

OK,至此結束,看看效果吧!
View Code

ECSHOP全部頁面分類樹顯示所有的方法,全部頁面分類樹顯示所有的方法java

ECSHOP全部頁面分類樹顯示所有的方法,全部頁面分類樹顯示所有的方法
 
修改方法以下:

打開includes/lib_goods.php,找到get_categories_tree()函數部分,找到這一段:
function get_categories_tree($cat_id = 0)
{
    if ($cat_id > 0)
    {
        $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
        $parent_id = $GLOBALS['db']->getOne($sql);
    }
    else
    {
        $parent_id = 0;
    }

修改爲:

function get_categories_tree($cat_id = 0)
{
    if ($cat_id > 0)
    {
        $sql = 'SELECT parent_id FROM ' . $GLOBALS['ecs']->table('category') . " WHERE cat_id = '$cat_id'";
        
    }
View Code

Ecshop 團購列表增長市場價、團購價、爲您節省、倒計時等!mysql

曾經求助過此方法,結果運氣很好,有一位高手加我無償爲我解決了此問題,很是感謝!通過我倆幾天的調試,目前只有1個小問題,其它均完美實現。我整理了詳細的教程,通過高手的贊成,如今分享給你們,你們都裝上後看一下是否都有我遇到的問題。先貼問題,再貼教程。

問題:在我本地和個人服務器上,都出現了團購價調用不出來的現象。而在那位高手兄弟的機子上卻沒有這個問題,這個問題咱們搞了好幾天都沒解決。甚至他把他的網站程序備份後傳給我安裝,到我本地仍是會出現此問題,奇了怪了。我對這個問題的見解是數據寫不到數據庫,多是我倆的環境版本的問題。目前個人解決方法是去數據庫字段裏修改,沒辦法,手工修改。

看,團購價格應該是50元,在我這就是出不來,一直顯示的是市場價格。

教程,共5步

1,網站後臺-數據庫管理-SQL查詢-執行sql語句:
ALTER TABLE `ecs_goods_activity` ADD `tuan_price` DECIMAL( 10, 2 ) UNSIGNED NOT NULL DEFAULT '0.00'

2,admin/templates/group_buy_info.htm
找到「<a href="javascript:;"><strong>[+]</strong></a>」註釋掉。
找到<a href="javascript:;"><strong>[-]</strong></a>    </td>
</tr>
  {/if}
  {/foreach}
在其下面添加
<tr>
    <td class="label">團購價格:</td>
    <td><input type="text" name="market_price" value="{$group_buy.market_price}" size="30" /> 該價格與價格階梯價格相同,2個都不能少!</td>
  </tr>

3,admin/group_buy.php
找到'ext_info'   => serialize(array(
在其上面一行添加
'tuan_price'      => $tuan_price,

4,themes/default/group_buy_list.dwt大約61行 添加
   市場價格:{$group_buy.shop_price1}<br />
   團購價格:{$group_buy.tuan_price1}<br />
   爲您節省:{$group_buy.js}<br />
   折扣:{$group_buy.zk}<br />
   倒計時:<font id="timeszc{$group_buy.i}" color="#717171"  size="2"></font><br />
例:個人是在「{$lang.gb_price_ladder}<br />」上一行添加的

搜索</body>,在其上面一行添加:
<SCRIPT LANGUAGE="JavaScript"> 
<!-- {foreach from=$gb_list item=val} --> 
function _fresh{$val.i}()  
{  
var endtime{$val.i}=new Date("{$val.end_timeno}");
var nowtime = new Date();  
var leftsecond=parseInt((endtime{$val.i}.getTime()-nowtime.getTime())/1000);  
__d=parseInt(leftsecond/3600/24);  
__h=parseInt((leftsecond/3600)%24);  
__m=parseInt((leftsecond/60)%60);  
__s=parseInt(leftsecond%60);  
var c=new Date();
var q=((c.getMilliseconds())%10);
if(leftsecond<=0){  
document.getElementById("timeszc{$val.i}").innerHTML="促銷已結束";  
clearInterval(sh{$val.i});  
} 
else 
{ 
  if (__h<10) {__h="0"+__h} 
  //分數取兩位,不足補0
  if (__m<10) {__m="0"+__m} 
  //秒數取兩位,不足補0
  if (__s<10) {__s="0"+__s} 

  document.getElementById("timeszc{$val.i}").innerHTML=__d+" 天"+__h+" 時"+__m+" 分"+__s+" 秒";  
} 
}  
_fresh{$val.i}()  
var sh{$val.i};  
sh{$val.i}=setInterval(_fresh{$val.i},100);  
<!--{/foreach}-->
</SCRIPT>

5,根目錄/group_buy.php
找到function group_buy_list($size, $page)
下面所有替換
{
    /* 取得團購活動 */
    $gb_list = array();
    $now = gmtime();
    $sql = "SELECT b.*, IFNULL(g.goods_thumb, '') AS goods_thumb, b.tuan_price, b.act_id AS group_buy_id, g.shop_price,".
                "b.start_time AS start_date, b.end_time AS end_date " .
            "FROM " . $GLOBALS['ecs']->table('goods_activity') . " AS b " .
                "LEFT JOIN " . $GLOBALS['ecs']->table('goods') . " AS g ON b.goods_id = g.goods_id " .
            "WHERE b.act_type = '" . GAT_GROUP_BUY . "' " .
            "AND b.start_time <= '$now' AND b.is_finished < 3 ORDER BY b.act_id DESC";
    $res = $GLOBALS['db']->selectLimit($sql, $size, ($page - 1) * $size);

$i = 1;
    while ($group_buy = $GLOBALS['db']->fetchRow($res))
    {
        $ext_info = unserialize($group_buy['ext_info']);
        $group_buy = array_merge($group_buy, $ext_info);
        /* 格式化時間 */
  $group_buy['i']          = $i ++;
        $group_buy['formated_start_date']   = local_date($GLOBALS['_CFG']['time_format'], $group_buy['start_date']);
        $group_buy['formated_end_date']     = local_date($GLOBALS['_CFG']['time_format'], $group_buy['end_date']);

  $group_buy['end_timeno']  = local_date('Y/m/d H:i:s', $group_buy['end_date']);
        /* 格式化保證金 */
        $group_buy['formated_deposit'] = price_format($group_buy['deposit'], false);
  $group_buy['shop_price1'] = price_format($group_buy['shop_price'], false);
        if ( $group_buy['tuan_price'] == 0)
        {
            $group_buy['tuan_price1'] = $group_buy['shop_price1'];
   $group_buy['js'] = 0;
   $group_buy['zk'] = 1;
        }
        else
        {
            $group_buy['tuan_price1'] = price_format($group_buy['tuan_price'], false);
   $group_buy['tuan_price'] = $group_buy['tuan_price'];
   $group_buy['js'] = $group_buy['shop_price']-$group_buy['tuan_price'];
   $group_buy['zk'] = round(($group_buy['tuan_price']/$group_buy['shop_price'])*10 ,2);
        }  

        /* 處理價格階梯 */
        $price_ladder = $group_buy['price_ladder'];
        if (!is_array($price_ladder) || empty($price_ladder))
        {
            $price_ladder = array(array('amount' => 0, 'price' => 0));
        }
        else
        {
            foreach ($price_ladder as $key => $amount_price)
            {
                $price_ladder[$key]['formated_price'] = price_format($amount_price['price']);
            }
        }
        $group_buy['price_ladder'] = $price_ladder;
        /* 處理圖片 */
        if (empty($group_buy['goods_thumb']))
        {
            $group_buy['goods_thumb'] = get_image_path($group_buy['goods_id'], $group_buy['goods_thumb'], true);
        }
        /* 處理連接 */
        $group_buy['url'] = build_uri('group_buy', array('gbid'=>$group_buy['group_buy_id']));
        /* 加入數組 */
        $gb_list[] = $group_buy;
    }
    return $gb_list;
}
?>
View Code

Ecshop後臺fckeditor上傳圖片路徑修改和重命名上傳圖片sql

Ecshop上傳的圖片都是放在images/upload/Image/下面的,圖片多了就不爽了哦。Ecshop後臺fckeditor上傳圖片路徑修改和重命名上傳圖片

看了網上不少修改的地方,本身也測試了好幾回,如今終於能夠了。

Fckeditor上傳圖片路徑修改後的路徑是: 已年月日時分秒來區分

images/upload/Image/201303/05143045-6546.jpg
images/upload/Image/年月/日時分秒-四位隨機數.上傳圖片後綴名

我只修改了Image的路徑,File、Flash、Media可本身參考修改。

1、修改Ecshop fckeditor 圖片上傳路徑只有一點改動:
找到includes/fckeditor/editor/filemanager/connectors/php/config.php

$Config['FileTypesPath']['Image']       = $Config['UserFilesPath'] . 'Image/' ;
$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'Image/' ;
改成:
$Config['FileTypesPath']['Image']       = $Config['UserFilesPath'] . 'Image/'. date('Ym',time()+3600*8).'/' ;
$Config['FileTypesAbsolutePath']['Image']= ($Config['UserFilesAbsolutePath'] == '') ? '' : $Config['UserFilesAbsolutePath'].'Image/'. date('Ym',time()+3600*8).'/' ;

就是在後面加了date函數,由於我這裏用的UTC時區,因此加了8小時。

2、修改Ecshop fckeditor 上傳圖片的名字,重命名上傳的圖片的名字:
找到includes/fckeditor/editor/filemanager/connectors/php/io.php
找到SanitizeFileName函數,
//$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
把這一行註釋掉,替換爲:

$sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ;  //獲取擴展名
$sNewFileName = date('dHis-',time()+3600*8).rand(0,9999).'.'.$sExtension;

替換以後的SanitizeFileName函數以下:
function SanitizeFileName( $sNewFileName )
{
    global $Config ;

    $sNewFileName = stripslashes( $sNewFileName ) ;

    // Replace dots in the name with underscores (only one dot can be there... security issue).
    if ( $Config['ForceSingleExtension'] )
        $sNewFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sNewFileName ) ;

    // Remove \ / | : ? * " < >
    //$sNewFileName = preg_replace( '/\\\\|\\/|\\||\\:|\\?|\\*|"|<|>|[[:cntrl:]]/', '_', $sNewFileName ) ;
    $sExtension = substr( $sNewFileName, (strrpos($sNewFileName,'.') + 1 ) ) ;
    $sNewFileName = date('dHis-',time()+3600*8).rand(0,9999).'.'.$sExtension;  //20130305
    return $sNewFileName ;
}
View Code

ecshop促銷時間倒計時效果數據庫

ecshop促銷時間倒計時效果的實現以下:
1、首先修改程序部分
打開includes/lib_goods.php
找到get_promote_goods()函數部分
在 $goods[$idx]['url']   = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
下面增長代碼

        $time = gmtime();
        if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
        {
             $goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']);
        }
        else
        {
            $goods[$idx]['gmt_end_time'] = 0;
        }
2、
而後將 library/recommend_promotion.lbi
所有替換爲下面代碼:
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
   var time = new Date()
   var hour = time.getHours()
   var minute = time.getMinutes()
   var second = time.getSeconds()
   var timevalue = ""+((hour > 12) ? hour-12:hour)
   timevalue +=((minute < 10) ? ":0":":")+minute
   timevalue +=((second < 10) ? ":0":":")+second
   timevalue +=((hour >12 ) ? " PM":" AM")
   var convertHour = DifferHour
   var convertMinute = DifferMinute
   var convertSecond = DifferSecond
   var Diffms = Tday[key].getTime() - time.getTime()
   DifferHour = Math.floor(Diffms / daysms)
   Diffms -= DifferHour * daysms
   DifferMinute = Math.floor(Diffms / hoursms)
   Diffms -= DifferMinute * hoursms
   DifferSecond = Math.floor(Diffms / Secondms)
   Diffms -= DifferSecond * Secondms
   var dSecs = Math.floor(Diffms / microsecond)
  
   if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
   if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>時";
   if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
     d="<font color=red>"+dSecs+"</font>秒"
     if (DifferHour>0) {a=a}
     else {a=''}
   document.getElementByIdx_xx_x("leftTime"+key).innerHTML = a + b + c + d; //顯示倒計時信息
}
</script>
<div id="sales" class="f_l clearfix">
      <h1><a href="../search.php?intro=promotion"><img src="images/more.gif" /></a></h1>
       <div class="clearfix goodBox">
         <!--{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}-->
         {if $smarty.foreach.promotion_foreach.index <= 3}
           <div class="goodList">
           <a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
      <p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p>
           {$lang.promote_price}<font class="f1">{$goods.promote_price}</font><br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
           </div>
         {/if}
<script>
Tday[{$key}] = new Date("{$goods.gmt_end_time}");  
window.setInterval(function()    
{clock({$key});}, 1000);    
</script>
         <!--{/foreach}-->
       </div>
      </div>
    
<!-- {/if} -->
View Code

ecshop開發之如何實現團購網的倒計時功能 express

首先,你須要在購買的時候,提示輸入框,告訴用戶,你必須購買多少.其次,購物車中須要修改購買數量的時候,你也須要控制。
   1:詳細頁面中控制.
   在flow.php裏面addto_cart中,加入如下代碼,控制購買.
   $gc = $db -> getOne("select gc from ".$ecs->table('goods')." where goods_id = ".$goods ->goods_id);
       if ($goods->number%$gc) {
      $result['error'] = 1;
      $result['message'] = "購買數量必須輸入{$gc}的倍數";
       }
       2:在common.js中增長函數
       function addToCart1(goodsId, parentId)
{
   var goods        = new Object();
   var spec_arr     = new Array();
   var fittings_arr = new Array();
   var number    = 1;
   var t = "number"+goodsId;
   number = document.getElementByIdx_x("number"+goodsId).value;
   goods.spec     = spec_arr;
   goods.goods_id = goodsId;
   goods.number = number;
   goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
   Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
}
2:控制列表頁面的購買.
在列表頁面中,增長一個框.
<form action="javascript:addToCart1({$goods.goods_id})" method="post" name="ECS_FORMBUY{$goods.goods_id}" id="ECS_FORMBUY{$goods.goods_id}" >
  
   購買數量:<input name="number{$goods.goods_id}" type="text" id="number{$goods.goods_id}" value="1" size="4"   class="formBorder"/><br />
  
  
   <a href="javascript:addToCart1({$goods.goods_id})"><img src="images/but_buy.jpg"></a>
   <a href="javascript:;" id="compareLink"quotes"}','{$goods.type}')"><img src="images/but_comp.jpg"></a></form>
調用addToCart1函數.
3:推薦頁面
    在common.js中增長函數addToCart2
function addToCart2(goodsId, parentId)
{
   var goods        = new Object();
   var spec_arr     = new Array();
   var fittings_arr = new Array();
   var number    = 1;
   var t = "number"+goodsId;
   number = document.getElementByIdx_x("number_"+goodsId).value;
   goods.spec     = spec_arr;
   goods.goods_id = goodsId;
   goods.number = number;
   goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
   Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
}
在recommend_new.lbi,recommend_best.lbi等頁面中,須要增長輸入框.調用次函數.
<form action="javascript:addToCart2({$goods.id})" method="post" name="ECS_FORMBUY_{$goods.id}" id="ECS_FORMBUY_{$goods.id}" >
  
   購買數量:<input name="number_{$goods.id}" type="text" id="number_{$goods.id}" value="1" size="4"   class="formBorder"/><br /><a href="javascript:addToCart2({$goods.id})"><img src="images/but_buy.jpg"></a></form>
最後完成了購買數量的控制。
View Code

ecshop首頁促銷商品倒計時效果json

ecshop促銷時間倒計時


1、首先修改程序部分
打開includes/lib_goods.php
找到get_promote_goods()函數部分
在 $goods[$idx]['url']   = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);


下面增長代碼




        $time = gmtime();
        if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
        {
             $goods[$idx]['gmt_end_time'] = local_date('M d, Y H:i:s',$row['promote_end_date']);
        }
        else
        {
            $goods[$idx]['gmt_end_time'] = 0;
        }


2、
而後將 library/recommend_promotion.lbi
所有替換爲下面代碼:


<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
   var time = new Date()
   var hour = time.getHours()
   var minute = time.getMinutes()
   var second = time.getSeconds()
   var timevalue = ""+((hour > 12) ? hour-12:hour)
   timevalue +=((minute < 10) ? ":0":":")+minute
   timevalue +=((second < 10) ? ":0":":")+second
   timevalue +=((hour >12 ) ? " PM":" AM")
   var convertHour = DifferHour
   var convertMinute = DifferMinute
   var convertSecond = DifferSecond
   var Diffms = Tday[key].getTime() - time.getTime()
   DifferHour = Math.floor(Diffms / daysms)
   Diffms -= DifferHour * daysms
   DifferMinute = Math.floor(Diffms / hoursms)
   Diffms -= DifferMinute * hoursms
   DifferSecond = Math.floor(Diffms / Secondms)
   Diffms -= DifferSecond * Secondms
   var dSecs = Math.floor(Diffms / microsecond)
  
   if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
   if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>時";
   if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
     d="<font color=red>"+dSecs+"</font>秒"
     if (DifferHour>0) {a=a}
     else {a=''}
   document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //顯示倒計時信息


}
</script>
<div id="sales" class="f_l clearfix">
      <h1><a href="../search.php?intro=promotion"><img src="images/more.gif" /></a></h1>
       <div class="clearfix goodBox">
         <!--{foreach from=$promotion_goods key=key item=goods name="promotion_foreach"}-->
             <div class="goodList">
           <a href="{$goods.url}"><img src="{$goods.thumb}" border="0" alt="{$goods.name|escape:html}"/></a><br />
      <p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.short_name|escape:html}</a></p>
           {$lang.promote_price}<font class="f1">{$goods.promote_price}</font><br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
           </div>
<script>
Tday[{$key}] = new Date("{$goods.gmt_end_time}");  
window.setInterval(function()    
{clock({$key});}, 1000);    
</script>
         <!--{/foreach}-->
       </div>
      </div>
    
<!-- {/if} -->
View Code

ecshop首頁特價、團購商品顯示倒計時  

雖然這在百度已經有不少了吧,可我仍是花了很長時間纔給弄出來。
一、打開includes/lib_goods.php
找到get_promote_goods()函數部分
在
$goods[$idx]['url']          = build_uri('goods', array('gid' => $row['goods_id']), $row['goods_name']);
下面增長代碼
/* 促銷時間倒計時 */ $time = gmtime();
if ($time >= $row['promote_start_date'] && $time <= $row['promote_end_date'])
{
    $goods[$idx]['gmt_end_time']  = local_date('M d, Y H:i:s',$row['promote_end_date']);
 }else{
    $goods[$idx]['gmt_end_time'] = 0;
 }

二、而後將 library/recommend_promotion.lbi
所有替換爲下面代碼:


<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<!-- {if $promotion_goods} -->
<script >
var Tday = new Array();
var daysms = 24 * 60 * 60 * 1000
var hoursms = 60 * 60 * 1000
var Secondms = 60 * 1000
var microsecond = 1000
var DifferHour = -1
var DifferMinute = -1
var DifferSecond = -1
function clock(key)
{
 var time = new Date()
var hour = time.getHours()
 var minute = time.getMinutes()
var second = time.getSeconds()
var timevalue = ""+((hour > 12) ? hour-12:hour)
timevalue +=((minute < 10) ? ":0":":")+minute
timevalue +=((second < 10) ? ":0":":")+second
timevalue +=((hour >12 ) ? " PM":" AM")
var convertHour = DifferHour
var convertMinute = DifferMinute
var convertSecond = DifferSecond
var Diffms = Tday[key].getTime() - time.getTime()
DifferHour = Math.floor(Diffms / daysms)
Diffms -= DifferHour * daysms
DifferMinute = Math.floor(Diffms / hoursms)
Diffms -= DifferMinute * hoursms
DifferSecond = Math.floor(Diffms / Secondms)
Diffms -= DifferSecond * Secondms
var dSecs = Math.floor(Diffms / microsecond)
 if(convertHour != DifferHour) a="<font color=red>"+DifferHour+"</font>天";
if(convertMinute != DifferMinute) b="<font color=red>"+DifferMinute+"</font>時";
if(convertSecond != DifferSecond) c="<font color=red>"+DifferSecond+"</font>分"
d="<font color=red>"+dSecs+"</font>秒"
 if (DifferHour>0) {a=a}
else {a=''}
document.getElementById("leftTime"+key).innerHTML = a + b + c + d; //顯示倒計時信息
}
</script>
..............省略div佈局代碼...............
<!--{foreach from=$promotion_goods key=key item=goods}-->
<!--這裏必定要注意 不要忘了 上面foreach裏 設置了 一個 key-->
         <br><font class="f4" id="leftTime{$key}">{$lang.please_waiting}</font>
...............省略div佈局代碼.................
<script>
     Tday[{$key}] = new Date("{$goods.gmt_end_time}");  
     window.setInterval(function(){clock({$key});}, 1000);    
</script>
<!--{/foreach}-->
</div>
</div>
<!-- {/if} -->
View Code

ecshop添加自定義導航

ecshop默認有頂部、中間和底部三種導航,若是咱們想增長其餘的導航怎麼作呢?
工具/原料
ecsshop
方法/步驟
在languages/zh_cn/admin/navigator.php中添加一行
$_LANG['custom'] = '自定義';

編輯admin/templates/navigator_add.htm,在第42行(根據實際狀況)後面追加
<option value='custom' {$rt.item_type_coustom}>{$lang.custom}</option>

後臺「系統設置」-》「自定義導航欄」-》「添加導航」在位置下拉菜單中便可看到剛纔添加的「自定義」選項。

在前臺模板(好比index.dwt)中經過
 <!-- {foreach name=nav_top_list from=$navigator_list.custom item=nav} -->
 <!-- {/foreach} -->
顯示導航內容。

前臺效果
View Code

ecshop怎麼獲得商品屬性的值

ECSHop的自定義屬性非常好用,可是在前臺輸出的時候很是麻煩,只能循環輸出全部的附加商品屬性,不能輸出制定的某個自定義的屬性,原本它用的是Smarty模板,可是到2.5以後好像是把Smarty修改不少,裏面好多東西不能用了。今天給朋友改東西,隨便就寫了下。

      我只在商品具體信息頁面(goods.php)作了這個事情,能夠的話能夠寫到每一個頁面去。

修改goods.php
在

PHP代碼
$smarty->assign(‘properties’,          $properties['pro']);   
這句前添加:

PHP代碼
//By Sharmy    
$pros = array();    
foreach($properties['pro']['商品屬性'] as $k=>$pro){    
    $pros[$pro['name']]['specId'] = $k;    
    $pros[$pro['name']]['value'] = $pro['value'];    
}    
$smarty->assign(‘pros’,          $pros);    
而後在模板部分能夠這樣調用(例如調用本身在後臺定義的"淨重"的商品類別屬性):

XML/HTML代碼
<ul><li> 淨重:{$pros.淨重.value}</li></ul>   
接下來就能夠修改它的其它頁面了,最好是修改調用的function部分,例如修改lib_goods.php裏的get_goods_propertiess。
View Code

ecshop增長pc掃描二維碼微信支付功能代碼

ecshop開發網站,若是沒有手機版,又想經過微信支付,能夠加入pc二維碼掃描微信支付功能
工具/原料
ecshop商城系統,phpqrcode,WxPayPubHelper
公衆號已申請微信支付
方法/步驟
使用PHP QR Code生成二維碼,下載,在商品支付頁面加入
include 'phpqrcode/phpqrcode.php';
$pay_url ='http://www.xxx.com/weixin/weixin.php?order_id='.$order['order_sn'];
    QRcode::png($pay_url, 'images/image.png', 'L', 8);
echo '<img src="images/image.png" />';
生成一個指向微信支付的手機鏈接二維碼,手機掃描進入

打開申請到的微信支付代碼,在上面加入weixin.php
define('IN_ECS', true);
require('../includes/init.php');
require('../includes/lib_order.php');
$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;
$order = order_info(0,$order_id);
獲取訂單信息

手機打開頁面調用代碼
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <title>微信安全支付</title>
<script type="text/javascript">
//調用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
<?php echo $jsApiParameters; ?>,
function(res){
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', jsApiCall); 
       document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
   }
}else{
   jsApiCall();
}
}
callpay();
</script>
</head>
<body>
</br></br></br></br>
</body>
</html>

代碼引用WxPayPubHelper,
WxPay.pub.config.php
配置文件
class WxPayConf_pub
{
//=======【基本信息設置】=====================================
//微信公衆號身份的惟一標識。審覈經過後,在微信發送的郵件中查看
const APPID = 'xxx';
//受理商ID,身份標識
const MCHID = 'xxx';
//商戶支付密鑰Key。審覈經過後,在微信發送的郵件中查看
const KEY = 'xxx';
//JSAPI接口中獲取openid,審覈後在公衆平臺開啓開發模式後可查看
const APPSECRET = 'xxx';
//=======【JSAPI路徑設置】===================================
//獲取access_token過程當中的跳轉uri,經過跳轉將code傳入jsapi支付頁面
const JS_API_CALL_URL = 'http://www.xxx.com/weixin/js_api_call.php';
//=======【證書路徑設置】=====================================
//證書路徑,注意應該填寫絕對路徑
const SSLCERT_PATH = '/weixin/WxPayPubHelper/cacert/apiclient_cert.pem';
const SSLKEY_PATH = '/weixin/WxPayPubHelper/cacert/apiclient_key.pem';
//=======【異步通知url設置】===================================
//異步通知url,商戶根據實際開發過程設定
const NOTIFY_URL = 'http://www.xxx.com/weixin/notify_url.php';
//=======【curl超時設置】===================================
//本例程經過curl使用HTTP POST方法,此處可修改其超時時間,默認爲30秒
const CURL_TIMEOUT = 30;
}
?>
根據申請的信息填寫

找到notify_url.php文件
上面添加
define('IN_ECS', true);
require('../includes/init.php');
require('../includes/lib_payment.php');
調用訂單信息

notify_url.php添加支付後修改訂單狀態
if($notify->checkSign() == TRUE)
{
if ($notify->data["return_code"] == "FAIL") {
//此處應該更新一下訂單狀態,商戶自行增刪操做
//$log_->log_result($log_name,"【通訊出錯】:\n".$xml."\n");
}
elseif($notify->data["result_code"] == "FAIL"){
//此處應該更新一下訂單狀態,商戶自行增刪操做
//$log_->log_result($log_name,"【業務出錯】:\n".$xml."\n");
}
else{
//此處應該更新一下訂單狀態,商戶自行增刪操做
//$log_->log_result($log_name,"【支付成功】:\n".$xml."\n");
$order = $notify->getData();
$log_id=get_order_id_by_sn($order["out_trade_no"]);
order_paid($log_id);
}
//商戶自行增長處理流程,
//例如:更新訂單狀態
//例如:數據庫操做
//例如:推送支付完成信息
}

7
更多安全信息和詳細信息就不列舉了
View Code

ecshop專題頁面添加關鍵詞_描述

ecshop專題頁面添加關鍵詞 描述 (紅色爲添加部分)
 
後臺管理模板topic_edit.htm
      <table width="90%" border="0"  align="center" cellpadding="0" cellspacing="0" id="advanced-table" style="display:none;">
        <tr>
          <td class="label">關鍵詞:</td>
          <td ><textarea name="topic_keywords" id="topic_keywords" cols="40" rows="3">{$topic.keywords}</textarea>
          </td>
        </tr>
        <tr>
          <td class="label">描述信息:</td>
          <td ><textarea name="topic_description" id="topic_description" cols="40" rows="5">{$topic.description}</textarea>
            <div> <a href="javascript:chanageSize(3,'topic_description');">[+]</a> <a href="javascript:chanageSize(-3,'topic_description');">[-]</a> </div></td>
          </td>
        </tr>
          <tr>
          <td class="label"><a href="javascript:showNotice('noticeTemplateFile');" title="{$lang.form_notice}"><img src="images/notice.gif" width="16" height="16" border="0" alt="{$lang.form_notice}"></a>{$lang.template_file}</td>
          <td ><input name="topic_template_file" type="text" id="topic_template_file" value="{$topic.template}" size="40" />
          <span class="notice-span" id="noticeTemplateFile">{$lang.notice_template_file}</span></td>
        </tr>
        <tr>
          <td class="label"><a href="javascript:showNotice('noticeCss');" title="{$lang.form_notice}"><img src="images/notice.gif" width="16" height="16" border="0" alt="{$lang.form_notice}"></a>{$lang.style_sheet}</td>
          <td ><textarea name="topic_css" id="topic_css" cols="40" rows="5">{$topic.css}</textarea>
            <span class="notice-span" id="noticeCss">{$lang.notice_css}</span>
            <div> <a href="javascript:chanageSize(3,'topic_css');">[+]</a> <a href="javascript:chanageSize(-3,'topic_css');">[-]</a> </div></td>
        </tr>
      </table>
後臺管理PHP文件topic.php
    //echo $data;
    //exit;
    if ($is_insert)
    {
        $sql = "INSERT INTO " . $ecs->table('topic') . " (title,start_time,end_time,data,intro,template,css,keywords,description)" .
                "VALUES ('$_POST[topic_name]','$start_time','$end_time','$data','$_POST[topic_intro]','$_POST[topic_template_file]','$_POST[topic_css]','$_POST[topic_keywords]','$_POST[topic_description]')";
    }
    else
    {
        $sql = "UPDATE " . $ecs->table('topic') .
                "SET title='$_POST[topic_name]',start_time='$start_time',end_time='$end_time',data='$data',intro='$_POST[topic_intro]',template='$_POST[topic_template_file]',css='$_POST[topic_css]',keywords='$_POST[topic_keywords]',description='$_POST[topic_description]'" .
               " WHERE topic_id='$topic_id' LIMIT 1";
    }
 
數據庫 _topic

 
根目錄topic.php中找到「/* 模板賦值 */」在下面添加以下代碼
$smarty->assign('keywords', htmlspecialchars($topic['keywords']));
$smarty->assign('description', htmlspecialchars($topic['description']));
 
 
 
 
 
View Code

分級顯示會員價格

<!-- {foreach from=$rank_prices item=rank_price key=key} 會員等級對應的價格-->
    <!-- {if $key eq $smarty.session.user_rank} -->
        {$rank_price.rank_name}:</strong>
        <span class="vip">{$rank_price.price}</span>

        <!-- {/if} -->
    <!--{/foreach}-->
View Code

分析ecshop中ur_here.lbi的原理

cshop中,ur_here.lbi都是用來處理ecshop系統導航的.ecshop導航的全部規則,都是經過他來處理的。 ecshop中的導航欄目,都是經過id或者是url規則,來動態生成的。而ecshop模板中的ur_here.lb

    ecshop中,ur_here.lbi都是用來處理ecshop系統導航的.ecshop導航的全部規則,都是經過他來處理的。
 ecshop中的導航欄目,都是經過id或者是url規則,來動態生成的。而ecshop模板中的ur_here.lbi就是負責來顯示該操做欄目的.
 打開includes/lib_main.php中的assign_ur_here(). $page_title = $GLOBALS['_CFG']['shop_title'] . ' - ' . 'Powered by ECShop';是用來處理ecshop頁面標題的,而$ur_here    = '<a href=".">' . $GLOBALS['_LANG']['home'] . '</a>';倒是用來處理操做欄目的。
  $cur_url = basename(PHP_SELF);
    if (intval($GLOBALS['_CFG']['rewrite']))
    {
        $filename = strpos($cur_url,'-') ? substr($cur_url, 0, strpos($cur_url,'-')) : substr($cur_url, 0, -4);
    }
    else
    {
        $filename = substr($cur_url, 0, -4);
    }
 做用是來取得文件名稱的前綴的。好比index.php.則返回index.而經過他,能夠取得對應語言好裏面的語言文字信息,也能夠靈活對他的url進行處理.若是是有分類的,他能夠循環的讀出他子類的url.
   if (!empty($cat_arr))
            {
                krsort($cat_arr);
                foreach ($cat_arr AS $val)
                {
                    $page_title = htmlspecialchars($val['cat_name']) . '_' . $page_title;
                    $args       = array($key => $val['cat_id']);
                    $ur_here   .= ' <code>&gt;</code> <a href="' . build_uri($type, $args, $val['cat_name']) . '">' .
                                    htmlspecialchars($val['cat_name']) . '</a>';
                }
            }
View Code

模板引擎實例

好比 程序裏面引用的最新商品模塊 對應的庫文件是:recomment_new.lbi
在php文件中 經過smarty賦值 new_goods 後 在 對於的模板文件中 只須要應用對應的值便可
這是最新商品的 庫文件 其實 咱們去掉 div標籤後 還原最簡單的代碼
{foreach from=$new_goods item=goods}
{$goods.url} ======== 商品的連接
{$goods.thumb} ======== 商品的縮略圖
{$goods.short_style_name} ======== 商品的名稱
{$goods.promote_price} ======== 商品促銷價格
{$goods.shop_price} ======== 商品正式銷售價格
{/foreach}
其實 簡化的smarty模板引擎 比較簡單 具體的 能夠參考 smarty手冊
View Code

判斷用戶是否登陸

<!--若是會員登錄了{if $smarty.session.user_name}--

<!--{/if}-->
View Code

限定名稱長度

truncate:10

在 ecshop 首頁調用分類下面的商品屬性

在index.php中添加
 $smarty->assign('filter_attr_list',  filter_attr_list(2,''));   //2爲大分類ID

function filter_attr_list($cat_id,$filter_attr='')
{
$cat = get_cat_info($cat_id);
$cat_id=$cat[cat_id];
$children = get_children($cat_id);
// $cat['filter_attr']=$filter_attr;  ouyangyong
        $cat_filter_attr = explode(',', $cat['filter_attr']);       //提取出此分類的篩選屬性
        $all_attr_list = array();


     foreach ($cat_filter_attr AS $key => $value)
        {      $sql = "SELECT a.attr_name,a.attr_id FROM " . $GLOBALS['ecs']->table('attribute') . " AS a, " . 
$GLOBALS['ecs']->table('goods_attr') . " AS ga, " . 
$GLOBALS['ecs']->table('goods') . " AS g WHERE ($children OR " . get_extension_goods($children) . ") AND a.attr_id = ga.attr_id AND g.goods_id = ga.goods_id AND g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND a.attr_id='$value'";
            if($temp_name = $GLOBALS['db']->getRow($sql))
            {
                $all_attr_list[$key]['filter_attr_name'] = $temp_name['attr_name'];
$all_attr_list[$key]['filter_attr_id'] = $temp_name['attr_id'];

                $sql = "SELECT a.attr_id, MIN(a.goods_attr_id ) AS goods_id, a.attr_value AS attr_value FROM " . $GLOBALS['ecs']->table('goods_attr') . " AS a, " . $GLOBALS['ecs']->table('goods') .
                       " AS g" .
                       " WHERE ($children OR " . get_extension_goods($children) . ') AND g.goods_id = a.goods_id AND g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 '.
                       " AND a.attr_id='$value' ".
                       " GROUP BY a.attr_value";

                $attr_list = $GLOBALS['db']->getAll($sql);
                $temp_arrt_url_arrcc = array();

                for ($i = 0; $i < count($cat_filter_attr); $i++)        //獲取當前url中已選擇屬性的值,並保留在數組中
                {
                    $temp_arrt_url_arrc[$i] =  0;
                }

                $temp_arrt_url_arrc[$key] = 0;                           //「所有」的信息生成
                $temp_arrt_url = implode('.', $temp_arrt_url_arrc);
                $all_attr_list[$key]['attr_list'][0]['attr_value'] = '所有';  //$_LANG['all_attribute'];
                $all_attr_list[$key]['attr_list'][0]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']);
                $all_attr_list[$key]['attr_list'][0]['selected'] = empty($filter_attr[$key]) ? 1 : 0;

                foreach ($attr_list as $k => $v)
                {  
                    $temp_key = $k + 1;
                    $temp_arrt_url_arrc[$key] = $v['goods_id'];       //爲url中表明當前篩選屬性的位置變量賦值,並生成以‘.’分隔的篩選屬性字符串
                    $temp_arrt_url = implode('.', $temp_arrt_url_arrc);

                    $all_attr_list[$key]['attr_list'][$temp_key]['attr_value'] = $v['attr_value'];
                    $all_attr_list[$key]['attr_list'][$temp_key]['url'] = build_uri('category', array('cid'=>$cat_id, 'bid'=>$brand, 'price_min'=>$price_min, 'price_max'=>$price_max, 'filter_attr'=>$temp_arrt_url), $cat['cat_name']);

                    if (!empty($filter_attr[$key]) AND $filter_attr[$key] == $v['goods_id'])
                    {
                        $all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 1;
                    }
                    else
                    {
                        $all_attr_list[$key]['attr_list'][$temp_key]['selected'] = 0;
                    }
                }
            }


        }
return $all_attr_list;
}


在index.dwt相應的位置添加。

<!--組合搜索 開始--> 
<!--{if $brands.1 || $price_grade.1 || $filter_attr_list}-->
<div><img src="images/artt_top1.gif"></div>
<div class="indexscreeBox">
<ul>
<!--{foreach from=$filter_attr_list item=filter_attr}-->
<li> <strong>{$filter_attr.filter_attr_name|escape:html}:</strong>
<!--{foreach from=$filter_attr.attr_list item=attr}--> 
<!-- {if $attr.selected} --> 
<span>{$attr.attr_value}</span> 
<!-- {else} --> 
<a href="{$attr.url}">{$attr.attr_value}</a>
<!-- {/if} --> 
<!--{/foreach}--> 
<div class="clear"></div>
</li>
<!--{/foreach}--> 
</ul>
</div>
<div><img src="images/artt_bottom1.gif"></div>
<div class="blank5"></div>
<!-- {/if} --> 
<!--組合搜索 結束--> 


效果。
View Code

foreach

{foreach},{foreachelse} {foreach} 用於像循環訪問一個數字索引數組同樣循環訪問一個關聯數組,與僅能訪問數字索引數組的{section}不一樣,{foreach}的語法比 {section}的語法簡單得多,可是做爲一個折衷方案也僅能用於單個數組。每一個{foreach}標記必須與關閉標記{/foreach}成對出現。 屬性 一、from 類型:array數組 必要性:Yes必要 默認值:n/a 描述:循環訪問的數組 二、item 類型:string字符串 必要性:Yes必要 默認值:n/a 描述:當前元素的變量名 三、key 類型:string字符串 必要性:No可選 默認值:n/a 描述:當前鍵名的變量名 四、name 類型:string字符串 必要性:No可選 默認值:n/a 描述:用於訪問foreach屬性的foreach循環的名稱 from 和item是必要屬性 {foreach}循環的name能夠是任何字母,數組,下劃線的組合,參考PHP變量。 {foreach}循環能夠嵌套,嵌套的{foreach}的名稱應當互不相同。 from屬性一般是值數組,被用於判斷{foreach}的循環次數。 在from 變量中沒有值時,將執行{foreachelse}。 {foreach}循環也有自身屬性的變量,能夠經過 {$smarty.foreach.name.property}訪問,其中"name"是name屬性。 注意:name屬性僅在須要訪問 {foreach}屬性時有效,與{section}不一樣。訪問未定義name的{foreach}屬性不會拋出一個錯誤,但將致使不可預知的結果。 {foreach} 屬性有index, iteration, first, last, show, total. 示例: 例一. item屬性 assign('myArray', $arr); ?> 用模板以無序列表輸出$myArray

{foreach from=$myArray item=foo}
{$foo}
{/foreach}
上例將輸出:

1000
1001
1002
例二. 演示item和key屬性 'Tennis', 3 => 'Swimming', 8 => 'Coding'); $smarty->assign('myArray', $arr); ?> 用模板按鍵名/鍵值對的形式輸出$myArray, 相似於PHP的foreach。

{foreach from=$myArray key=k item=v}
{$k}: {$v}
{/foreach}
上例將輸出:

9: Tennis
3: Swimming
8: Coding
例三. {foreach}的item屬性是關聯數組 array('no' => 2456, 'label' => 'Salad'), 96 => array('no' => 4889, 'label' => 'Cream') ); $smarty->assign('items', $items_list); ?> 模板中,url經過$myId輸出$items

{foreach from=$items key=myId item=i}
{$i.no}: {$i.label}
{/foreach}
上例將輸出:

2456: Salad
4889: Cream
例四. {foreach}使用嵌套的item和key 向Smarty 設置一個數組,對於每一個鍵名對應的每一個循環值都包括鍵。 assign('contacts', array( array('phone' => '1', 'fax' => '2', 'cell' => '3'), array('phone' => '555-4444', 'fax' => '555-3333', 'cell' => '760-1234') )); ?> 用於輸出$contact的模板。 {foreach name=outer item=contact from=$contacts}

{foreach key=key item=item from=$contact} {$key}: {$item}
{/foreach} {/foreach} 上例將輸出:

phone: 1
fax: 2
cell: 3

phone: 555-4444
fax: 555-3333
cell: 760-1234
例五. 使用{foreachelse}的數據庫示例 一個數據庫(例如PEAR或ADODB)的搜索腳本示例, assign('results', $db->getAssoc($sql) ); ?> 藉助{foreachelse}標記在沒有結果時模板輸出"None found"字樣。 {foreach key=cid item=con from=$results} {$con.name} - {$con.nick} 
{foreachelse} No items were found in the search {/foreach} .index包含當前數組索引,從零開始。 例六. index示例 {* 每五行輸出一次頭部區塊 *}

{foreach from=$items key=myId item=i name=foo} {if $smarty.foreach.foo.index % 5 == 0} {/if} {/foreach}
Title
{$i.label}
iteration包含當前循環次數,與index不一樣,從1開始,每次循環增加1。 例七. iteration和index示例 {* this will output 0|1, 1|2, 2|3, ... etc *} {* 該例將輸出0|1, 1|2, 2|3, ... 等等 *} {foreach from=$myArray item=i name=foo} {$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration}, {/foreach} first在當前{foreach}循環處於初始位置時值爲TRUE。 例八. first屬性示例 {* 對於第一個條目顯示LATEST而不是id *}

{foreach from=$items key=myId item=i name=foo} {/foreach}
{if $smarty.foreach.foo.first}LATEST{else}{$myId}{/if}    {$i.label}
last在當前{foreach}循環處於最終位置是值爲TRUE。 例九. last屬性示例 {* 在列表結束時增長一個水平標記 *}) {foreach from=$items key=part_id item=prod name=products} {$prod} {if $smarty.foreach.products.last}

{else},{/if} {foreachelse} ... content ... {/foreach} show是{foreach}的參數. show是一個布爾值。若是值爲FALSE,{foreach}將不被顯示。若是有對應的{foreachelse},將被顯示。 total包括 {foreach}將循環的次數,既能夠在{foreach}中使用,也能夠在以後使用。 例十. total屬性示例 {* 在結束位置顯示行數 *} {foreach from=$items key=part_id item=prod name=foo} {$prod.name>

{if $smarty.foreach.foo.last}

{$smarty.foreach.foo.total} items
{/if} {foreachelse} ... something else ... {/foreach} 問題 {foreach from=$custid item=curr_id key=num} {if num is odd} 幹啥 {else} 幹其餘的 {/if} {/foreach} 與如下的代碼的區別,odd和enen的意義? {foreach from=$custid item=curr_id key=num} {if num%2==0} 幹啥 {else} 幹其餘的 {/if} {/foreach}
View Code

onclick

onclick="this.className='current'"
View Code

ECSHOP商品屬性,商品分類,商品類型,商品篩選,商品描述,商品圖片,商品列表,商品管理使用教程

文章標題

教程類別

添加日期

瀏覽量

ECSHOP商品批量導出,ECSHOP商品數據包製做導出

ECSHOP使用教程

2013-10-26

2892

ECSHOP商品圖片批量處理,ECSHOP商品縮略圖片模糊處理教程

ECSHOP使用教程

2013-10-26

2496

ECSHOP虛擬商品,ECSHOP商品虛擬卡

ECSHOP使用教程

2013-10-26

1912

ECSHOP標籤列表,ECSHOP商品標籤管理

ECSHOP使用教程

2013-10-26

2097

ECSHOP商品品牌,ECSHOP商品品牌圖片添加設置

ECSHOP使用教程

2013-10-26

2230

ECSHOP添加新商品,ECSHOP商品描述

ECSHOP使用教程

2013-10-26

3754

ECSHOP商品分類,ECSHOP商品分類編輯

ECSHOP使用教程

2013-10-26

3244

ECSHOP商品屬性,ECSHOP商品屬性篩選

ECSHOP使用教程

2013-10-26

4068

ECSHOP商品類型,ECSHOP商品屬性類型

ECSHOP使用教程

2013-10-26

2768

ECSHOP商品批量上傳,ECSHOP商品數據包導入

ECSHOP使用教程

2013-10-26

6990

ECSHOP商品自動上下架,ECSHOP商品批量下架上架

ECSHOP使用教程

2013-10-26

2591

ECSHOP更改加密串,ECSHOP商品虛擬卡加密串

ECSHOP使用教程

2013-10-25

1639

ECSHOP生成商品代碼,ECSHOP商品推廣代碼

ECSHOP使用教程

2013-10-25

1656

ECSHOP商品批量修改,ECSHOP商品描述修改

ECSHOP使用教程

2013-10-25

2012

ECSHOP商品回收站,ECSHOP商品批量刪除

ECSHOP使用教程

2013-10-25

3778

ECSHOP用戶評論,ECSHOP商品用戶評論

ECSHOP使用教程

2013-10-25

2528

ECSHOP商品列表,ECSHOP後臺商品列表管理

ECSHOP使用教程

2013-10-25

1910

相關文章
相關標籤/搜索