├── modules └── shops │ ├── index.html │ ├── admin │ ├── index.html │ ├── keywords.php │ ├── list_block_cat.php │ ├── list_block.php │ ├── list_cat.php │ ├── list_group.php │ ├── list_location.php │ ├── view.php │ ├── del_block_cat.php │ ├── del_location.php │ ├── delunit.php │ ├── delmoney.php │ ├── delweight.php │ ├── tagsajax.php │ ├── del_source.php │ ├── del_content.php │ ├── exptime.php │ ├── custom_form.php │ ├── change_location.php │ ├── change_source.php │ ├── publtime.php │ ├── chang_block_cat.php │ ├── getcatalog.php │ ├── change_block.php │ ├── alias.php │ ├── updateprice.php │ ├── print.php │ ├── change_cat.php │ └── point.php │ ├── blocks │ ├── index.html │ ├── module.block_filter_product_cat.ini │ ├── module.block_filter_product.ini │ ├── global.block_catalogs.ini │ ├── global.block_price_view.ini │ ├── global.block_relates_product.ini │ ├── global.block_product_center.ini │ ├── global.block_cart.php │ └── global.block_bxproduct_center.ini │ ├── funcs │ ├── index.html │ ├── ajax.php │ ├── remove.php │ ├── sitemap.php │ ├── download.php │ ├── print_pro.php │ ├── history.php │ ├── delhis.php │ ├── shippingajax.php │ └── wishlist_update.php │ ├── language │ └── index.html │ ├── comment.php │ ├── menu.php │ ├── rssdata.php │ ├── wallet.admin.php │ ├── version.php │ ├── notification.php │ └── admin.menu.php ├── themes ├── default │ ├── images │ │ └── shops │ │ │ ├── index.html │ │ │ ├── tiny-slider │ │ │ ├── index.html │ │ │ ├── min │ │ │ │ ├── index.html │ │ │ │ └── tiny-slider.helper.ie8.js │ │ │ ├── sourcemaps │ │ │ │ └── index.html │ │ │ └── tiny-slider.css │ │ │ ├── bgbt.png │ │ │ ├── buzz.png │ │ │ ├── flickr.png │ │ │ ├── google.png │ │ │ ├── print.png │ │ │ ├── square.jpg │ │ │ ├── star.png │ │ │ ├── 24x24-no.png │ │ │ ├── controls.png │ │ │ ├── no-image.jpg │ │ │ ├── pro_tab.png │ │ │ ├── star-png.png │ │ │ ├── twitter.png │ │ │ ├── zoom-img.png │ │ │ ├── ajax-loader.gif │ │ │ ├── bg_divtab.png │ │ │ ├── previous-next.png │ │ │ ├── access_head_bg.png │ │ │ ├── icon_files │ │ │ ├── doc.png │ │ │ ├── docx.png │ │ │ ├── odt.png │ │ │ ├── pdf.png │ │ │ ├── ppt.png │ │ │ ├── pptx.png │ │ │ ├── rar.png │ │ │ ├── xsl.png │ │ │ ├── xslx.png │ │ │ ├── zip.png │ │ │ └── document.png │ │ │ ├── rate │ │ │ ├── rate-btn2.png │ │ │ ├── rate-stars.png │ │ │ ├── rate-btn2-hover.png │ │ │ └── rate-btn3-hover.png │ │ │ └── OwlCarousel2 │ │ │ ├── assets │ │ │ ├── owl.video.play.png │ │ │ └── owl.carousel.min.css │ │ │ └── LICENSE │ └── modules │ │ └── shops │ │ ├── index.html │ │ ├── block.price_view.tpl │ │ ├── wishlist.tpl │ │ ├── custom_tab_fields.tpl │ │ ├── main.tpl │ │ ├── blockcat.tpl │ │ ├── block.catalogsv.tpl │ │ ├── main_cat.tpl │ │ ├── block.others_product.tpl │ │ ├── tag.tpl │ │ ├── block.cart.tpl │ │ ├── point.tpl │ │ ├── print_pro.tpl │ │ ├── review_list.tpl │ │ ├── viewcat.tpl │ │ ├── download_content.tpl │ │ ├── block.search.tpl │ │ ├── block.filter_product.tpl │ │ ├── coupons_info.tpl │ │ ├── block.bxproduct_center.tpl │ │ ├── email_new_order.tpl │ │ ├── block.product_center.tpl │ │ ├── history_order.tpl │ │ ├── compare.tpl │ │ ├── print.tpl │ │ └── block.filter_product_cat.tpl └── admin_default │ └── modules │ └── shops │ ├── index.html │ ├── main.tpl │ ├── shipping_menu.tpl │ ├── group_delete.tpl │ ├── cat_delete.tpl │ ├── updateprice.tpl │ ├── location.tpl │ ├── tags_lists.tpl │ ├── location_lists.tpl │ ├── block_cat_list.tpl │ ├── block.tpl │ ├── point.tpl │ ├── seller.tpl │ ├── block_list.tpl │ ├── email_new_order_payment.tpl │ ├── field_tab.tpl │ ├── coupons_view.tpl │ ├── shipping.tpl │ ├── docpay.tpl │ ├── print.tpl │ ├── topics.tpl │ ├── group_lists.tpl │ ├── getprice.tpl │ ├── order_seller.tpl │ ├── cat_lists.tpl │ ├── prounit.tpl │ └── review.tpl ├── assets └── shops │ └── 2015_05 │ └── giay-bup-be-ngoi-sao-nhap-khau.jpg ├── uploads └── shops │ └── 2015_05 │ └── giay-bup-be-ngoi-sao-nhap-khau.jpg ├── config.ini ├── .gitignore ├── README-SHOPS.md ├── CONTRIBUTING-SHOPS.md └── CHANGELOG-SHOPS.txt /modules/shops/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /modules/shops/admin/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /modules/shops/blocks/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /modules/shops/funcs/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /modules/shops/language/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/images/shops/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/modules/shops/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/images/shops/tiny-slider/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/images/shops/tiny-slider/min/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/images/shops/tiny-slider/sourcemaps/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /themes/default/images/shops/bgbt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/bgbt.png -------------------------------------------------------------------------------- /themes/default/images/shops/buzz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/buzz.png -------------------------------------------------------------------------------- /themes/default/images/shops/flickr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/flickr.png -------------------------------------------------------------------------------- /themes/default/images/shops/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/google.png -------------------------------------------------------------------------------- /themes/default/images/shops/print.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/print.png -------------------------------------------------------------------------------- /themes/default/images/shops/square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/square.jpg -------------------------------------------------------------------------------- /themes/default/images/shops/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/star.png -------------------------------------------------------------------------------- /themes/default/images/shops/24x24-no.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/24x24-no.png -------------------------------------------------------------------------------- /themes/default/images/shops/controls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/controls.png -------------------------------------------------------------------------------- /themes/default/images/shops/no-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/no-image.jpg -------------------------------------------------------------------------------- /themes/default/images/shops/pro_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/pro_tab.png -------------------------------------------------------------------------------- /themes/default/images/shops/star-png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/star-png.png -------------------------------------------------------------------------------- /themes/default/images/shops/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/twitter.png -------------------------------------------------------------------------------- /themes/default/images/shops/zoom-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/zoom-img.png -------------------------------------------------------------------------------- /themes/default/images/shops/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/ajax-loader.gif -------------------------------------------------------------------------------- /themes/default/images/shops/bg_divtab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/bg_divtab.png -------------------------------------------------------------------------------- /themes/default/images/shops/previous-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/previous-next.png -------------------------------------------------------------------------------- /themes/default/images/shops/access_head_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/access_head_bg.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/doc.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/docx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/docx.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/odt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/odt.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/pdf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/pdf.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/ppt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/ppt.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/pptx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/pptx.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/rar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/rar.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/xsl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/xsl.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/xslx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/xslx.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/zip.png -------------------------------------------------------------------------------- /themes/default/images/shops/rate/rate-btn2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/rate/rate-btn2.png -------------------------------------------------------------------------------- /themes/default/images/shops/rate/rate-stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/rate/rate-stars.png -------------------------------------------------------------------------------- /themes/default/images/shops/icon_files/document.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/icon_files/document.png -------------------------------------------------------------------------------- /themes/default/images/shops/rate/rate-btn2-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/rate/rate-btn2-hover.png -------------------------------------------------------------------------------- /themes/default/images/shops/rate/rate-btn3-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/rate/rate-btn3-hover.png -------------------------------------------------------------------------------- /assets/shops/2015_05/giay-bup-be-ngoi-sao-nhap-khau.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/assets/shops/2015_05/giay-bup-be-ngoi-sao-nhap-khau.jpg -------------------------------------------------------------------------------- /uploads/shops/2015_05/giay-bup-be-ngoi-sao-nhap-khau.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/uploads/shops/2015_05/giay-bup-be-ngoi-sao-nhap-khau.jpg -------------------------------------------------------------------------------- /themes/default/images/shops/OwlCarousel2/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nukeviet/module-shops/HEAD/themes/default/images/shops/OwlCarousel2/assets/owl.video.play.png -------------------------------------------------------------------------------- /config.ini: -------------------------------------------------------------------------------- 1 | [extension] 2 | id="31" 3 | type="module" 4 | name="shops" 5 | version="4.5.04" 6 | 7 | [author] 8 | name="VINADES.,JSC" 9 | email="nukeviet.store@vinades.vn" 10 | 11 | [note] 12 | text="Module quản lý gian hàng" 13 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.price_view.tpl: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /themes/default/modules/shops/wishlist.tpl: -------------------------------------------------------------------------------- 1 | 2 |

{TITLE}

3 |
4 |
{CONTENT}
5 | 8 | -------------------------------------------------------------------------------- /themes/default/modules/shops/custom_tab_fields.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |

{TEMPLATE_NAME}

4 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /themes/default/modules/shops/main.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | {CONTENT} 5 |
6 | 7 | 8 |
9 | {CONTENT} 10 |
11 | 12 | 13 | -------------------------------------------------------------------------------- /themes/default/modules/shops/blockcat.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 6 | 7 |
8 | {TITLE} 9 |
10 | 11 | 12 |
{BODYTEXT}
13 | 14 | {CONTENT} 15 |
16 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/main.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
{KEY.title}{KEY.value}{KEY.unit}
14 |
15 | -------------------------------------------------------------------------------- /modules/shops/admin/keywords.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $content = $nv_Request->get_title('content', 'post', '', 1); 16 | $keywords = nv_get_keywords($content); 17 | 18 | include NV_ROOTDIR . '/includes/header.php'; 19 | echo $keywords; 20 | include NV_ROOTDIR . '/includes/footer.php'; 21 | -------------------------------------------------------------------------------- /modules/shops/admin/list_block_cat.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $contents = nv_show_block_cat_list(); 19 | 20 | include NV_ROOTDIR . '/includes/header.php'; 21 | echo $contents; 22 | include NV_ROOTDIR . '/includes/footer.php'; 23 | -------------------------------------------------------------------------------- /modules/shops/admin/list_block.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $bid = $nv_Request->get_int('bid', 'get', 0); 19 | 20 | $contents = nv_show_block_list($bid); 21 | 22 | include NV_ROOTDIR . '/includes/header.php'; 23 | echo $contents; 24 | include NV_ROOTDIR . '/includes/footer.php'; 25 | -------------------------------------------------------------------------------- /modules/shops/admin/list_cat.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $parentid = $nv_Request->get_int('parentid', 'get', 0); 19 | 20 | $contents = shops_show_cat_list($parentid); 21 | 22 | include NV_ROOTDIR . '/includes/header.php'; 23 | echo $contents; 24 | include NV_ROOTDIR . '/includes/footer.php'; 25 | -------------------------------------------------------------------------------- /modules/shops/admin/list_group.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $parentid = $nv_Request->get_int('parentid', 'get', 0); 19 | 20 | $contents = shops_show_group_list($parentid); 21 | 22 | include NV_ROOTDIR . '/includes/header.php'; 23 | echo $contents; 24 | include NV_ROOTDIR . '/includes/footer.php'; 25 | -------------------------------------------------------------------------------- /modules/shops/comment.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_MAINFILE')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $numf = $db->query('SELECT COUNT(*) FROM ' . NV_PREFIXLANG . '_comment where module= ' . $db->quote($row['module']) . ' AND id= ' . $row['id'] . ' AND status=1')->fetchColumn(); 16 | 17 | $query = 'UPDATE ' . $db_config['prefix'] . '_' . $mod_info['module_data'] . '_rows SET hitscm=' . $numf . ' WHERE id=' . $row['id']; 18 | $db->query($query); 19 | -------------------------------------------------------------------------------- /modules/shops/blocks/module.block_filter_product_cat.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Block filter product cat 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | checkbox 11 | 12 | nv_block_config_filter_product_cat 13 | nv_block_config_filter_product_cat_submit 14 | 15 | 16 | Cấu hình hiển thị 17 | Cấu hình hiển thị 18 | 19 | 20 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.catalogsv.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 13 |
14 | 15 | 22 | -------------------------------------------------------------------------------- /modules/shops/blocks/module.block_filter_product.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Block filter product 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 1 11 | 12 | nv_block_config_filter_product 13 | nv_block_config_filter_product_submit 14 | 15 | 16 | Lọc theo nhóm giá 17 | 18 | 19 | Filter by price group 20 | 21 | 22 | -------------------------------------------------------------------------------- /modules/shops/menu.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $sql = 'SELECT * FROM ' . $db_config['prefix'] . '_' . $mod_data . '_catalogs ORDER BY sort ASC'; 16 | $result = $db->query($sql); 17 | while ($row = $result->fetch()) { 18 | $array_item[$row['catid']] = array( 19 | 'parentid' => $row['parentid'], 20 | 'groups_view' => $row['groups_view'], 21 | 'key' => $row['catid'], 22 | 'title' => $row[NV_LANG_DATA . '_title'], 23 | 'alias' => $row[NV_LANG_DATA . '_alias'], 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /themes/default/modules/shops/main_cat.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 6 | 7 | {TITLE_CATALOG} 8 | 9 | {TITLE_CATALOG} ({NUM_PRO} {LANG.title_products}) 10 | 11 | 12 | {SUBCAT.title} 13 | 14 |
15 |
16 | {CONTENT} 17 |
18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /modules/shops/funcs/ajax.php: -------------------------------------------------------------------------------- 1 | isset_request('changesprice', 'post')) { 16 | $sorts = $nv_Request->get_int('sort', 'post', 0); 17 | $nv_Request->set_Session('sorts', $sorts, NV_LIVE_SESSION_TIME); 18 | $nv_Cache->delMod($module_name); 19 | die('OK'); 20 | } 21 | 22 | if ($nv_Request->isset_request('changeviewtype', 'post')) { 23 | $viewtype = $nv_Request->get_string('viewtype', 'post', ''); 24 | $nv_Request->set_Session('viewtype', $viewtype, NV_LIVE_SESSION_TIME); 25 | $nv_Cache->delMod($module_name); 26 | die('OK'); 27 | } -------------------------------------------------------------------------------- /modules/shops/rssdata.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_RSS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | global $db_config; 16 | 17 | $rssarray = array(); 18 | 19 | $sql = 'SELECT catid, parentid, ' . NV_LANG_DATA . '_title AS title, ' . NV_LANG_DATA . '_alias AS alias FROM ' . $db_config['prefix'] . '_' . $mod_data . '_catalogs ORDER BY weight, sort'; 20 | $list = $nv_Cache->db($sql, '', $mod_name); 21 | foreach ($list as $value) { 22 | $value['link'] = NV_BASE_SITEURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $mod_name . '&' . NV_OP_VARIABLE . '=rss/' . $value['alias']; 23 | $rssarray[] = $value; 24 | } 25 | -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_catalogs.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | block_catalogs 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 24 11 | 12 | nv_block_config_product_catalogs_blocks 13 | nv_block_config_product_catalogs_blocks_submit 14 | 15 | 16 | Count number for cut 17 | 18 | 19 | Số ký tự cắt 20 | 21 | 22 | Count number for cut 23 | 24 | 25 | Count number for cut 26 | 27 | 28 | -------------------------------------------------------------------------------- /modules/shops/admin/list_location.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $parentid = $nv_Request->get_int('parentid', 'get', 0); 19 | $page = $nv_Request->get_int('page', 'get', 1); 20 | $per_page = 10; 21 | $base_url = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=location'; 22 | 23 | $contents = shops_show_location_list($parentid, $page, $per_page, $base_url); 24 | 25 | include NV_ROOTDIR . '/includes/header.php'; 26 | echo $contents; 27 | include NV_ROOTDIR . '/includes/footer.php'; 28 | -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_price_view.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | block_catalogs 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 100000 11 | 1000000 12 | 100000 13 | 14 | nv_block_config_product_price_blocks 15 | nv_block_config_product_price_blocks_submit 16 | 17 | 18 | Giá thấp nhất 19 | Giá cao nhất 20 | Bước nhảy của giá 21 | 22 | 23 | Giá thấp nhất 24 | Giá cao nhất 25 | Bước nhảy của giá 26 | 27 | 28 | -------------------------------------------------------------------------------- /modules/shops/admin/view.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'get,post', 0); 16 | $row = $db->query('SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_rows where id=' . $id)->fetch(); 17 | if (! empty($row['id'])) { 18 | $_url_rewrite = nv_url_rewrite(NV_BASE_SITEURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=' . $global_array_shops_cat[$row['listcatid']]['alias'] . '/' . $row[NV_LANG_DATA . '_alias'] . $global_config['rewrite_exturl'], true); 19 | nv_redirect_location($_url_rewrite); 20 | } 21 | 22 | nv_info_die($lang_global['error_404_title'], $lang_global['error_404_title'], $lang_global['admin_no_allow_func']); 23 | -------------------------------------------------------------------------------- /modules/shops/wallet.admin.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_WALLET_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | /* 16 | * Các biến hỗ trợ 17 | * $module_name 18 | * $module_info 19 | * $module_file 20 | * $module_data 21 | * $module_upload 22 | * $order_info thông tin về trạng thái thanh toán, id của đơn hàng 23 | */ 24 | require NV_ROOTDIR . '/modules/' . $module_file . '/global.functions.php'; 25 | 26 | // Xác định trạng thái đơn hàng hiện tại, nếu không bằng 4 thì mới cho cập nhật 27 | $sql = "SELECT * FROM " . $db_config['prefix'] . "_" . $module_data . "_orders WHERE order_id=" . $order_info['order_id']; 28 | $order = $db->query($sql)->fetch(); 29 | if (!empty($order) and isAllowedUpdateOrder($order['transaction_status'])) { 30 | // Lưu giao dịch mới 31 | // FIXME 32 | 33 | // Cập nhật trạng thái đơn hàng 34 | // FIXME 35 | } 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore some static files and directories. 2 | /.gitattributes 3 | /.gitignore 4 | /.settings/ 5 | /.buildpath 6 | /.project 7 | /.htaccess 8 | /composer.json 9 | /config.php 10 | /CHANGELOG.txt 11 | /COPYRIGHT.txt 12 | /favicon.ico 13 | /index.php 14 | /LICENSE.txt 15 | /robots.php 16 | /robots.txt 17 | /web.config 18 | /admin/ 19 | /assets/ 20 | /data/ 21 | /includes/ 22 | /install/ 23 | /uploads/ 24 | /vendor/ 25 | /README.md 26 | 27 | # Ignore fix module files and directories. 28 | !/assets/shops 29 | !/assets/shops/* 30 | /modules/* 31 | !/modules/shops 32 | !/modules/shops/* 33 | /themes/* 34 | !/themes/admin_default/css/shops.css 35 | !/themes/admin_default/images/shops 36 | !/themes/admin_default/images/shops/* 37 | !/themes/admin_default/modules/shops 38 | !/themes/admin_default/modules/shops/* 39 | !/themes/default/css/shops.css 40 | !/themes/default/images/shops 41 | !/themes/default/images/shops/* 42 | !/themes/default/modules/shops 43 | !/themes/default/modules/shops/* 44 | !/service_shops_nganluong.php 45 | !/uploads/shops 46 | !/uploads/shops/* 47 | /error.php 48 | /.github 49 | /LICENSE 50 | /api.php 51 | -------------------------------------------------------------------------------- /modules/shops/admin/del_block_cat.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $bid = $nv_Request->get_int('bid', 'post', 0); 16 | 17 | $contents = "NO_" . $bid; 18 | $bid = $db->query("SELECT bid FROM " . $db_config['prefix'] . "_" . $module_data . "_block_cat WHERE bid=" . intval($bid))->fetchColumn(); 19 | if ($bid > 0) { 20 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_block_cat WHERE bid=" . $bid; 21 | if ($db->query($sql)) { 22 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_block WHERE bid=" . $bid; 23 | $db->query($sql); 24 | 25 | nv_fix_block_cat(); 26 | $nv_Cache->delMod($module_name); 27 | 28 | $contents = "OK_" . $bid; 29 | } 30 | } 31 | 32 | include NV_ROOTDIR . '/includes/header.php'; 33 | echo $contents; 34 | include NV_ROOTDIR . '/includes/footer.php'; 35 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.others_product.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 29 |
30 | -------------------------------------------------------------------------------- /themes/default/modules/shops/tag.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 9 | 10 |
11 | 16 | 17 |
18 | 19 |
20 | 21 |
22 | 23 |
24 | {CONTENT} 25 |
26 |
27 | 28 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/shipping_menu.tpl: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |
7 | 10 | 14 | 28 |
29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /modules/shops/admin/del_location.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $locationid = $nv_Request->get_int('locationid', 'post, get', 0); 16 | $contents = "NO_" . $locationid; 17 | 18 | list($locationid, $parentid, $title) = $db->query("SELECT id, parentid FROM " . $db_config['prefix'] . "_" . $module_data . "_location WHERE id=" . $locationid)->fetch(3); 19 | 20 | if ($locationid > 0) { 21 | $result = $db->query("DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_location WHERE parentid=" . $locationid); 22 | $result = $db->query("DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_location WHERE id=" . $locationid); 23 | if ($result) { 24 | $contents = 'OK'; 25 | nv_fix_location_order(); 26 | $nv_Cache->delMod($module_name); 27 | } 28 | } 29 | 30 | include NV_ROOTDIR . '/includes/header.php'; 31 | echo $contents; 32 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/default/images/shops/OwlCarousel2/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Owl 2 | Modified work Copyright 2016-2018 David Deutsch 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /modules/shops/admin/delunit.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'post,get', 0); 16 | $contents = "NO_" . $id; 17 | 18 | if ($id > 0) { 19 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_units WHERE id=" . $id; 20 | if ($db->exec($sql)) { 21 | $contents = "OK_" . $id; 22 | } 23 | } else { 24 | $listall = $nv_Request->get_string('listall', 'post,get'); 25 | $array_id = explode(',', $listall); 26 | $array_id = array_map("intval", $array_id); 27 | 28 | foreach ($array_id as $id) { 29 | if ($id > 0) { 30 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_units WHERE id=" . $id; 31 | $db->query($sql); 32 | } 33 | } 34 | 35 | $contents = "OK_0"; 36 | } 37 | 38 | $nv_Cache->delMod($module_name); 39 | 40 | include NV_ROOTDIR . '/includes/header.php'; 41 | echo $contents; 42 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /modules/shops/version.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | if (!defined('NV_ADMIN') or !defined('NV_MAINFILE')) { 11 | die('Stop!!!'); 12 | } 13 | 14 | $module_version = array( 15 | 'name' => 'Shops', // Tieu de module 16 | 'modfuncs' => 'main,viewcat,detail,search,cart,order,payment,complete,history,group,compare,wishlist,tag,point,shippingajax,download, blockcat,ajax', 17 | 'is_sysmod' => 0, // 1:0 => Co phai la module he thong hay khong 18 | 'virtual' => 1, // 1:0 => Co cho phep ao hao module hay khong 19 | 'version' => '4.5.04', // Module Shops 4 Release Candidate 1 20 | 'date' => 'Friday, April 21, 2023 15:00:00 GMT+07:00', // Ngay phat hanh phien ban 21 | 'author' => 'VINADES ', // Tac gia 22 | 'note' => '', // Ghi chu 23 | 'uploads_dir' => array( 24 | $module_upload, 25 | $module_upload . '/temp_pic', 26 | $module_upload . '/' . date('Y_m'), 27 | $module_upload . '/files' 28 | ), 29 | 'files_dir' => array( 30 | $module_upload . '/files_tpl' 31 | ) 32 | ); 33 | -------------------------------------------------------------------------------- /modules/shops/admin/delmoney.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'post,get', 0); 16 | $contents = "NO_" . $id; 17 | 18 | if ($id > 0) { 19 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_money_" . NV_LANG_DATA . " WHERE id=" . $id; 20 | if ($db->query($sql)) { 21 | $contents = "OK_" . $id; 22 | } 23 | } else { 24 | $listall = $nv_Request->get_string('listall', 'post,get'); 25 | $array_id = explode(',', $listall); 26 | $array_id = array_map("intval", $array_id); 27 | 28 | foreach ($array_id as $id) { 29 | if ($id > 0) { 30 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_money_" . NV_LANG_DATA . " WHERE id=" . $id; 31 | $db->query($sql); 32 | } 33 | } 34 | 35 | $contents = "OK_0"; 36 | } 37 | 38 | $nv_Cache->delMod($module_name); 39 | 40 | include NV_ROOTDIR . '/includes/header.php'; 41 | echo $contents; 42 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /modules/shops/admin/delweight.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'post,get', 0); 16 | $contents = "NO_" . $id; 17 | 18 | if ($id > 0) { 19 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_weight_" . NV_LANG_DATA . " WHERE id=" . $id; 20 | if ($db->query($sql)) { 21 | $contents = "OK_" . $id; 22 | } 23 | } else { 24 | $listall = $nv_Request->get_string('listall', 'post,get'); 25 | $array_id = explode(',', $listall); 26 | $array_id = array_map("intval", $array_id); 27 | 28 | foreach ($array_id as $id) { 29 | if ($id > 0) { 30 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_weight_" . NV_LANG_DATA . " WHERE id=" . $id; 31 | $db->query($sql); 32 | } 33 | } 34 | 35 | $contents = "OK_0"; 36 | } 37 | 38 | $nv_Cache->delMod($module_name); 39 | 40 | include NV_ROOTDIR . '/includes/header.php'; 41 | echo $contents; 42 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /modules/shops/funcs/remove.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if (! isset($_SESSION[$module_data . '_cart'])) { 16 | $_SESSION[$module_data . '_cart'] = array(); 17 | } 18 | 19 | $id = $nv_Request->get_int('id', 'post,get', 0); 20 | $group = $nv_Request->get_string('group', 'post,get', ''); 21 | if ($id > 0) { 22 | if (isset($_SESSION[$module_data . '_cart'][$id.'_'.$group])) { 23 | unset($_SESSION[$module_data . '_cart'][$id.'_'.$group]); 24 | echo $id.'_'.str_replace(',', '_', $group); 25 | } else { 26 | echo ""; 27 | } 28 | } else { 29 | $listall = $nv_Request->get_string('listall', 'post,get'); 30 | $array_id = explode(',', $listall); 31 | $array_id = array_map("intval", $array_id); 32 | foreach ($array_id as $id) { 33 | if ($id > 0) { 34 | if (isset($_SESSION[$module_data . '_cart'][$id.'_'.$group])) { 35 | unset($_SESSION[$module_data . '_cart'][$id.'_'.$group]); 36 | } 37 | } 38 | } 39 | echo "OK_0"; 40 | } -------------------------------------------------------------------------------- /themes/default/modules/shops/block.cart.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |

5 | {LANG.cart_title} : 6 | {NUM} 7 | {LANG.cart_product_title} 8 |

9 | 10 |

11 | {LANG.cart_product_total} : 12 | {TOTAL} {MONEY_UNIT} 13 |

14 | 15 |

16 | {LANG.cart_check_out} 17 |

18 | 19 | 20 | 21 |

22 | {LANG.point_cart_text} ({POINT}) 23 |

24 | 25 | 26 | 27 |

28 | {LANG.wishlist_product} ({NUM_ID}) 29 |

30 | 31 | 32 | 33 |

34 | {LANG.history_title} 35 |

36 | 37 | 38 | 39 |

40 | {LANG.active_order_dis} 41 |

42 | 43 |
44 | -------------------------------------------------------------------------------- /modules/shops/admin/tagsajax.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $q = $nv_Request->get_title('term', 'get', '', 1); 16 | if (empty($q)) { 17 | return; 18 | } 19 | 20 | $db->sqlreset() 21 | ->select('keywords') 22 | ->from($db_config['prefix'] . '_' . $module_data . '_tags_' . NV_LANG_DATA) 23 | ->where('alias LIKE :alias OR keywords LIKE :keywords') 24 | ->order('alias ASC') 25 | ->limit(50); 26 | 27 | $sth = $db->prepare($db->sql()); 28 | $sth->bindValue(':alias', '%' . $q . '%', PDO::PARAM_STR); 29 | $sth->bindValue(':keywords', '%' . $q . '%', PDO::PARAM_STR); 30 | $sth->execute(); 31 | 32 | $array_data = array(); 33 | while (list($keywords) = $sth->fetch(3)) { 34 | $keywords = explode(',', $keywords); 35 | foreach ($keywords as $_keyword) { 36 | $array_data[] = str_replace('-', ' ', $_keyword) ; 37 | } 38 | } 39 | 40 | header('Cache-Control: no-cache, must-revalidate'); 41 | header('Content-type: application/json'); 42 | 43 | ob_start('ob_gzhandler'); 44 | echo json_encode($array_data); 45 | exit(); 46 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/group_delete.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 28 | 29 | 30 |
7 |
8 | 9 | 10 | 11 | 12 |
13 | {INFO} 14 |
15 |
16 | 17 |
18 |
19 | {LANG.delgroup_msg_rows_move}: 20 | 25 | 26 |
27 |
31 |
32 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/cat_delete.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 29 | 30 | 31 |
7 |
8 | 9 | 10 | 11 | 12 |
13 | {INFO} 14 |
15 |
16 | 17 |
18 |
19 | {LANG.delcat_msg_rows_move}: 20 | 25 | 26 |
27 |
28 |
32 |
33 | -------------------------------------------------------------------------------- /modules/shops/admin/del_source.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $sourceid = $nv_Request->get_int('sourceid', 'post', 0); 16 | 17 | $contents = "NO_" . $sourceid; 18 | $sourceid = $db->query("SELECT sourceid FROM " . $db_config['prefix'] . "_" . $module_data . "_sources WHERE sourceid=" . $sourceid)->fetchColumn(); 19 | if ($sourceid > 0) { 20 | $check_rows = $db->query("SELECT COUNT(*) FROM " . $db_config['prefix'] . "_" . $module_data . "_rows WHERE source_id =" . $sourceid)->fetchColumn(); 21 | 22 | if ($check_rows > 0) { 23 | $contents = "ERR_" . sprintf($lang_module['delsource_msg_rows'], $check_rows); 24 | } else { 25 | $sql = "DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_sources WHERE sourceid=" . $sourceid; 26 | if ($db->query($sql)) { 27 | nv_fix_source(); 28 | $nv_Cache->delMod($module_name); 29 | $contents = "OK_" . $sourceid; 30 | } 31 | } 32 | } 33 | 34 | include NV_ROOTDIR . '/includes/header.php'; 35 | echo $contents; 36 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/default/modules/shops/point.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 7 |
8 |

{LANG.point_cart_history}

9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
{LANG.point_order}{LANG.profile_products_status}{LANG.finter_title}
{HISTORY.order_code}{HISTORY.point} {LANG.point}{HISTORY.time}
{PAGE}
36 |
37 | 38 | 39 | 40 |
{LANG.point_empty}
41 | 42 | 43 | -------------------------------------------------------------------------------- /modules/shops/admin/del_content.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'post', 0); 16 | $checkss = $nv_Request->get_string('checkss', 'post', ''); 17 | $listid = $nv_Request->get_string('listid', 'post', ''); 18 | 19 | $contents = "NO_" . $id; 20 | 21 | if ($listid != "" and md5($global_config['sitekey'] . session_id()) == $checkss) { 22 | $del_array = array_map("intval", explode(",", $listid)); 23 | foreach ($del_array as $id) { 24 | if ($id > 0) { 25 | $contents = nv_del_content_module($id); 26 | } 27 | } 28 | nv_insert_logs(NV_LANG_DATA, $module_name, 'log_del_product', "id " . $listid, $admin_info['userid']); 29 | } elseif (md5($id . session_id()) == $checkss) { 30 | $contents = nv_del_content_module($id); 31 | nv_insert_logs(NV_LANG_DATA, $module_name, 'log_del_product', "id " . $id, $admin_info['userid']); 32 | } 33 | 34 | nv_set_status_module(); 35 | $nv_Cache->delMod($module_name); 36 | 37 | include NV_ROOTDIR . '/includes/header.php'; 38 | echo $contents; 39 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_relates_product.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Block RSS 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 1 11 | 5 12 | 24 13 | 14 | nv_block_config_relates_blocks 15 | nv_block_config_relates_blocks_submit 16 | 17 | 18 | Block category 19 | Number row data 20 | Count number for cut 21 | 22 | 23 | Nhóm sản phẩm liên quan 24 | Số sản phẩm hiển thị 25 | Số ký tự cắt của tiêu đề 26 | 27 | 28 | Block category 29 | Number row data 30 | Count number for cut 31 | 32 | 33 | Block category 34 | Number row data 35 | Count number for cut 36 | 37 | 38 | -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_product_center.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Block Product Center 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 1 11 | 30 12 | 5 13 | 1 14 | 15 | nv_block_config_product_center_blocks 16 | nv_block_config_product_center_blocks_submit 17 | 18 | 19 | Block category 20 | Total items show 21 | Number row data 22 | 23 | 24 | Nhóm sản phẩm liên quan 25 | Số sản phẩm hiển thị 26 | Số sản phẩm trên 1 slide 27 | 28 | 29 | Block category 30 | Total items show 31 | Number row data 32 | 33 | 34 | Block category 35 | Total items show 36 | Number row data 37 | 38 | 39 | -------------------------------------------------------------------------------- /modules/shops/admin/exptime.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if ($nv_Request->isset_request('checkss', 'get') and $nv_Request->get_string('checkss', 'get') == md5($global_config['sitekey'] . session_id())) { 16 | $listid = $nv_Request->get_string('listid', 'get'); 17 | $id_array = array_map("intval", explode(",", $listid)); 18 | 19 | $sql = "SELECT id, listcatid, exptime FROM " . $db_config['prefix'] . "_" . $module_data . "_rows WHERE id IN (" . implode(",", $id_array) . ")"; 20 | $result = $db->query($sql); 21 | 22 | while (list($id, $listcatid, $exptime) = $result->fetch(3)) { 23 | if ($exptime == 0 or $exptime > NV_CURRENTTIME) { 24 | $db->query("UPDATE " . $db_config['prefix'] . "_" . $module_data . "_rows SET exptime = '" . NV_CURRENTTIME . "' WHERE id =" . $id); 25 | $arr_catid = array_map("intval", explode(",", $listcatid)); 26 | } 27 | } 28 | 29 | nv_set_status_module(); 30 | $nv_Cache->delMod($module_name); 31 | } 32 | 33 | nv_redirect_location(NV_BASE_ADMINURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module_name . "&" . NV_OP_VARIABLE . "=items"); 34 | -------------------------------------------------------------------------------- /themes/default/modules/shops/print_pro.tpl: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 |
14 | 15 | 23 | 24 |
25 | 26 |
27 | 28 | {TITLE} 29 |
30 | {DATE_UP}- {NUM_VIEW} {LANG.detail_num_view} 31 |
32 | 33 | {LANG.detail_pro_price}: 34 | {PRICE.sale_format} {money_unit} 35 | 36 |
37 | {DETAIL} 38 |
39 | 40 |
41 | 42 | 50 |
51 | -------------------------------------------------------------------------------- /modules/shops/funcs/sitemap.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $url = array(); 16 | $cacheFile = NV_LANG_DATA . '_Sitemap.cache'; 17 | $pa = NV_CURRENTTIME - 7200; 18 | 19 | if (($cache = $nv_Cache->getItem($module_name, $cacheFile)) != false and filemtime(NV_ROOTDIR . '/' . NV_CACHEDIR . '/' . $module_name . '/' . $cacheFile) >= $pa) { 20 | $url = unserialize($cache); 21 | } else { 22 | $db->sqlreset()->select('id, listcatid, edittime, ' . NV_LANG_DATA . '_alias')->from($db_config['prefix'] . '_' . $module_data . '_rows')->where('status =1')->order('publtime DESC')->limit(1000); 23 | 24 | $result = $db->query($db->sql()); 25 | $url = array(); 26 | 27 | while (list($id, $catid_i, $edittime, $alias) = $result->fetch(3)) { 28 | $url[] = array( 'link' => NV_BASE_SITEURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=' . $global_array_shops_cat[$catid_i]['alias'] . '/' . $alias . $global_config['rewrite_exturl'], 'publtime' => $edittime ); 29 | } 30 | 31 | $cache = serialize($url); 32 | $nv_Cache->setItem($module_name, $cacheFile, $cache); 33 | } 34 | 35 | nv_xmlSitemap_generate($url); 36 | die(); 37 | -------------------------------------------------------------------------------- /README-SHOPS.md: -------------------------------------------------------------------------------- 1 | # Module shops 2 | 3 | Trước sự phát triển như vũ bảo của Internet, bùng nổ thông tin toàn cầu, thương mại điện tử (TMĐT) đang phát triển hết sức rầm rộ về cả số lượng và chất lượng. Việt Nam đã và đang được đánh giá là một quốc gia châu Á có tiềm năng lớn trong lĩnh vực kinh doanh trực tuyến, sẽ phát triển mạnh mẽ trong thời gian tới. 4 | 5 | Nắm bắt cơ hội đó, Công ty cổ phẩn phát triển nguồn mở Việt Nam (VINADES.,JSC) cùng với cộng đồng mã nguồn mở NukeViet đã xây dựng hệ thống bán hàng trực tuyến, hoạt động trên nên tảng mã nguồn mở NukeViet - Module Shops 4.x. 6 | 7 | Trên kinh nghiệm thực tế phát triển các hệ thống bán hàng lớn cho các đơn vị đối tác, cùng với sự đóng góp chức năng, ý tưởng từ cộng đồng người sử dụng, VINADES đã xây dựng Module Shops 4.x hướng tới người dùng, đặc biệt là người dùng Việt Nam, đáp ứng đầy đủ các yêu cầu cần có của một hệ thống bán hàng trực tuyến. Cùng với đó, hệ thống cũng được nâng cấp, phát triển từng ngày, từng giờ bởi các lập trình viên toàn thế giới nói chung, và Việt Nam nói riêng, cho ra mắt các bản nâng cấp định kỳ, bắt nhịp theo bước tiến công nghệ và nhu cầu thực tế của lĩnh vực bán hàng trực tuyến. 8 | 9 | ## Cài đặt 10 | 1. Cài đặt từ store http://nukeviet.vn/vi/store/modules/shops/ 11 | 2. Cài đặt từ github https://github.com/nukeviet/module-shops/releases 12 | 3. Nếu sử dụng thanh toán online cần dùng Composer cài thêm các thư viện sau: 13 | 14 | ``` 15 | paypal/sdk-core-php 16 | paypal/permissions-sdk-php 17 | paypal/merchant-sdk-php 18 | nusphere/nusoap 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /themes/default/modules/shops/review_list.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | {EMPTY} 6 |
7 | 8 | 9 | 10 |
11 | 12 |
13 | 16 |
17 |
18 | 19 | 20 | 21 |
 
22 | 23 |
24 | 25 | "{DATA.content}" 26 | 27 |
28 |
29 |
30 | 31 | 32 | 33 |
34 | {PAGE} 35 |
36 | 37 |
38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /modules/shops/funcs/download.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id_files = $nv_Request->get_int('id_files', 'get', 0); 16 | $id_rows = $nv_Request->get_int('id_rows', 'get', 0); 17 | 18 | if (empty($id_files) or empty($id_rows)) { 19 | die('NO'); 20 | } 21 | 22 | $result = $db->query('SELECT path, download_groups FROM ' . $db_config['prefix'] . '_' . $module_data . '_files WHERE id=' . $id_files); 23 | list($path, $download_groups) = $result->fetch(3); 24 | 25 | if ($download_groups == '-1') { 26 | $download_groups = $pro_config['download_groups']; 27 | } 28 | 29 | if (nv_user_in_groups($download_groups)) { 30 | if (!empty($path)) { 31 | // Cap nhat luot download 32 | $db->query('UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_files_rows SET download_hits=download_hits+1 WHERE id_rows=' . $id_rows . ' AND id_files=' . $id_files); 33 | 34 | if (nv_is_url($path)) { 35 | nv_redirect_location($path); 36 | } else { 37 | $download = new NukeViet\Files\Download(NV_ROOTDIR . '/' . NV_UPLOADS_DIR . '/' . $module_upload .'/files/'. $path, NV_UPLOADS_REAL_DIR); 38 | $download->download_file(); 39 | exit(); 40 | } 41 | } 42 | } else { 43 | die('NO'); 44 | } 45 | -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_cart.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_MAINFILE')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if (! function_exists('nv_cart_info')) { 16 | /** 17 | * nv_cart_info() 18 | * 19 | * @param mixed $block_config 20 | * @return 21 | */ 22 | function nv_cart_info($block_config) 23 | { 24 | global $module_data; 25 | 26 | $module = $block_config['module']; 27 | 28 | $coupons_code = ''; 29 | 30 | if (isset($_SESSION[$module_data . '_coupons']) and !empty($_SESSION[$module_data . '_coupons']['code']) and $_SESSION[$module_data . '_coupons']['check']) { 31 | $coupons_code = $_SESSION[$module_data . '_coupons']['code']; 32 | } 33 | 34 | $content = ' 35 |
36 |
37 | 40 |
41 | '; 42 | return $content; 43 | } 44 | } 45 | 46 | if (defined('NV_SYSTEM')) { 47 | $content = nv_cart_info($block_config); 48 | } 49 | -------------------------------------------------------------------------------- /themes/default/modules/shops/viewcat.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 16 | 17 | {PARENT_HTML} 18 | 19 | 20 |
21 | 26 | 27 |
28 | 29 |
30 | 31 |
32 | 33 |
34 | {CONTENT} 35 |
36 |
37 | 38 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/updateprice.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | {ERROR} 5 |
6 | 7 |
8 | 9 |
10 | 11 | 12 | 13 | 14 | 20 | 21 | 22 | 23 | 26 | 27 | 28 |
{LANG.cateid} 15 |
{LANG.newprice} 24 | 25 |
29 |
30 |
31 | 32 |
33 |
34 | -------------------------------------------------------------------------------- /themes/default/modules/shops/download_content.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 |
8 |  {FILES.title} 9 |
10 |
{FILES.filesize}
11 |
12 | 13 |
14 |
15 | 16 |
17 | 18 | 19 | 20 |
21 | {DOWNLOAD_LOGIN} 22 |
23 | 24 | 25 | 36 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/location.tpl: -------------------------------------------------------------------------------- 1 | 2 | {FILE "shipping_menu.tpl"} 3 | 4 |
5 | {LOCATION_LIST} 6 |
7 |
8 | 9 |
{error}
10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 31 | 32 | 33 |
{CAPTION}
{LANG.location_name}
{LANG.location_in} 25 |   30 |
34 |
35 | 36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /modules/shops/admin/custom_form.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $datacustom_form = ''; 16 | 17 | $cid = $nv_Request->get_int('cid', 'get', 0); 18 | $cat_form = isset($global_array_shops_cat[$cid]) ? $global_array_shops_cat[$cid]['form'] : ''; 19 | $cat_forms = empty($cat_form) ? [] : explode(',', $cat_form); 20 | 21 | if ($cid and !empty($cat_forms)) { 22 | $id = $nv_Request->get_int('id', 'get', 0); 23 | $where = []; 24 | foreach ($cat_forms as $cat_form) { 25 | $where[] = "alias=" . $db->quote(preg_replace("/[\_]/", "-", $cat_form)); 26 | } 27 | $cat_templates = $db->query('SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_template WHERE ' . implode(' OR ', $where) . ' ORDER BY weight ASC')->fetchAll(); 28 | 29 | foreach ($cat_templates as $cat_template) { 30 | $custom = []; 31 | $result = $db->query("SELECT * FROM " . $db_config['prefix'] . "_" . $module_data . "_field_value_" . NV_LANG_DATA . " WHERE rows_id=" . $id); 32 | while ($row = $result->fetch()) { 33 | $custom[$row['field_id']] = $row['field_value']; 34 | } 35 | 36 | $datacustom_form .= nv_show_custom_form($id, str_replace('-', '_', $cat_template['alias']), $custom); 37 | } 38 | } 39 | 40 | include NV_ROOTDIR . '/includes/header.php'; 41 | echo $datacustom_form; 42 | include NV_ROOTDIR . '/includes/footer.php'; 43 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/tags_lists.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
{LANG.number}{LANG.alias}{LANG.keywords}{LANG.numlinks} 
{ROW.number}{ROW.alias} 25 | {ROW.keywords} 26 | 27 |   28 | 29 | {ROW.numpro} 32 |   {GLANG.edit}   33 |   {GLANG.delete} 34 |
{LANG.alias_search}
46 |
47 | 52 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.search.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 |
7 | 8 |
9 | 10 | 11 |
12 | 13 |
14 | 15 | 16 |
17 | 18 |
19 | 20 | 26 |
27 | 28 |
29 | 30 | 36 |
37 | 38 |
39 | 40 |
41 |
42 | 43 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/location_lists.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | {LOCATION_NAV} 6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
{LANG.weight}{LANG.location_name} 
24 | {ROW.title}{ROW.numsub}  {GLANG.edit}   -  {GLANG.delete}
{GENERATE_PAGE}
42 |
43 | 44 | -------------------------------------------------------------------------------- /modules/shops/admin/change_location.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $locationid = $nv_Request->get_int('locationid', 'post', 0); 16 | $mod = $nv_Request->get_string('mod', 'post', ''); 17 | $new_vid = $nv_Request->get_int('new_vid', 'post', 0); 18 | $content = 'NO_' . $locationid; 19 | 20 | list($locationid, $parentid, $numsub) = $db->query('SELECT id, parentid, numsub FROM ' . $db_config['prefix'] . '_' . $module_data . '_location WHERE id=' . $locationid)->fetch(3); 21 | 22 | if ($locationid > 0) { 23 | if ($mod == 'weight' and $new_vid > 0) { 24 | $sql = 'SELECT id FROM ' . $db_config['prefix'] . '_' . $module_data . '_location WHERE id!=' . $locationid . ' AND parentid=' . $parentid . ' ORDER BY weight ASC'; 25 | $result = $db->query($sql); 26 | 27 | $weight = 0; 28 | while ($row = $result->fetch()) { 29 | ++$weight; 30 | if ($weight == $new_vid) { 31 | ++$weight; 32 | } 33 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_location SET weight=' . $weight . ' WHERE id=' . $row['id']; 34 | $db->query($sql); 35 | } 36 | 37 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_location SET weight=' . $new_vid . ' WHERE id=' . $locationid; 38 | $db->query($sql); 39 | 40 | nv_fix_location_order(); 41 | $content = 'OK_' . $parentid; 42 | } 43 | $nv_Cache->delMod($module_name); 44 | } 45 | 46 | include NV_ROOTDIR . '/includes/header.php'; 47 | echo $content; 48 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/default/modules/shops/block.filter_product.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |

7 | 8 | 9 | 10 | {DATA.title} 11 |

12 | 13 | 14 | 15 |

16 | {DATA.space} 17 | 18 | 19 | 20 | 21 |

22 | 23 | 24 | 25 | 26 |

{LANG.title_price} ({MONEY_UNIT})

27 | 28 |

29 | 30 | 31 | 32 | 33 |
34 | 35 | 48 | 49 | -------------------------------------------------------------------------------- /themes/default/modules/shops/coupons_info.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
{ERROR}
4 | 5 | 6 | 7 |
8 |

{DATA.title}

9 | 17 | 18 |
19 |
20 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/block_cat_list.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 23 | 24 | 25 | 32 | 33 | 34 | 35 | 36 |
{LANG.weight}ID{LANG.name}{LANG.adddefaultblock} 
17 | 22 | {ROW.bid}{ROW.title}{ROW.numnews} 26 | 31 |  {GLANG.edit}  -  {GLANG.delete}
37 |
38 | -------------------------------------------------------------------------------- /modules/shops/admin/change_source.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $sourceid = $nv_Request->get_int('sourceid', 'post', 0); 16 | $mod = $nv_Request->get_string('mod', 'post', ''); 17 | $new_vid = $nv_Request->get_int('new_vid', 'post', 0); 18 | 19 | if (empty($sourceid)) { 20 | die('NO_' . $sourceid); 21 | } 22 | $content = 'NO_' . $sourceid; 23 | 24 | if ($mod == 'weight' and $new_vid > 0) { 25 | $sql = 'SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_sources WHERE sourceid=' . $sourceid; 26 | $result = $db->query($sql); 27 | $numrows = $result->rowCount(); 28 | if ($numrows != 1) { 29 | die('NO_' . $sourceid); 30 | } 31 | 32 | $sql = 'SELECT sourceid FROM ' . $db_config['prefix'] . '_' . $module_data . '_sources WHERE sourceid!=' . $sourceid . ' ORDER BY weight ASC'; 33 | $result = $db->query($sql); 34 | 35 | $weight = 0; 36 | while ($row = $result->fetch()) { 37 | ++$weight; 38 | if ($weight == $new_vid) { 39 | ++$weight; 40 | } 41 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_sources SET weight=' . $weight . ' WHERE sourceid=' . intval($row['sourceid']); 42 | $db->query($sql); 43 | } 44 | 45 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_sources SET weight=' . $new_vid . ' WHERE sourceid=' . intval($sourceid); 46 | $db->query($sql); 47 | 48 | $nv_Cache->delMod($module_name); 49 | $content = 'OK_' . $sourceid; 50 | } 51 | 52 | include NV_ROOTDIR . '/includes/header.php'; 53 | echo $content; 54 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/block.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | {BLOCK_LIST} 4 |
5 |
6 |
7 |
8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 41 | 42 | 43 |
16 | {LANG.addtoblock} 17 |
{LANG.name}
{ROW.title}
36 |  
44 |
45 |
46 |
47 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/point.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 |   7 | 8 |
9 |
10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
{LANG.point_username}{LANG.point_fullname}{LANG.point_email}{LANG.point}{LANG.setting_point_value_conversion} ({money_unit})
{NV_GENERATE_PAGE}
{VIEW.username} {VIEW.full_name} {VIEW.email} {VIEW.point_total} {VIEW.money}
47 |
48 |
49 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/seller.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | {C_REPORT} 4 | {LANG.content_list} 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 48 | 49 | 50 | 51 | 52 |
 {LANG.customer_name}{LANG.customer_email}{LANG.order_phone}{LANG.order_address}{LANG.order_time}{LANG.seller_num}{LANG.order_total}
{ROW.no}{ROW.order_name}{ROW.order_email}{ROW.order_phone}{ROW.order_address}{ROW.order_time}{ROW.num}{ROW.price} {ROW.price_unit}
44 | 45 | {GENERATE_PAGE} 46 | 47 | {TOTAL.num} {TOTAL.product_unit}{TOTAL.price} {TOTAL.pro_unit}
53 |
54 |
55 | -------------------------------------------------------------------------------- /CONTRIBUTING-SHOPS.md: -------------------------------------------------------------------------------- 1 | # Quy định thông báo lỗi 2 | 3 | Khi báo lỗi bạn vui lòng cung cấp các thông tin sau để chúng tôi có thể xây dựng môi trường thử nghiệm giống của bạn để kiểm tra 4 | 5 | 1. Tiêu đề thông báo lỗi 6 | 7 | 2. Mô tả chi tiết lỗi gặp phải 8 | 9 | 3. Cung cấp thông tin máy chủ 10 | 11 | * Nếu xác định lỗi từ code, vui lòng cung cấp thêm các thông tin về WebServer và trình duyệt 12 | ``` 13 | - Phiên bản NukeViet: 4.0.23 14 | - Phiên bản Shops: 4.0.18 15 | - Môi trường thử Nghiệm: Localhost/ hosting 16 | - Hệ điều hành: (Ví dụ: Ubuntu 13.10 32-bit) 17 | - Trình duyệt web: (Ví dụ: Mozilla Firefox 27.0) 18 | - Máy chủ web: (Ví dụ: XAMPP for Linux 1.8.1 ) 19 | 20 | Nếu trên website cần có thêm thông tin 21 | + Công cụ quản lý hosting: (Ví dụ: Cpanel/ Vista Panel/ Parallels Plesk/ DirectAdmin/ Kloxo...) 22 | + Các thông tin khác về phần mềm webserver, PHP và cơ sở dữ liệu: (Ví dụ: Apache 2.4.7, MySQL 5.5.36, PHP 5.4.25) 23 | ``` 24 | 25 | * Nếu xác định lỗi từ giao diện, vui lòng cung cấp thêm thông tin về giao diện 26 | ``` 27 | - Phiên bản NukeViet: 4.0.16 28 | - Môi trường thử Nghiệm: Localhost/ hosting 29 | - Hệ điều hành: (Ví dụ: Ubuntu 13.10 32-bit) 30 | - Trình duyệt web: (Ví dụ: Mozilla Firefox 27.0) 31 | - Máy chủ web: (Ví dụ: XAMPP for Linux 1.8.1 ) 32 | - Tên gói giao diện (Chỉ kiểm tra đối với giao diện tích hợp sẵn trong source NukeViet) 33 | 34 | Nếu trên website cần có thêm thông tin 35 | + Công cụ quản lý hosting: (Ví dụ: Cpanel/ Vista Panel/ Parallels Plesk/ DirectAdmin/ Kloxo...) 36 | + Các thông tin khác về phần mềm webserver, PHP và cơ sở dữ liệu: (Ví dụ: Apache 2.4.7, MySQL 5.5.36, PHP 5.4.25) 37 | ``` 38 | 39 | * Nếu là các lỗi nhỏ, cơ bản hay các câu hỏi, đề xuất, góp ý thì không cần cung cấp thông tin về máy chủ, giao diện tại phần 2, 3. 40 | 41 | >Các thông tin này rất cần thiết trong quá trình đội code kiểm tra và sửa lỗi, yêu cầu thành viên cung cấp đầy đủ thông tin. 42 | -------------------------------------------------------------------------------- /modules/shops/admin/publtime.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if ($nv_Request->isset_request('checkss', 'get') and $nv_Request->get_string('checkss', 'get') == md5($global_config['sitekey'] . session_id())) { 16 | $listid = $nv_Request->get_string('listid', 'get'); 17 | $id_array = array_filter(array_map("intval", explode(",", $listid))); 18 | 19 | $sql = "SELECT id, listcatid, status , publtime, exptime FROM " . $db_config['prefix'] . "_" . $module_data . "_rows WHERE id IN (" . implode(",", $id_array) . ")"; 20 | $result = $db->query($sql); 21 | 22 | while (list($id, $listcatid, $status, $publtime, $exptime) = $result->fetch(3)) { 23 | $data_save = array(); 24 | $data_save['exptime'] = ( int )$exptime; 25 | $data_save['publtime'] = ( int )$publtime; 26 | $data_save['status'] = 1; 27 | 28 | if ($exptime > 0 and $exptime < NV_CURRENTTIME) { 29 | $data_save['exptime'] = 0; 30 | } 31 | 32 | if ($publtime > NV_CURRENTTIME) { 33 | $data_save['publtime'] = NV_CURRENTTIME; 34 | } 35 | 36 | if (! empty($data_save)) { 37 | $s_ud = ""; 38 | foreach ($data_save as $key => $value) { 39 | $s_ud .= "" . $key . " = '" . $value . "', "; 40 | } 41 | 42 | $s_ud .= "edittime = '" . NV_CURRENTTIME . "'"; 43 | $db->query("UPDATE " . $db_config['prefix'] . "_" . $module_data . "_rows SET " . $s_ud . " WHERE id =" . $id); 44 | } 45 | } 46 | nv_set_status_module(); 47 | $nv_Cache->delMod($module_name); 48 | } 49 | 50 | nv_redirect_location(NV_BASE_ADMINURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module_name . "&" . NV_OP_VARIABLE . "=items"); 51 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.bxproduct_center.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 33 | 34 |
35 | 36 |
37 | {TITLE} 38 | 39 | 40 | 41 | {PRICE.sale_format} {PRICE.unit} 42 | {PRICE.price_format} {PRICE.unit} 43 | 44 | 45 | 46 | {PRICE.price_format} {PRICE.unit} 47 | 48 | 49 | 50 | 51 | {LANG.price_contact} 52 | 53 |

{TITLE0}

54 |
55 | 56 |
57 | 58 | 59 | -------------------------------------------------------------------------------- /themes/default/images/shops/tiny-slider/tiny-slider.css: -------------------------------------------------------------------------------- 1 | .tns-outer{padding:0 !important}.tns-outer [hidden]{display:none !important}.tns-outer [aria-controls],.tns-outer [data-action]{cursor:pointer}.tns-slider{-webkit-transition:all 0s;-moz-transition:all 0s;transition:all 0s}.tns-slider>.tns-item{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tns-horizontal.tns-subpixel{white-space:nowrap}.tns-horizontal.tns-subpixel>.tns-item{display:inline-block;vertical-align:top;white-space:normal}.tns-horizontal.tns-no-subpixel:after{content:'';display:table;clear:both}.tns-horizontal.tns-no-subpixel>.tns-item{float:left}.tns-horizontal.tns-carousel.tns-no-subpixel>.tns-item{margin-right:-100%}.tns-no-calc{position:relative;left:0}.tns-gallery{position:relative;left:0;min-height:1px}.tns-gallery>.tns-item{position:absolute;left:-100%;-webkit-transition:transform 0s, opacity 0s;-moz-transition:transform 0s, opacity 0s;transition:transform 0s, opacity 0s}.tns-gallery>.tns-slide-active{position:relative;left:auto !important}.tns-gallery>.tns-moving{-webkit-transition:all 0.25s;-moz-transition:all 0.25s;transition:all 0.25s}.tns-autowidth{display:inline-block}.tns-lazy-img{-webkit-transition:opacity 0.6s;-moz-transition:opacity 0.6s;transition:opacity 0.6s;opacity:0.6}.tns-lazy-img.tns-complete{opacity:1}.tns-ah{-webkit-transition:height 0s;-moz-transition:height 0s;transition:height 0s}.tns-ovh{overflow:hidden}.tns-visually-hidden{position:absolute;left:-10000em}.tns-transparent{opacity:0;visibility:hidden}.tns-fadeIn{opacity:1;filter:alpha(opacity=100);z-index:0}.tns-normal,.tns-fadeOut{opacity:0;filter:alpha(opacity=0);z-index:-1}.tns-vpfix{white-space:nowrap}.tns-vpfix>div,.tns-vpfix>li{display:inline-block}.tns-t-subp2{margin:0 auto;width:310px;position:relative;height:10px;overflow:hidden}.tns-t-ct{width:2333.3333333%;width:-webkit-calc(100% * 70 / 3);width:-moz-calc(100% * 70 / 3);width:calc(100% * 70 / 3);position:absolute;right:0}.tns-t-ct:after{content:'';display:table;clear:both}.tns-t-ct>div{width:1.4285714%;width:-webkit-calc(100% / 70);width:-moz-calc(100% / 70);width:calc(100% / 70);height:10px;float:left} 2 | 3 | /*# sourceMappingURL=sourcemaps/tiny-slider.css.map */ 4 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/block_list.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 |
{LANG.weight}{LANG.name}{LANG.status} 
26 | {ROW.title}{ROW.status} {GLANG.edit} -  {LANG.delete_from_block}
43 |
44 |
45 | -------------------------------------------------------------------------------- /modules/shops/admin/chang_block_cat.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $bid = $nv_Request->get_int('bid', 'post', 0); 19 | $mod = $nv_Request->get_string('mod', 'post', ''); 20 | $new_vid = $nv_Request->get_int('new_vid', 'post', 0); 21 | 22 | if (empty($bid)) { 23 | die('NO_' . $bid); 24 | } 25 | $content = 'NO_' . $bid; 26 | 27 | if ($mod == 'weight' and $new_vid > 0) { 28 | $sql = 'SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_block_cat WHERE bid=' . $bid; 29 | $result = $db->query($sql); 30 | $numrows = $result->rowCount(); 31 | if ($numrows != 1) { 32 | die('NO_' . $bid); 33 | } 34 | 35 | $sql = 'SELECT bid FROM ' . $db_config['prefix'] . '_' . $module_data . '_block_cat WHERE bid!=' . $bid . ' ORDER BY weight ASC'; 36 | $result = $db->query($sql); 37 | $weight = 0; 38 | while ($row = $result->fetch()) { 39 | ++$weight; 40 | if ($weight == $new_vid) { 41 | ++$weight; 42 | } 43 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_block_cat SET weight=' . $weight . ' WHERE bid=' . intval($row['bid']); 44 | $db->query($sql); 45 | } 46 | 47 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_block_cat SET weight=' . $new_vid . ' WHERE bid=' . intval($bid); 48 | $db->query($sql); 49 | 50 | $content = 'OK_' . $bid; 51 | } elseif ($mod == 'adddefault' and $bid > 0) { 52 | $new_vid = (intval($new_vid) == 1) ? 1 : 0; 53 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_block_cat SET adddefault=' . $new_vid . ' WHERE bid=' . intval($bid); 54 | $db->query($sql); 55 | $content = 'OK_' . $bid; 56 | } 57 | 58 | $nv_Cache->delMod($module_name); 59 | 60 | include NV_ROOTDIR . '/includes/header.php'; 61 | echo $content; 62 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/default/modules/shops/email_new_order.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | print 7 | 8 | 9 | 10 | 11 | {CONTENT} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
{LANG.order_no_products} {LANG.cart_products} {LANG.cart_price} ({unit}) {LANG.cart_numbers} {LANG.cart_unit}
{pro_no} {product_name} {product_price} {product_number} {product_unit}
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
{LANG.cart_note} : {DATA.order_note} {LANG.cart_total_print}: {order_total} {unit}
51 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/email_new_order_payment.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | print 7 | 8 | 9 | 10 | 11 | {CONTENT} 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
{LANG.order_no_products} {LANG.name} {LANG.content_product_product_price} ({unit}) {LANG.seller_num} {LANG.unit_total}
{pro_no} {product_name} {product_price} {product_number} {product_unit}
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 |
{LANG.order_products_note} : {DATA.order_note} {LANG.order_total}: {order_total} {unit}
51 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/field_tab.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
{LANG.weight}{LANG.field_title}{title_tab}
24 | {VIEW.field}
37 |
38 |
39 |
40 | 41 | 42 | 61 | -------------------------------------------------------------------------------- /modules/shops/admin/getcatalog.php: -------------------------------------------------------------------------------- 1 | 6 | * @copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | /* 16 | * Load danh sách danh mục sản phẩm 17 | * Sử dụng tại phần Nhóm Sản phẩm 18 | */ 19 | 20 | $pid = $nv_Request->get_int('pid', 'get', 0); 21 | 22 | if ($pid >= 0) { 23 | $cateid = $nv_Request->get_string('cid', 'get', ''); 24 | $cateid = nv_base64_decode($cateid); 25 | $cateid = unserialize($cateid); 26 | $cateid = $cateid ? $cateid : array(); 27 | $list_cat = ''; 28 | if ($pid > 0) { 29 | $sql = "SELECT cateid FROM " . $db_config['prefix'] . "_" . $module_data . "_group_cateid WHERE groupid=" . $pid; 30 | $result_cat = $db->query($sql); 31 | while (list ($catid_i) = $result_cat->fetch(3)) { 32 | if (empty($list_cat)) { 33 | $list_cat .= $catid_i; 34 | } else { 35 | $list_cat .= ',' . $catid_i; 36 | } 37 | } 38 | } 39 | if (!empty($list_cat)) { 40 | $list_cat = ' WHERE catid in (' . $list_cat . ')'; 41 | } 42 | $table = $db_config['prefix'] . "_" . $module_data . "_catalogs"; 43 | 44 | $sql = "SELECT catid, parentid, " . NV_LANG_DATA . "_title, lev, numsubcat FROM " . $table . $list_cat . " ORDER BY sort ASC"; 45 | $result_cat = $db->query($sql); 46 | 47 | $contents .= ''; 59 | } else { 60 | $contents = ''; 61 | } 62 | 63 | include NV_ROOTDIR . '/includes/header.php'; 64 | echo $contents; 65 | include NV_ROOTDIR . '/includes/footer.php'; 66 | -------------------------------------------------------------------------------- /modules/shops/blocks/global.block_bxproduct_center.ini: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Block BXProduct Center 5 | VinaDes.,Jsc 6 | http://vinades.vn 7 | 8 | 9 | 10 | 1 11 | 30 12 | 5 13 | 1 14 | horizontal 15 | 500 16 | 250 17 | 5 18 | 1 19 | 1 20 | 1 21 | 22 | nv_block_config_bxproduct_center_blocks 23 | nv_block_config_bxproduct_center_blocks_submit 24 | 25 | 26 | Block category 27 | Total items show 28 | Number row data 29 | Auto start 30 | Mode 31 | Speed 32 | Width 33 | Margin 34 | Number of slides to move 35 | Hide pager 36 | 37 | 38 | Nhóm sản phẩm liên quan 39 | Số sản phẩm hiển thị 40 | Số sản phẩm trên 1 slide 41 | Slide tự chạy 42 | Chế độ 43 | Tốc độ 44 | Rộng 45 | Căn lề 46 | Slide chuyển 47 | Ẩn phân trang 48 | 49 | 50 | Block category 51 | Total items show 52 | Number row data 53 | Auto start 54 | Mode 55 | Speed 56 | Width 57 | Margin 58 | Number of slides to move 59 | Hide pager 60 | 61 | 62 | Block category 63 | Total items show 64 | Number row data 65 | Auto start 66 | Mode 67 | Speed 68 | Width 69 | Margin 70 | Number of slides to move 71 | Hide pager 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /modules/shops/funcs/print_pro.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | // Chặn lập chỉ mục tìm kiếm 16 | $nv_BotManager->setPrivate(); 17 | 18 | $id = $nv_Request->get_int('id', 'get,post', 0); 19 | 20 | $result = $db->query("SELECT * FROM " . $db_config['prefix'] . "_" . $module_data . "_rows WHERE status=1 AND id = " . $id); 21 | $data_content = $result->fetch(); 22 | if (empty($data_content)) { 23 | nv_info_die($lang_global['error_404_title'], $lang_global['error_404_title'], $lang_global['error_404_content'], 404); 24 | } 25 | 26 | $page_url = NV_BASE_SITEURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=' . $op . '&id=' . $id; 27 | $canonicalUrl = getCanonicalUrl($page_url); 28 | 29 | $catid = $data_content['listcatid']; 30 | 31 | $result = $db->query("SELECT * FROM " . $db_config['prefix'] . "_" . $module_data . "_units WHERE id = " . $data_content['product_unit']); 32 | $data_unit = $result->fetch(); 33 | $data_unit['title'] = $data_unit[NV_LANG_DATA . '_title']; 34 | 35 | $homeimgfile = $data_content['homeimgfile']; 36 | if ($data_content['homeimgthumb'] == 1) {//image thumb 37 | $data_content['homeimgthumb'] = NV_BASE_SITEURL . NV_FILES_DIR . '/' . $module_upload . '/' . $homeimgfile; 38 | $data_content['homeimgfile'] = NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/' . $homeimgfile; 39 | } elseif ($data_content['homeimgthumb'] == 2) {//image file 40 | $data_content['homeimgthumb'] = $data_content['homeimgfile'] = NV_BASE_SITEURL . NV_UPLOADS_DIR . '/' . $module_upload . '/' . $homeimgfile; 41 | } elseif ($data_content['homeimgthumb'] == 3) {//image url 42 | $data_content['homeimgthumb'] = $data_content['homeimgfile'] = $homeimgfile; 43 | } else {//no image 44 | $data_content['homeimgthumb'] = $data_content['homeimgfile'] = NV_BASE_SITEURL . "themes/" . $module_info['template'] . "/images/" . $module_file . "/no-image.jpg"; 45 | } 46 | 47 | $page_title = $data_content[NV_LANG_DATA . '_title']; 48 | 49 | $contents = print_product($data_content, $data_unit, $page_title); 50 | 51 | include NV_ROOTDIR . '/includes/header.php'; 52 | echo nv_site_theme($contents, false); 53 | include NV_ROOTDIR . '/includes/footer.php'; 54 | -------------------------------------------------------------------------------- /modules/shops/notification.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_SITEINFO')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $lang_siteinfo = nv_get_lang_module($mod); 16 | 17 | if ($data['type'] == 'review_new') { 18 | list($id, $listcatid, $title, $alias) = $db->query('SELECT id, listcatid, ' . NV_LANG_DATA . '_title title, ' . NV_LANG_DATA . '_alias alias FROM ' . $db_config['prefix'] . '_' . $site_mods[$mod]['module_data'] . '_rows WHERE id=' . $data['content']['product_id'])->fetch(3); 19 | if ($mod != $module_name) { 20 | $sql = 'SELECT ' . NV_LANG_DATA . '_alias AS alias FROM ' . $db_config['prefix'] . '_' . $site_mods[$mod]['module_data'] . '_catalogs ORDER BY sort ASC'; 21 | $global_array_shops_cat = $nv_Cache->db($sql, 'catid', $module_name); 22 | } 23 | 24 | if ($data['content']['status']) { 25 | $data['title'] = sprintf($lang_siteinfo['review_notification_review_new'], $data['send_from'], $title); 26 | $data['link'] = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $mod . '&' . NV_OP_VARIABLE . '=review&product_id=' . $data['content']['product_id']; 27 | } else { 28 | // Danh gia cho kiem duyet 29 | 30 | $data['title'] = sprintf($lang_siteinfo['review_notification_review_new_queue'], $data['send_from'], $title); 31 | $data['link'] = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $mod . '&' . NV_OP_VARIABLE . '=review&status=0&product_id=' . $data['content']['product_id']; 32 | } 33 | } elseif ($data['type'] == 'order_new') { 34 | $data['title'] = sprintf($lang_siteinfo['review_notification_order_new'], $data['content']['order_name'], $data['content']['order_code']); 35 | $data['link'] = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $mod . '&' . NV_OP_VARIABLE . '=or_view&order_id=' . $data['content']['order_id']; 36 | } elseif ($data['type'] == 'order_edit') { 37 | $data['title'] = sprintf($lang_siteinfo['review_notification_order_edit'], $data['content']['order_name'], $data['content']['order_code']); 38 | $data['link'] = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $mod . '&' . NV_OP_VARIABLE . '=or_view&order_id=' . $data['content']['order_id']; 39 | } 40 | -------------------------------------------------------------------------------- /themes/default/images/shops/tiny-slider/min/tiny-slider.helper.ie8.js: -------------------------------------------------------------------------------- 1 | Array.prototype.forEach||(Array.prototype.forEach=function(e,t){for(var n=this.length>>>0,r=0;r>>0;if("function"!=typeof e)throw new TypeError;for(var n=new Array(t),r=arguments[1],o=0;o 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if (! defined('NV_IS_USER')) { 16 | $redirect = NV_BASE_SITEURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module_name . "&" . NV_OP_VARIABLE . "=cart"; 17 | nv_redirect_location(NV_BASE_SITEURL . "index.php?" . NV_NAME_VARIABLE . "=users&" . NV_OP_VARIABLE . "=login&nv_redirect=" . nv_redirect_encrypt($redirect)); 18 | 19 | } 20 | 21 | $data_content = array(); 22 | 23 | $sql = "SELECT order_id, order_code, order_note, user_id, unit_total, order_total, order_time, transaction_status, transaction_id, transaction_count FROM " . $db_config['prefix'] . "_" . $module_data . "_orders WHERE user_id = " . $user_info["userid"] . " ORDER BY order_id DESC"; 24 | $result = $db->query($sql); 25 | 26 | $page_url = $link_module = NV_BASE_SITEURL . "index.php?" . NV_LANG_VARIABLE . "=" . NV_LANG_DATA . "&" . NV_NAME_VARIABLE . "=" . $module_name; 27 | $page = 1; 28 | if ($page > 1) { 29 | $page_url .= '&' . NV_OP_VARIABLE . '=page-' . $page; 30 | } 31 | $canonicalUrl = getCanonicalUrl($page_url); 32 | 33 | while (list($order_id, $order_code, $order_note, $user_id, $unit_total, $order_total, $order_time, $transaction_status, $transaction_id, $transaction_count) = $result->fetch(3)) { 34 | $checkss = md5($order_id . $global_config['sitekey'] . session_id()); 35 | $data_content[] = array( 36 | "checkss" => $checkss, 37 | "order_id" => $order_id, 38 | "order_code" => $order_code, 39 | "transaction_status" => $transaction_status, 40 | "transaction_id" => $transaction_id, 41 | "transaction_count" => $transaction_count, 42 | "order_note" => $order_note, 43 | "user_id" => $user_id, 44 | "unit_total" => $unit_total, 45 | "order_total" => $order_total, 46 | "order_time" => $order_time, 47 | "link" => $link_module . "&" . NV_OP_VARIABLE . "=payment&order_id=" . $order_id . "&checkss=" . $checkss, 48 | "link_remove" => $link_module . "&" . NV_OP_VARIABLE . "=delhis&order_id=" . $order_id . "&checkss=" . $checkss 49 | ); 50 | } 51 | 52 | $contents = call_user_func("history_order", $data_content); 53 | 54 | $page_title = $lang_module['history_title']; 55 | 56 | include NV_ROOTDIR . '/includes/header.php'; 57 | echo nv_site_theme($contents); 58 | include NV_ROOTDIR . '/includes/footer.php'; 59 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/coupons_view.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
5 | {LANG.coupons_info} 6 |
{LANG.title}{DATA.title}{LANG.coupons_product}{LANG.coupons_product_custom}
{LANG.coupons}{DATA.code}{LANG.begin_time}{DATA.date_start}
{LANG.coupons_discount}{DATA.discount}{DATA.discount_text}{LANG.end_time}{DATA.date_end}
{LANG.coupons_total_amount}{DATA.total_amount} {MONEY_UNIT}{LANG.coupons_uses_per_coupon}{DATA.uses_per_coupon_count}/{DATA.uses_per_coupon}
34 |
35 | 36 |
37 |

38 |   39 |

40 |
41 | 42 | 51 | 52 | 53 | 54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 |
{LANG.coupons_history}
{LANG.order_code}{LANG.coupons_discount} ({MONEY_UNIT}){LANG.order_time}
{DATA.order_code} {DATA.amount} {DATA.date_added}
{NV_GENERATE_PAGE}
81 |
82 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.product_center.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 34 |
35 |
36 | 37 |
38 | {TITLE} 39 | 40 | 41 | 42 | {PRICE.sale_format} {PRICE.unit} 43 | {PRICE.price_format} {PRICE.unit} 44 | 45 | 46 | 47 | {PRICE.price_format} {PRICE.unit} 48 | 49 | 50 | 51 | 52 | {LANG.price_contact} 53 | 54 |

{TITLE0}

55 |
56 | 57 |
58 |
    59 |
  • 60 |
  • 61 |
62 |
63 | 64 | -------------------------------------------------------------------------------- /modules/shops/admin/change_block.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $id = $nv_Request->get_int('id', 'post', 0); 16 | $bid = $nv_Request->get_int('bid', 'post', 0); 17 | $mod = $nv_Request->get_string('mod', 'post', ''); 18 | $new_vid = $nv_Request->get_int('new_vid', 'post', 0); 19 | $del_list = $nv_Request->get_string('del_list', 'post', ''); 20 | 21 | $content = "NO_" . $bid; 22 | 23 | if ($bid > 0 and $del_list != "") { 24 | $array_id = array_map("intval", explode(",", $del_list)); 25 | foreach ($array_id as $id) { 26 | if ($id > 0) { 27 | $db->query("DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_block WHERE bid=" . $bid . " AND id=" . $id); 28 | } 29 | } 30 | 31 | nv_news_fix_block($bid); 32 | $content = "OK_" . $bid; 33 | } elseif ($bid > 0 and $id > 0) { 34 | list($bid, $id) = $db->query("SELECT bid, id FROM " . $db_config['prefix'] . "_" . $module_data . "_block WHERE bid=" . intval($bid) . " AND id=" . intval($id))->fetch(3); 35 | 36 | if ($bid > 0 and $id > 0) { 37 | if ($mod == "weight" and $new_vid > 0) { 38 | $sql = "SELECT id FROM " . $db_config['prefix'] . "_" . $module_data . "_block WHERE bid=" . $bid . " AND id!=" . $id . " ORDER BY weight ASC"; 39 | $result = $db->query($sql); 40 | $weight = 0; 41 | 42 | while ($row = $result->fetch()) { 43 | ++$weight; 44 | if ($weight == $new_vid) { 45 | ++$weight; 46 | } 47 | $sql = "UPDATE " . $db_config['prefix'] . "_" . $module_data . "_block SET weight=" . $weight . " WHERE bid=" . $bid . " AND id=" . intval($row['id']); 48 | $db->query($sql); 49 | } 50 | $result->closeCursor(); 51 | 52 | $sql = "UPDATE " . $db_config['prefix'] . "_" . $module_data . "_block SET weight=" . $new_vid . " WHERE bid=" . $bid . " AND id=" . intval($id); 53 | $db->query($sql); 54 | 55 | $content = "OK_" . $bid; 56 | } elseif ($mod == "delete") { 57 | $db->query("DELETE FROM " . $db_config['prefix'] . "_" . $module_data . "_block WHERE bid=" . $bid . " AND id=" . intval($id)); 58 | nv_news_fix_block($bid); 59 | $content = "OK_" . $bid; 60 | } 61 | } 62 | } 63 | $nv_Cache->delMod($module_name); 64 | 65 | include NV_ROOTDIR . '/includes/header.php'; 66 | echo $content; 67 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /modules/shops/funcs/delhis.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $order_id = $nv_Request->get_int('order_id', 'get', 0); 19 | $checkss = $nv_Request->get_string('checkss', 'get', ''); 20 | if ($order_id > 0 and $checkss == md5($order_id . $global_config['sitekey'] . session_id())) { 21 | $table_name = $db_config['prefix'] . "_" . $module_data . "_orders"; 22 | $re = $db->query("SELECT * FROM " . $table_name . " WHERE order_id=" . $order_id); 23 | $data = $re->fetch(); 24 | if (! empty($data)) { 25 | if ($data['status'] == 0 and $data['status'] == 0) { 26 | // Xoa don hang 27 | $db->query("DELETE FROM " . $table_name . " WHERE order_id=" . $order_id); 28 | 29 | // Thong tin dat hang chi tiet 30 | $list_order_i = $listid = $listnum = $listgroup = array(); 31 | $result = $db->query("SELECT * FROM " . $table_name . "_id WHERE order_id=" . $order_id); 32 | while ($row = $result->fetch()) { 33 | $list_order_i[] = $row['id']; 34 | $listid[] = $row['proid']; 35 | $listnum[] = $row['num']; 36 | 37 | $list = ''; 38 | $result_group = $db->query('SELECT group_id FROM ' . $table_name . '_id_group WHERE order_i=' . $row['id']); 39 | $group = array(); 40 | while (list($group_id) = $result_group->fetch(3)) { 41 | $group[] = $group_id; 42 | } 43 | asort($group); 44 | $listgroup[] = implode(',', $group); 45 | } 46 | 47 | // Cong lai san pham trong kho 48 | if ($pro_config['active_order_number'] == '0') { 49 | product_number_order($listid, $listnum, $listgroup, "+"); 50 | } 51 | 52 | // Tru lai so san pham da ban 53 | product_number_sell($listid, $listnum, "-"); 54 | 55 | // Xoa chi tiet don hang 56 | $db->query("DELETE FROM " . $table_name . "_id WHERE order_id=" . $order_id); 57 | 58 | echo "OK_" . str_replace("_", "#@#", $lang_module['del_history_ok']); 59 | die(); 60 | } else { 61 | echo "ERR_" . str_replace("_", "#@#", $lang_module['del_history_error_status']); 62 | die(); 63 | } 64 | } else { 65 | echo "Error"; 66 | die(); 67 | } 68 | } 69 | 70 | echo "ERR_Error"; 71 | -------------------------------------------------------------------------------- /modules/shops/admin.menu.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | // Menu dọc 16 | global $nv_Cache; 17 | $shop_module_config = array(); 18 | $sql = "SELECT module, config_name, config_value FROM " . NV_CONFIG_GLOBALTABLE . " WHERE lang='" . NV_LANG_DATA . "' and module='" . $module_name . "'"; 19 | $list = $nv_Cache->db($sql, '', $module_name); 20 | foreach ($list as $row) { 21 | $shop_module_config[$row['config_name']] = $row['config_value']; 22 | } 23 | 24 | $submenu['order'] = $lang_module['order_title']; 25 | 26 | if ($shop_module_config['use_shipping'] == '1') { 27 | $submenu['shipping'] = $lang_module['shipping']; 28 | } 29 | 30 | $submenu['order_seller'] = $lang_module['order_seller']; 31 | 32 | if ($shop_module_config['review_active'] == '1') { 33 | $submenu['review'] = $lang_module['review']; 34 | } 35 | 36 | if ($shop_module_config['active_warehouse']) { 37 | $submenu['warehouse_logs'] = $lang_module['warehouse_logs']; 38 | } 39 | $submenu_price=array(); 40 | $submenu_price['updateprice'] = $lang_module['updateprice']; 41 | $submenu['items'] = array( 'title' => $lang_module['content_add_items'], 'submenu' => $submenu_price ); 42 | 43 | //$submenu['items'] = $lang_module['content_add_items']; 44 | $submenu['content'] = $lang_module['content_add']; 45 | $submenu['discounts'] = $lang_module['discounts']; 46 | 47 | if ($shop_module_config['use_coupons']) { 48 | $submenu['coupons'] = $lang_module['coupons']; 49 | } 50 | 51 | if ($shop_module_config['point_active']) { 52 | $submenu['point'] = $lang_module['point']; 53 | } 54 | 55 | if ($shop_module_config['download_active']) { 56 | $submenu['download'] = $lang_module['download']; 57 | } 58 | 59 | $submenu['tags'] = $lang_module['tags']; 60 | 61 | $menu_setting = array(); 62 | $menu_setting['cat'] = $lang_module['categories']; 63 | $menu_setting['group'] = $lang_module['group']; 64 | $menu_setting['blockcat'] = $lang_module['block']; 65 | $menu_setting['prounit'] = $lang_module['prounit']; 66 | $menu_setting['money'] = $lang_module['money']; 67 | $menu_setting['weight'] = $lang_module['weight_unit']; 68 | if (defined('NV_IS_SPADMIN')) { 69 | if ($shop_module_config['template_active']) { 70 | $menu_setting['template'] = $lang_module['fields']; 71 | } 72 | $menu_setting['tabs'] = $lang_module['tabs']; 73 | 74 | if ($shop_module_config['active_payment']) { 75 | $menu_setting['docpay'] = $lang_module['document_payment']; 76 | } 77 | } 78 | $submenu['setting'] = array( 'title' => $lang_module['setting'], 'submenu' => $menu_setting ); 79 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/shipping.tpl: -------------------------------------------------------------------------------- 1 | 2 | {FILE "shipping_menu.tpl"} 3 |
4 |
5 | 6 | 7 | 8 |
9 |
10 |
11 | 12 |
13 |
14 |
15 |
16 | 22 |
23 |
24 |
25 |
26 | 32 |
33 |
34 |
35 |
36 | 37 |
38 |
39 |
40 |
41 |
42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
{LANG.order_code}{LANG.shipping_name}{LANG.order_address}{LANG.shops}{LANG.carrier}{LANG.weights}{LANG.carrier_price}
{VIEW.order_code}{VIEW.ship_name} - {VIEW.ship_phone}{VIEW.ship_location_title} {VIEW.ship_address_extend}{VIEW.ship_shops_title}{VIEW.ship_carrier_title}{VIEW.weight}{VIEW.weight_unit}{VIEW.ship_price} {VIEW.ship_price_unit}
{NV_GENERATE_PAGE}
76 |
77 | -------------------------------------------------------------------------------- /modules/shops/admin/alias.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $title = $nv_Request->get_title('title', 'post', ''); 16 | $alias = change_alias($title); 17 | if ($module_config[$module_name]['alias_lower']) { 18 | $alias = strtolower($alias); 19 | } 20 | 21 | $id = $nv_Request->get_int('id', 'post', 0); 22 | $mod = $nv_Request->get_string('mod', 'post', ''); 23 | 24 | if ($mod == 'content') { 25 | $stmt = $db->prepare('SELECT COUNT(*) FROM ' . $db_config['prefix'] . '_' . $module_data . '_rows WHERE id!=' . $id . ' AND ' . NV_LANG_DATA . '_alias= :alias'); 26 | $stmt->bindParam(':alias', $alias, PDO::PARAM_STR); 27 | $stmt->execute(); 28 | $nb = $stmt->fetchColumn(); 29 | if (!empty($nb)) { 30 | if ($id) { 31 | $alias .= '-' . $id; 32 | } else { 33 | $nb = $db->query('SELECT MAX(id) FROM ' . $db_config['prefix'] . '_' . $module_data . '_rows')->fetchColumn(); 34 | $alias .= '-' . (intval($nb) + 1); 35 | } 36 | } 37 | } 38 | 39 | if ($mod == 'cat') { 40 | list($parentid) = $db->query('SELECT parentid FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid = ' . $id)->fetch(3); 41 | 42 | $stmt = $db->prepare('SELECT count(*) FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid!=' . $id . ' AND ' . NV_LANG_DATA . '_alias= :alias'); 43 | $stmt->bindParam(':alias', $alias, PDO::PARAM_STR); 44 | $stmt->execute(); 45 | $check_alias = $stmt->fetchColumn(); 46 | 47 | if ($check_alias and $parentid > 0) { 48 | $parentid_alias = $db->query('SELECT ' . NV_LANG_DATA . '_alias FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid=' . $parentid)->fetchColumn(); 49 | $alias = $parentid_alias . '-' . $alias; 50 | 51 | // Tiếp tục kiểm tra có trùng alias của loại sản phẩm bên trong hay không 52 | $stmt = $db->prepare('SELECT count(*) FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid!=' . $id . ' AND ' . NV_LANG_DATA . '_alias= :alias'); 53 | $stmt->bindParam(':alias', $alias, PDO::PARAM_STR); 54 | $stmt->execute(); 55 | $check_alias = $stmt->fetchColumn(); 56 | } 57 | 58 | // Vẫn tiếp tục bị trùng alias thì thêm number vào phía sau 59 | if ($check_alias) { 60 | $rows_id = $db->query('SELECT MAX(catid) FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs')->fetchColumn(); 61 | $rows_id = intval($rows_id) + 1; 62 | $alias .= '-' . $rows_id; 63 | } 64 | } 65 | 66 | include NV_ROOTDIR . '/includes/header.php'; 67 | echo $alias; 68 | include NV_ROOTDIR . '/includes/footer.php'; 69 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/docpay.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 | 17 | 18 |
19 |
20 |
21 | 22 | 23 | 26 | 27 | 28 | 29 | 30 |
{LANG.setting_intro_pay} 24 |
25 | {LANG.document_payment_note}
{content_docpay}
31 |
32 |
33 |
34 |
35 | 36 | 37 | 48 | 49 | 50 | 51 | 52 |
38 | {LANG.document_payment_email_order_note} 39 |
40 |
41 | 42 |
43 | {{ORDER.key}}{ORDER.value} 44 |
45 | 46 |
47 |
{content_order}
53 |
54 |
55 |
56 |
57 | 58 | 59 | 70 | 71 | 72 | 73 | 74 |
60 | {LANG.document_payment_email_order_note} 61 |
62 |
63 | 64 |
65 | {{ORDER.key}}{ORDER.value} 66 |
67 | 68 |
69 |
{content_order_payment}
75 |
76 |
77 |
78 |
79 |
80 | 81 | 82 |
83 |
84 | -------------------------------------------------------------------------------- /modules/shops/funcs/shippingajax.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $contents = ''; 16 | 17 | if ($nv_Request->isset_request('get_carrier', 'get')) { 18 | $shopsid = $nv_Request->get_int('shops_id', 'get', 0); 19 | $carrier_id = $nv_Request->get_int('carrier_id', 'get', 0); 20 | 21 | if (! empty($shopsid)) { 22 | $db->sqlreset() 23 | ->select('t2.id, t2.name') 24 | ->from($db_config['prefix'] . '_' . $module_data . '_shops_carrier t1') 25 | ->join('INNER JOIN ' . $db_config['prefix'] . '_' . $module_data . '_carrier t2 ON t2.id = t1.carrier_id') 26 | ->where('shops_id=' . $shopsid); 27 | 28 | $_query = $db->query($db->sql()); 29 | $i = 0; 30 | while ($row = $_query->fetch()) { 31 | $sl = $row['id'] == $carrier_id ? 'checked="checked"' : ''; 32 | $contents .= ''; 33 | $i++; 34 | } 35 | } 36 | } 37 | 38 | if ($nv_Request->isset_request('get_location', 'get, post')) { 39 | $locationid = $nv_Request->get_int('location_id', 'get, post', 0); 40 | if (! empty($locationid)) { 41 | $contents = $array_location[$locationid]['title']; 42 | while ($array_location[$locationid]['parentid'] > 0) { 43 | $items = $array_location[$array_location[$locationid]['parentid']]; 44 | $contents .= ', ' . $items['title']; 45 | $array_location[$locationid]['parentid'] = $items['parentid']; 46 | } 47 | } 48 | } 49 | 50 | if ($nv_Request->isset_request('get_shipping_price', 'get')) { 51 | $weight = $nv_Request->get_float('weight', 'get', 0); 52 | $weight_unit = $nv_Request->get_string('weight_unit', 'get', ''); 53 | $location_id = $nv_Request->get_int('location_id', 'get', 0); 54 | $shops_id = $nv_Request->get_int('shops_id', 'get', 0); 55 | $carrier_id = $nv_Request->get_int('carrier_id', 'get', 0); 56 | 57 | $str_error = '' . $lang_module['shipping_error'] . ''; 58 | 59 | if (!empty($weight)) { 60 | $contents = nv_shipping_price($weight, $weight_unit, $location_id, $shops_id, $carrier_id); 61 | if (!empty($contents)) { 62 | $contents = $contents . ' ' . $pro_config['money_unit']; 63 | } else { 64 | $contents = $str_error; 65 | } 66 | } else { 67 | $contents = $str_error; 68 | } 69 | } 70 | 71 | include NV_ROOTDIR . '/includes/header.php'; 72 | echo $contents; 73 | include NV_ROOTDIR . '/includes/footer.php'; 74 | -------------------------------------------------------------------------------- /modules/shops/admin/updateprice.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $row = array(); 16 | $error = array(); 17 | $row['id'] = $nv_Request->get_int('id', 'post,get', 0); 18 | if ($nv_Request->isset_request('submit', 'post')) { 19 | $row['catid'] = $nv_Request->get_int('catid', 'post', 0); 20 | $row['newprice'] = $nv_Request->get_string('newprice', 'post', 0); 21 | $row['newprice'] = floatval(preg_replace('/[^0-9\.]/', '', $row['newprice'])); 22 | 23 | $_sql = 'SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs where catid=' . $row['catid']; 24 | $_query = $db->query($_sql); 25 | while ($row1 = $_query->fetch()) { 26 | $_sql1 = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_rows 27 | SET product_price=' . $db->quote($row['newprice']) . ' where listcatid=' . $row1['catid']; 28 | if ($row1['subcatid'] != 0) { 29 | $_sql1 .= ' OR listcatid IN (' . $row1['subcatid'] . ')'; 30 | } 31 | $execute = $db->query($_sql1); 32 | if ($execute) { 33 | nv_redirect_location(NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=items&listcatid=' . $row1['catid']); 34 | } 35 | } 36 | } else { 37 | $row['id'] = 0; 38 | $row['catid'] = 0; 39 | $row['newprice'] = 0; 40 | } 41 | 42 | $xtpl = new XTemplate($op . '.tpl', NV_ROOTDIR . '/themes/' . $global_config['module_theme'] . '/modules/' . $module_file); 43 | $xtpl->assign('LANG', $lang_module); 44 | $xtpl->assign('NV_LANG_VARIABLE', NV_LANG_VARIABLE); 45 | $xtpl->assign('NV_LANG_DATA', NV_LANG_DATA); 46 | $xtpl->assign('NV_BASE_ADMINURL', NV_BASE_ADMINURL); 47 | $xtpl->assign('NV_NAME_VARIABLE', NV_NAME_VARIABLE); 48 | $xtpl->assign('NV_OP_VARIABLE', NV_OP_VARIABLE); 49 | $xtpl->assign('MODULE_NAME', $module_name); 50 | $xtpl->assign('OP', $op); 51 | $xtpl->assign('ROW', $row); 52 | 53 | if (!empty($error)) { 54 | $xtpl->assign('ERROR', implode('
', $error)); 55 | $xtpl->parse('main.error'); 56 | } 57 | 58 | foreach ($global_array_shops_cat as $catid_i => $rowscat) { 59 | $xtitle_i = ''; 60 | if ($rowscat['lev'] > 0) { 61 | for ($i = 1; $i <= $rowscat['lev']; $i++) { 62 | $xtitle_i .= '     '; 63 | } 64 | } 65 | $rowscat['key'] = $rowscat['catid']; 66 | $rowscat['title'] = $xtitle_i . $rowscat['title']; 67 | $rowscat['selected'] = ($catid_i == $row['catid']) ? ' selected="selected"' : ''; 68 | 69 | $xtpl->assign('OPTION', $rowscat); 70 | $xtpl->parse('main.select_cateid'); 71 | } 72 | 73 | $xtpl->parse('main'); 74 | $contents = $xtpl->text('main'); 75 | 76 | $page_title = $lang_module['updateprice']; 77 | 78 | include NV_ROOTDIR . '/includes/header.php'; 79 | echo nv_admin_theme($contents); 80 | include NV_ROOTDIR . '/includes/footer.php'; 81 | -------------------------------------------------------------------------------- /modules/shops/admin/print.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $page_title = $lang_module['order_title']; 16 | $table_name = $db_config['prefix'] . '_' . $module_data . '_orders'; 17 | 18 | $id = $nv_Request->get_int('id', 'post,get', 0); 19 | $save = $nv_Request->get_string('save', 'post', ''); 20 | 21 | if ($save == 1) { 22 | $order_id = $nv_Request->get_int('order_id', 'post', 0); 23 | 24 | $db->query('UPDATE ' . $table_name . ' SET status = 1 WHERE order_id=' . $order_id); 25 | Header('Location: ' . NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=order'); 26 | } 27 | 28 | $data = $db->query('SELECT * FROM ' . $table_name . ' WHERE order_id=' . $id)->fetch(); 29 | 30 | $xtpl = new XTemplate('print.tpl', NV_ROOTDIR . '/themes/' . $global_config['module_theme'] . '/modules/' . $module_file); 31 | $xtpl->assign('LANG', $lang_module); 32 | $xtpl->assign('dateup', date('d-m-Y', $data['order_time'])); 33 | $xtpl->assign('moment', date('H:i', $data['order_time'])); 34 | $xtpl->assign('DATA', $data); 35 | $xtpl->assign('order_id', $data['order_id']); 36 | 37 | // Thong tin chi tiet mat hang trong don hang 38 | $listid = $listnum = array(); 39 | $result = $db->query('SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_orders_id WHERE order_id=' . $data['order_id']); 40 | while ($row = $result->fetch()) { 41 | $listid[] = $row['proid']; 42 | $listnum[] = $row['num']; 43 | } 44 | 45 | $i = 0; 46 | foreach ($listid as $id) { 47 | $sql = 'SELECT id, ' . NV_LANG_DATA . '_title, product_price,money_unit FROM ' . $db_config['prefix'] . '_' . $module_data . '_rows WHERE id = ' . $id . ' AND status =1 AND publtime < ' . NV_CURRENTTIME . ' AND (exptime=0 OR exptime>' . NV_CURRENTTIME . ')'; 48 | $result = $db->query($sql); 49 | list($id, $title, $product_price, $money_unit) = $result->fetch(3); 50 | 51 | $xtpl->assign('product_name', $title); 52 | $xtpl->assign('product_number', $listnum[$i]); 53 | $xtpl->assign('product_price', nv_number_format($product_price, nv_get_decimals($pro_config['money_unit']))); 54 | $xtpl->assign('product_unit', $money_unit); 55 | $xtpl->assign('tt', $i + 1); 56 | 57 | $xtpl->parse('main.loop'); 58 | ++$i; 59 | } 60 | 61 | $xtpl->assign('order_total', nv_number_format($data['order_total'], nv_get_decimals($pro_config['money_unit']))); 62 | $xtpl->assign('unit', $data['unit_total']); 63 | 64 | $payment = ($data['order_total'] == '1') ? $lang_module['order_payment'] : $lang_module['order_no_payment']; 65 | 66 | $xtpl->assign('payment', $payment); 67 | 68 | if ($data['status'] != '1') { 69 | $xtpl->parse('main.onsubmit'); 70 | } 71 | 72 | $xtpl->parse('main'); 73 | 74 | $contents = $xtpl->text('main'); 75 | 76 | include NV_ROOTDIR . '/includes/header.php'; 77 | echo $contents; 78 | include NV_ROOTDIR . '/includes/footer.php'; 79 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/print.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | print 7 | 8 | 9 | 10 | 11 | 12 | 48 | 49 | 50 | 98 | 99 |
51 |
52 | {LANG.order_info} ( {LANG.order_date} {dateup} {LANG.order_moment} {moment}) 53 |
54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 |
{LANG.order_name}: {DATA.order_name}
{LANG.order_email}: {DATA.order_email}
{LANG.order_address}: {DATA.order_address}
{LANG.order_phone}: {DATA.order_phone}
73 |
74 | {DATA.order_note} 75 |
76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 |
 {LANG.name}{LANG.order_product_number}{LANG.order_product_price}{LANG.order_product_unit}
{tt}{product_name}{product_number}{product_price}{product_unit}
94 |
95 | {LANG.order_total} : {order_total} {unit} -/- {payment} 96 |
97 |
100 | 101 | 102 | -------------------------------------------------------------------------------- /themes/default/modules/shops/history_order.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 37 | 38 | 39 | 40 |
{LANG.order_no_products}{LANG.order_code}{LANG.history_date}{LANG.history_total}{LANG.history_payment} 
{TT}{order_code}{history_date} {LANG.order_moment} {history_moment}{history_total} ({unit_total}){history_payment} 27 | 28 | 29 | 30 | 31 |   32 | 33 | 34 |   35 | 36 |
41 |
42 | 69 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/topics.tpl: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 16 | 17 | 18 |
{LANG.content_cat} 11 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |
{LANG.weight}{LANG.topic_title}{LANG.topic_sub}{LANG.function}
{ROW.slect_weight} {ROW.title}{ROW.keywords}{LANG.edit}  {LANG.del}
 
42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 62 | 63 | 64 |
{DATA.caption}
{LANG.topic_title}:
{LANG.alias}:
{LANG.topic_sub}: 60 |
61 | {LANG.topic_sub_note}
65 |
66 |
67 | 88 | -------------------------------------------------------------------------------- /modules/shops/funcs/wishlist_update.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_MOD_SHOPS')) { 12 | die('Stop!!!'); 13 | } 14 | if (! defined('NV_IS_AJAX')) { 15 | die('Wrong URL'); 16 | } 17 | 18 | $id = $nv_Request->get_int('id', 'post,get', 0); 19 | $ac = $nv_Request->get_string('ac', 'post,get', ''); 20 | 21 | if (empty($user_info)) { 22 | die('NO_0_' . $lang_module['wishlist_guest']); 23 | } 24 | if (empty($id) or empty($ac)) { 25 | die('NO_0_' . $lang_module['wishlist_error']); 26 | } 27 | 28 | if ($ac == 'add') { 29 | $wishlist = $db->query('SELECT * FROM ' . $db_config['prefix'] . '_' . $module_data . '_wishlist WHERE user_id = ' . $user_info['userid'])->fetch(); 30 | if (sizeof($wishlist) > 1) { 31 | $listid = $wishlist['listid']; 32 | if (! empty($listid)) { 33 | $listid = explode(',', $listid); 34 | } else { 35 | $listid = array(); 36 | } 37 | $count = count($listid); 38 | 39 | if (! in_array($id, $listid)) { 40 | $listid[] = $id; 41 | $listid = implode(',', $listid); 42 | 43 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_wishlist SET listid = ' . $db->quote($listid) . ' WHERE wid = ' . $wishlist['wid']; 44 | if (! $db->query($sql)) { 45 | die('NO_0_' . $lang_module['wishlist_error']); 46 | } else { 47 | $count += 1; 48 | } 49 | } else { 50 | die('NO_0_' . $lang_module['wishlist_exits']); 51 | } 52 | } else { 53 | $count = 1; 54 | $sql = 'INSERT INTO ' . $db_config['prefix'] . '_' . $module_data . '_wishlist (user_id, listid) VALUES (' . $user_info['userid'] . ', ' . $id . ' )'; 55 | if (! $db->query($sql)) { 56 | die('NO_0_' . $lang_module['wishlist_error']); 57 | } 58 | } 59 | 60 | $nv_Cache->delMod($module_name); 61 | } elseif ($ac == 'del') { 62 | $listid = explode(',', $listid); 63 | $count = count($listid); 64 | 65 | if (in_array($id, $listid)) { 66 | foreach ($listid as $key => $rid) { 67 | if ($rid == $id) { 68 | unset($listid[$key]); 69 | } 70 | } 71 | 72 | if (count($listid) > 0) { 73 | $listid = implode(',', $listid); 74 | } else { 75 | $listid = ''; 76 | } 77 | 78 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_wishlist SET listid = ' . $db->quote($listid) . ' WHERE user_id = ' . $user_info['userid']; 79 | if (! $db->query($sql)) { 80 | die('NO_0_' . $lang_module['wishlist_error']); 81 | } else { 82 | $count -= 1; 83 | } 84 | $nv_Cache->delMod($module_name); 85 | } 86 | } 87 | 88 | include NV_ROOTDIR . '/includes/header.php'; 89 | echo 'OK_' . $count . '_' . ($ac == 'add' ? $lang_module['wishlist_add_success'] : $lang_module['wishlist_del_item_success']); 90 | include NV_ROOTDIR . '/includes/footer.php'; -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/group_lists.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | {GROUP_NAV} 6 | 7 |
8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 32 | 36 | 43 | 50 | 57 | 64 | 65 | 66 | 67 | 68 |
{LANG.weight}{LANG.group_name}{LANG.groupview_page}{LANG.inhome}{LANG.indetail}  {LANG.in_order} 
27 | 33 | {ROW.title} 34 | {ROW.numsubgroup} 35 | 37 | 42 | 44 | 49 | 51 | 56 | 58 | 63 |  {GLANG.edit}   -  {GLANG.delete}
69 |
70 | 71 | -------------------------------------------------------------------------------- /themes/default/images/shops/OwlCarousel2/assets/owl.carousel.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.3.4 3 | * Copyright 2013-2018 David Deutsch 4 | * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE 5 | */ 6 | .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=""]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%} -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/getprice.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
{LANG.discount_to}{LANG.content_product_product_price}
27 |
28 |
29 | 34 |
35 | 36 | 37 | 38 |
39 | 40 |
41 |
42 | 47 |
48 | 49 | 50 |
51 | 57 |
58 | 59 |
60 | 61 |
62 | 63 |
64 | 65 |
66 |
67 | 68 | -------------------------------------------------------------------------------- /themes/default/modules/shops/compare.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 |
  12 |
21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
{LANG.detail_product_name}{title_pro}
{LANG.product_intro}{intro}
{LANG.detail_product}{bodytext}
{LANG.title_price} 54 | 55 | {PRICE.sale_format} {PRICE.unit}
56 | {PRICE.price_format} {PRICE.unit} 57 | 58 | 59 | 60 | {PRICE.price_format} {PRICE.unit} 61 | 62 |
{LANG.detail_pro_price}: {LANG.price_contact}
{LANG.detail_warranty}{warranty}
{LANG.detail_promotional}{promotional}
83 |
84 |
 
85 | 88 | 89 | -------------------------------------------------------------------------------- /modules/shops/admin/change_cat.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (! defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | $catid = $nv_Request->get_int('catid', 'post', 0); 16 | $mod = $nv_Request->get_string('mod', 'post', ''); 17 | $new_vid = $nv_Request->get_int('new_vid', 'post', 0); 18 | $content = 'NO_' . $catid; 19 | 20 | list($catid, $parentid, $numsubcat) = $db->query('SELECT catid, parentid, numsubcat FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid=' . $catid)->fetch(3); 21 | if ($catid > 0) { 22 | if ($mod == 'weight' and $new_vid > 0) { 23 | $sql = 'SELECT catid FROM ' . $db_config['prefix'] . '_' . $module_data . '_catalogs WHERE catid!=' . $catid . ' AND parentid=' . $parentid . ' ORDER BY weight ASC'; 24 | $result = $db->query($sql); 25 | 26 | $weight = 0; 27 | while ($row = $result->fetch()) { 28 | ++$weight; 29 | if ($weight == $new_vid) { 30 | ++$weight; 31 | } 32 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET weight=' . $weight . ' WHERE catid=' . intval($row['catid']); 33 | $db->query($sql); 34 | } 35 | 36 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET weight=' . $new_vid . ' WHERE catid=' . $catid; 37 | $db->query($sql); 38 | 39 | nv_fix_cat_order(); 40 | $content = 'OK_' . $parentid; 41 | } elseif ($mod == 'inhome' and ($new_vid == 0 or $new_vid == 1)) { 42 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET inhome=' . $new_vid . ' WHERE catid=' . $catid; 43 | $db->query($sql); 44 | 45 | $content = 'OK_' . $parentid; 46 | } elseif ($mod == 'numlinks' and $new_vid >= 0 and $new_vid <= 10) { 47 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET numlinks=' . $new_vid . ' WHERE catid=' . $catid; 48 | $db->query($sql); 49 | $content = 'OK_' . $parentid; 50 | } elseif ($mod == 'viewcat' and $nv_Request->isset_request('new_vid', 'post')) { 51 | $viewcat = $nv_Request->get_title('new_vid', 'post'); 52 | 53 | $array_viewcat = ($numsubcat > 0) ? $array_viewcat_full : $array_viewcat_nosub; 54 | if (! array_key_exists($viewcat, $array_viewcat)) { 55 | $viewcat = 'viewcat_page_new'; 56 | } 57 | 58 | $stmt = $db->prepare('UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET viewcat= :viewcat WHERE catid=' . $catid); 59 | $stmt->bindParam(':viewcat', $viewcat, PDO::PARAM_STR); 60 | $stmt->execute(); 61 | 62 | $content = 'OK_' . $parentid; 63 | } elseif ($mod == 'newday' and $new_vid >= 0) { 64 | $sql = 'UPDATE ' . $db_config['prefix'] . '_' . $module_data . '_catalogs SET newday=' . $new_vid . ' WHERE catid=' . $catid; 65 | $db->query($sql); 66 | $content = 'OK_' . $parentid; 67 | } 68 | $nv_Cache->delMod($module_name); 69 | } 70 | 71 | include NV_ROOTDIR . '/includes/header.php'; 72 | echo $content; 73 | include NV_ROOTDIR . '/includes/footer.php'; 74 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/order_seller.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 | 10 | 11 |
12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 31 |
32 |
33 | 34 | 35 |
36 |
37 |
38 | 39 | 40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 |
{LANG.order_name}{LANG.order_email}{LANG.order_count}
{DATA.order_name}{DATA.order_email}{DATA.num_total} 
{PAGES}
69 |
70 | 71 | 72 | 85 | -------------------------------------------------------------------------------- /themes/default/modules/shops/print.tpl: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 |
15 | 16 | 17 | 40 | 48 | 49 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
{LANG.order_name}: {DATA.order_name}
{LANG.order_email}: {DATA.order_email}
{LANG.order_phone}: {DATA.order_phone}
{LANG.order_address}: {DATA.order_address}
{LANG.order_date}: {dateup} {LANG.order_moment} {moment}
41 |
42 | {LANG.order_code} 43 |
44 | {DATA.order_code} 45 |
46 | {payment} 47 |
50 | 51 | 52 | {LANG.product_unit_price}: {unit} 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 |
{LANG.order_no_products} {LANG.cart_products} {MAIN_GROUP.title} {LANG.cart_price} {LANG.cart_numbers} {LANG.cart_unit} {LANG.cart_price_total}
{pro_no} {product_name}{SUB_GROUP}{product_price} {product_number} {product_unit} {product_price_total}
89 | 90 |
91 |
92 | 93 | {LANG.cart_note} : {DATA.order_note} 94 | 95 |
96 |
97 | 98 | {LANG.cart_total_print}: {order_total} {unit} 99 | 100 |
101 |
102 | 103 |
104 | 105 |
106 |
107 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/cat_lists.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | {CAT_NAV} 6 | 7 |
8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 33 | 34 | 41 | 48 | 55 | 62 | 69 | 70 | 71 | 72 |
{LANG.weight}{LANG.catalog_name}{LANG.inhome}{LANG.viewcat_page}{LANG.numlinks}{LANG.newday}{LANG.function}
27 | 32 | {ROW.title} {ROW.numsubcat} 35 | 40 | 42 | 47 | 49 | 54 | 56 | 61 | 63 |  {LANG.content_add} 64 |   65 |  {GLANG.edit} 66 |   67 |  {GLANG.delete} 68 |
73 |
74 | 75 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/prounit.tpl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
 {LANG.prounit_name_unit}{LANG.prounit_name_note}{LANG.function}
{title}{note} {LANG.edit}   {LANG.del}
 {LANG.prounit_select} -   {LANG.prounit_unselect} -  {LANG.prounit_del_select}
28 | 76 | 77 |
78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |
{caption}
{LANG.prounit_name_unit}:
{LANG.prounit_name_note}:
90 |
91 |
92 | 93 |
94 |
95 | -------------------------------------------------------------------------------- /themes/admin_default/modules/shops/review.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 | 6 | 7 |
8 |
9 |
10 | 11 |
12 |
13 |
14 |
15 | 21 |
22 |
23 |
24 |
25 | 26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 |
{LANG.name}{LANG.review_sender}{LANG.review_rating}{LANG.search_bodytext}{LANG.review_add_time}{LANG.status} 
{VIEW.title}{VIEW.sender}{VIEW.rating}{VIEW.content}{VIEW.add_time}{VIEW.status} {GLANG.delete}
{NV_GENERATE_PAGE}
77 |
78 |   83 | 84 |
85 | -------------------------------------------------------------------------------- /themes/default/modules/shops/block.filter_product_cat.tpl: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 |
7 |
8 |

{MAIN_GROUP.title}:

9 |
10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 |
27 | 28 |
29 | 30 |
31 |
32 | 33 | 71 | 72 | -------------------------------------------------------------------------------- /modules/shops/admin/point.php: -------------------------------------------------------------------------------- 1 | 6 | * @Copyright (C) 2017 VINADES.,JSC. All rights reserved 7 | * @License GNU/GPL version 2 or any later version 8 | * @Createdate 04/18/2017 09:47 9 | */ 10 | 11 | if (!defined('NV_IS_FILE_ADMIN')) { 12 | die('Stop!!!'); 13 | } 14 | 15 | if (!$pro_config['point_active']) { 16 | nv_redirect_location(NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name); 17 | } 18 | 19 | $q = $nv_Request->get_title('q', 'post,get'); 20 | $per_page = 20; 21 | $page = $nv_Request->get_int('page', 'post,get', 1); 22 | $db->sqlreset() 23 | ->select('COUNT(*)') 24 | ->from(NV_USERS_GLOBALTABLE . ' t1') 25 | ->join('LEFT JOIN ' . $db_config['prefix'] . '_' . $module_data . '_point t2 ON t1.userid=t2.userid'); 26 | 27 | if (!empty($q)) { 28 | $db->where('username LIKE :q_username OR first_name LIKE :q_first_name OR last_name LIKE :q_last_name OR email LIKE :q_email'); 29 | } 30 | 31 | $sth = $db->prepare($db->sql()); 32 | 33 | if (!empty($q)) { 34 | $sth->bindValue(':q_username', '%' . $q . '%'); 35 | $sth->bindValue(':q_first_name', '%' . $q . '%'); 36 | $sth->bindValue(':q_last_name', '%' . $q . '%'); 37 | $sth->bindValue(':q_email', '%' . $q . '%'); 38 | } 39 | $sth->execute(); 40 | $num_items = $sth->fetchColumn(); 41 | 42 | $db->select('t1.username, t1.first_name, t1.last_name, t1.email, t2.*')->order('t1.userid DESC')->limit($per_page)->offset(($page - 1) * $per_page); 43 | $sth = $db->prepare($db->sql()); 44 | 45 | if (!empty($q)) { 46 | $sth->bindValue(':q_username', '%' . $q . '%'); 47 | $sth->bindValue(':q_first_name', '%' . $q . '%'); 48 | $sth->bindValue(':q_last_name', '%' . $q . '%'); 49 | $sth->bindValue(':q_email', '%' . $q . '%'); 50 | } 51 | $sth->execute(); 52 | 53 | $xtpl = new XTemplate($op . '.tpl', NV_ROOTDIR . '/themes/' . $global_config['module_theme'] . '/modules/' . $module_file); 54 | $xtpl->assign('LANG', $lang_module); 55 | $xtpl->assign('NV_LANG_VARIABLE', NV_LANG_VARIABLE); 56 | $xtpl->assign('NV_LANG_DATA', NV_LANG_DATA); 57 | $xtpl->assign('NV_BASE_ADMINURL', NV_BASE_ADMINURL); 58 | $xtpl->assign('NV_NAME_VARIABLE', NV_NAME_VARIABLE); 59 | $xtpl->assign('NV_OP_VARIABLE', NV_OP_VARIABLE); 60 | $xtpl->assign('MODULE_NAME', $module_name); 61 | $xtpl->assign('OP', $op); 62 | $xtpl->assign('Q', $q); 63 | $xtpl->assign('money_unit', $pro_config['money_unit']); 64 | 65 | $base_url = NV_BASE_ADMINURL . 'index.php?' . NV_LANG_VARIABLE . '=' . NV_LANG_DATA . '&' . NV_NAME_VARIABLE . '=' . $module_name . '&' . NV_OP_VARIABLE . '=' . $op; 66 | if (!empty($q)) { 67 | $base_url .= '&q=' . $q; 68 | } 69 | $generate_page = nv_generate_page($base_url, $num_items, $per_page, $page); 70 | if (!empty($generate_page)) { 71 | $xtpl->assign('NV_GENERATE_PAGE', $generate_page); 72 | $xtpl->parse('main.generate_page'); 73 | } 74 | 75 | while ($view = $sth->fetch()) { 76 | $view['point_total'] = !empty($view['point_total']) ? $view['point_total'] : 0; 77 | $view['money'] = nv_number_format($view['point_total'] * $pro_config['point_conversion'], nv_get_decimals($pro_config['money_unit'])); 78 | $xtpl->assign('VIEW', $view); 79 | $xtpl->parse('main.loop'); 80 | } 81 | 82 | $xtpl->parse('main'); 83 | $contents = $xtpl->text('main'); 84 | 85 | $page_title = $lang_module['point']; 86 | 87 | include NV_ROOTDIR . '/includes/header.php'; 88 | echo nv_admin_theme($contents); 89 | include NV_ROOTDIR . '/includes/footer.php'; 90 | -------------------------------------------------------------------------------- /CHANGELOG-SHOPS.txt: -------------------------------------------------------------------------------- 1 | CHANGE LOG: MODULE SHOPS 2 | 3 | Module Shops 4.0.19 4 | + Upadte for NukeViet 4.0.24 5 | + Gallery in detaild product, Fix modal-body thank anhyeuviolet 6 | + Fix cart error quantity empty 7 | + Fix add title block for block shops 8 | + Update custom title for seo 9 | + Fix use coupons code 10 | + Support utf8mb4 11 | + Add More https://github.com/nukeviet/module-shops/compare/4.0.18...4.0.19 12 | 13 | Module Shops 4.0.16 14 | + Sửa một số lỗi Module Shops 4.0.15 15 | + Cho phép xuống dòng trong nội dung quà tặng 16 | + Thêm đường dẫn đến bài viết giới thiệu từng chức trên wiki 17 | + Thêm dữ liệu mẫu sau khi cài đặt module. 18 | 19 | Module Shops 4.0.15 20 | + Sửa một số lỗi Module Shops 4.0.14 21 | + Loại bỏ ID sản phẩm trên URL sản phẩm 22 | + Thêm chức năng Quản lý tập tin đính kèm 23 | + Thêm chức năng Quản lý tab (trên trang chi tiết) 24 | 25 | Module Shops 4.0.14 26 | + Bỏ tính năng hãng sản xuất 27 | + Thay đổi cơ chế quản lý và sử dụng nhóm sản phẩm 28 | * Thêm logo cho nhóm 29 | * Cấu hình hiển thị nhóm tại trang xem chi tiết sản phẩm. Ví dụ: Quần áo có màu sắc xanh, đỏ, tím, vàng,..... Các size: S, M,.... Lựa chọn các thuộc tính khi đặt hàng. 30 | * Thêm block filter_product, block filter_product_cat có chức năng hiển thị các nhóm sản phẩm tại site, chọn nhóm và hiển thị các sản phẩm có cùng thuộc tính. 31 | + Thay đổi cơ chế giảm giá 32 | * Bỏ nhập % giảm giá vào từng sản phẩm, thay vào đó là chọn nhóm giảm giá (những sản phẩm cùng nhóm sẽ được áp dụng chung một cơ chế giảm giá) 33 | * Mỗi cơ chế giảm giá có các thông tin: Tiêu đề, ngày bắt đầu, ngày kết thúc, mỗi số lượng sản phẩm đặt hàng sẽ được áp dụng % giảm giá riêng. Ví dụ: 34 | * Thêm cơ chế giảm gía theo số lượng sản phẩm đặt hàng. 35 | + Thêm cơ chế làm tròn theo từng loại tiền tệ 36 | + Thay đổi quản lý Loại sản phẩm 37 | * Thêm chức năng tùy biến trường dữ liệu theo loại sản phẩm. 38 | * Tính năng hiển thị icon giảm giá, new theo thời gian chỉ định sau thời gian này các icon sẽ biến mất, giống news. 39 | + Thêm chức năng so sánh sản phẩm 40 | + Thêm chức năng Sản phẩm yêu thích 41 | + Thay thế từ khóa bằng tags 42 | + Thêm tính năng quản lý chi phí vận chuyển 43 | + Cho phép quản trị hủy xác nhận đơn hàng (nếu đã xác nhận) 44 | + Thêm chức năng tính điểm tích lũy 45 | + Thêm chức năng mã giảm gía 46 | + Hiển thị nhóm sản phẩm đi kèm với thông tin sản phẩm 47 | + Cho phép khách hàng có thể sửa lại đơn hàng đã đặt trước đó 48 | + Thêm chức năng sao chép sản phẩm 49 | + Hiển thị gía / khuyến mãi ở các block sản phẩm 50 | + Thêm cấu hình định dạng gía tiền (ký tự phân cách chữ số thập phân,..) 51 | + Cho phép chon phương án hiển thị sản phẩm (lưới, danh sách) khi xem chủ đề. 52 | + Thêm Rich snippets - Products - bổ trợ SEO 53 | + Cho phép hiển thị popup xem thông tin sản phẩm khi ở danh sách sản phẩm. 54 | + Thay đổi hệ thống đánh gía sản phẩm. Có thể cho điểm và viết nhân xét. 55 | + Cấu hình các nhóm nhận thông tin (Các nhóm nhận được email khi có đơn hàng mới, thanh toán,....) 56 | + Các thay đổi khác 57 | * Thêm bộ lọc các đơn hàng (ACP), hiển thị tổng số lượng đơn hàng, tổng giá trị các đơn hàng. 58 | * Cho phép xuống dòng khi nhập "Giới thiệu ngắn gọn" 59 | * Hiển thị số lượng hàng còn lại trong kho tại trang xem chi tiết sản phẩm, nếu hết hàng thì ẩn nút đặt hàng, thay thế bằng thông báo "Hết hàng" 60 | * Hiển thị hướng dẫn thanh toán tại trang thông tin đơn hàng (không bắt buộc phải tích hợp ít nhất một cổng thanh toán như trước) 61 | --------------------------------------------------------------------------------