├── logs └── log_file.txt ├── views ├── access_denied.php ├── account │ ├── empty.php │ ├── login.php │ ├── recovery_pass.php │ ├── create_new_password.php │ ├── entrance.php │ └── registration.php ├── return_info │ └── index.php ├── oferta │ └── index.php ├── safety │ └── index.php ├── contacts │ └── index.php ├── about │ └── about.php ├── delivery │ └── delivery.php ├── admin │ ├── admin_brands.php │ ├── admin_size.php │ ├── admin_subcategory.php │ ├── admin_status_order.php │ ├── admin_order_adm.php │ ├── admin_oferta_update.php │ ├── admin_return_update.php │ ├── admin_safety_update.php │ ├── admin_insert_brand.php │ ├── admin_size_insert.php │ ├── admin_insert_subcategory.php │ ├── admin_status_order_insert.php │ ├── admin_size_update.php │ ├── admin_about_update.php │ ├── admin_delivery_update.php │ ├── admin_contacts_update.php │ ├── admin_update_subcategory.php │ ├── admin_update_brand.php │ ├── admin_status_order_update.php │ ├── admin_cards.php │ ├── admin_card_insert.php │ ├── admin_slider.php │ ├── admin_card_update.php │ ├── admin_slider_insert.php │ ├── admin_news_insert.php │ ├── admin_users_one_adm.php │ ├── admin_slider_update.php │ ├── admin_users_all_adm.php │ ├── admin_news_update.php │ └── admin_news.php ├── news │ ├── index.php │ └── news_one.php ├── header │ ├── main_menu.php │ └── header.php ├── cabinet_menu │ └── index.php ├── cart │ ├── index.php │ └── massege_order.php ├── footer │ └── footer.php └── cabinet │ └── cabinet.php ├── public ├── img │ └── favicon.ico ├── img_cards │ └── favicon.ico ├── img_info │ └── favicon.ico ├── img_news │ └── favicon.ico ├── slick │ ├── ajax-loader.gif │ ├── fonts │ │ ├── slick.eot │ │ ├── slick.ttf │ │ ├── slick.woff │ │ └── slick.svg │ ├── my_slick_js.js │ ├── slick.css │ └── slick-theme.css ├── img_slider │ └── favicon.ico ├── fonts │ ├── ProximaNova-Bold.eot │ ├── ProximaNova-Bold.ttf │ ├── ProximaNova-Bold.woff │ ├── ProximaNova-Bold.woff2 │ ├── ProximaNova-Regular.eot │ ├── ProximaNova-Regular.ttf │ ├── ProximaNova-Regular.woff │ └── ProximaNova-Regular.woff2 └── img_products │ └── favicon.ico ├── config ├── settings.php └── routes.php ├── logs_orders └── manager_orders_unsent.txt ├── .htaccess ├── models ├── AdminSizes.php ├── AdminBrands.php ├── AdminStatusOrder.php ├── AdminSubcategory.php ├── Search.php ├── About.php ├── Safety.php ├── Oferta.php ├── Contacts.php ├── Retur_n.php ├── Delivery.php ├── Cards.php ├── Slider.php ├── News.php └── Orders.php ├── robots.php ├── components ├── Autoload.php ├── Connection.php ├── functions.php └── Router.php ├── index.php ├── controllers ├── AboutController.php ├── SafetyController.php ├── ContactsController.php ├── DeliveryController.php ├── OfertaController.php ├── CoreController.php ├── ReturnInfoController.php ├── MainController.php ├── AdminOfertaController.php ├── AdminReturnController.php ├── AdminSafetyController.php ├── NewsController.php ├── CartController.php ├── ProductsController.php ├── AdminAboutController.php ├── AdminDeliveryController.php ├── AdminContactsController.php ├── AdminOrdersController.php ├── AdminBrandController.php ├── AdminSizeController.php ├── AdminSubcategoryController.php ├── AdminUsersController.php └── AdminStatusOrderController.php └── README.md /logs/log_file.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/access_denied.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img/favicon.ico -------------------------------------------------------------------------------- /public/img_cards/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img_cards/favicon.ico -------------------------------------------------------------------------------- /public/img_info/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img_info/favicon.ico -------------------------------------------------------------------------------- /public/img_news/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img_news/favicon.ico -------------------------------------------------------------------------------- /public/slick/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/slick/ajax-loader.gif -------------------------------------------------------------------------------- /public/slick/fonts/slick.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/slick/fonts/slick.eot -------------------------------------------------------------------------------- /public/slick/fonts/slick.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/slick/fonts/slick.ttf -------------------------------------------------------------------------------- /public/img_slider/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img_slider/favicon.ico -------------------------------------------------------------------------------- /public/slick/fonts/slick.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/slick/fonts/slick.woff -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Bold.eot -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Bold.ttf -------------------------------------------------------------------------------- /public/img_products/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/img_products/favicon.ico -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Bold.woff -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Bold.woff2 -------------------------------------------------------------------------------- /views/account/empty.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Regular.eot -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Regular.ttf -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Regular.woff -------------------------------------------------------------------------------- /public/fonts/ProximaNova-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/StadnikAndrey/online-store/main/public/fonts/ProximaNova-Regular.woff2 -------------------------------------------------------------------------------- /config/settings.php: -------------------------------------------------------------------------------- 1 | "localhost", 4 | "db_name" => " ", 5 | "db_user" => " ", 6 | "db_pass" => " ", 7 | "login_tries" => 3, 8 | ); 9 | 10 | 11 | ?> -------------------------------------------------------------------------------- /logs_orders/manager_orders_unsent.txt: -------------------------------------------------------------------------------- 1 | Заказ №61. Дата: 2020-04-15 19:43:14 2 | Заказ №62. Дата: 2020-04-15 19:43:23 3 | Заказ №63. Дата: 2020-04-15 19:43:39 4 | Заказ №64. Дата: 2020-04-15 19:43:46 5 | Заказ №65 Дата: 2020-04-15 19:53:41 6 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | AddDefaultCharset UTF-8 2 | Options -Indexes 3 | 4 | RewriteEngine on 5 | RewriteBase / 6 | 7 | RewriteCond %{REQUEST_URI} !(^/public/) 8 | RewriteRule ^(.*)$ index.php 9 | 10 | RewriteCond %{REQUEST_FILENAME} !-f 11 | RewriteCond %{REQUEST_FILENAME} !-d 12 | 13 | RewriteRule ^(.*)$ index.php -------------------------------------------------------------------------------- /views/return_info/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |

Возврат товара

6 |
7 | 8 |
9 | 10 | -------------------------------------------------------------------------------- /views/oferta/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |

Договор публичной оферты

7 |
8 |
9 |
10 | 11 |
12 | 13 | -------------------------------------------------------------------------------- /views/safety/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 |

Политика конфиденциальности

7 |
8 |
9 |
10 | 11 |
12 | 13 | -------------------------------------------------------------------------------- /models/AdminSizes.php: -------------------------------------------------------------------------------- 1 | prepare($query); 10 | $q->bindValue(':name', $name); 11 | $q->execute(); 12 | return $result = $q->fetchAll(); 13 | } 14 | } 15 | ?> -------------------------------------------------------------------------------- /robots.php: -------------------------------------------------------------------------------- 1 | 3 | User-Agent: * 4 | Disallow: /admin/ 5 | Disallow: /cart 6 | Disallow: /cart/ 7 | Disallow: /checkout 8 | Disallow: /entrance 9 | Disallow: /registration 10 | Disallow: /profile 11 | Disallow: /cabinet 12 | Disallow: /login 13 | Disallow: /logout 14 | Disallow: /recovery 15 | 16 | Sitemap: http://shoptest.kl.com.ua/sitemap.xml 17 | ' 18 | ?> -------------------------------------------------------------------------------- /components/Autoload.php: -------------------------------------------------------------------------------- 1 | prepare($query); 10 | $q->bindValue(':name', $name); 11 | $q->execute(); 12 | return $result = $q->fetchAll(); 13 | } 14 | } 15 | ?> -------------------------------------------------------------------------------- /models/AdminStatusOrder.php: -------------------------------------------------------------------------------- 1 | prepare($query); 10 | $q->bindValue(':name', $name); 11 | $q->execute(); 12 | return $result = $q->fetchAll(); 13 | } 14 | } 15 | ?> -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | run(); -------------------------------------------------------------------------------- /models/AdminSubcategory.php: -------------------------------------------------------------------------------- 1 | prepare($query); 10 | $q->bindValue(':name', $name); 11 | $q->execute(); 12 | return $result = $q->fetchAll(); 13 | } 14 | 15 | } 16 | ?> -------------------------------------------------------------------------------- /components/Connection.php: -------------------------------------------------------------------------------- 1 | PDO::FETCH_ASSOC 12 | ); 13 | 14 | if(DEBUG_MODE === true) { 15 | $pdoOpts[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 16 | } 17 | return new PDO("mysql:host=$host;dbname=$db;charset=$charset", $login,$pass, $pdoOpts); 18 | } 19 | 20 | } 21 | 22 | ?> -------------------------------------------------------------------------------- /views/contacts/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | Контактная информация интернет-иагазина Shoptest 5 |
6 |
7 |
8 |

Контакты

9 |
10 |
11 |
12 | 13 |
14 | 15 | -------------------------------------------------------------------------------- /views/about/about.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | Информация об интернет-магазине кроссовок Shoptest 5 |
6 | 7 |
8 |
9 |

О компании

10 |
11 |
12 |
13 | 14 |
15 | 16 | -------------------------------------------------------------------------------- /models/Search.php: -------------------------------------------------------------------------------- 1 | query($query); 17 | $result = $q->fetchAll(); 18 | 19 | return $result; 20 | } 21 | } 22 | } 23 | ?> -------------------------------------------------------------------------------- /views/delivery/delivery.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | Условия доставки интернет-магазина Shoptest 5 |
6 | 7 |
8 |
9 |

Доставка и оплата

10 |
11 |
12 |
13 | 14 | 15 |
16 | 17 | -------------------------------------------------------------------------------- /controllers/AboutController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/SafetyController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/slick/my_slick_js.js: -------------------------------------------------------------------------------- 1 | $(document).on('ready', function() { 2 | 3 | $('.slider-for').slick({ 4 | slidesToShow: 1, 5 | slidesToScroll: 1, 6 | arrows: false, 7 | // fade: true, 8 | asNavFor: '.slider-nav', 9 | focusOnSelect: true, 10 | responsive: [ 11 | { 12 | breakpoint: 450, 13 | settings: { 14 | infinite: true, 15 | dots: true 16 | } 17 | } 18 | ] 19 | }); 20 | 21 | $('.slider-nav').slick({ 22 | slidesToShow: 5, 23 | slidesToScroll: 1, 24 | asNavFor: '.slider-for', 25 | focusOnSelect: true, 26 | vertical: true, 27 | // centerMode: true, 28 | 29 | }); 30 | 31 | 32 | }); -------------------------------------------------------------------------------- /controllers/ContactsController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/DeliveryController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/OfertaController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/CoreController.php: -------------------------------------------------------------------------------- 1 | 'Men', 7 | 'href' => '/products/1', 8 | 'page' => 'men' 9 | ), 10 | array( 11 | 'text' => 'Woman', 12 | 'href' => '/products/2', 13 | 'page' => 'woman' 14 | ), 15 | array( 16 | 'text' => 'О нас', 17 | 'href' => '/about', 18 | 'page' => 'about' 19 | ), 20 | array( 21 | 'text' => 'Новости', 22 | 'href' => '/news', 23 | 'page' => 'news' 24 | ), 25 | array( 26 | 'text' => 'Контакты', 27 | 'href' => '/contacts', 28 | 'page' => 'contacts' 29 | ), 30 | 31 | ); 32 | return $menu; 33 | } 34 | } 35 | ?> -------------------------------------------------------------------------------- /controllers/ReturnInfoController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /models/About.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | } 36 | ?> -------------------------------------------------------------------------------- /models/Safety.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | 36 | 37 | } 38 | ?> -------------------------------------------------------------------------------- /models/Oferta.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | 36 | 37 | } 38 | ?> -------------------------------------------------------------------------------- /models/Contacts.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | 36 | 37 | } 38 | ?> -------------------------------------------------------------------------------- /models/Retur_n.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | 36 | 37 | } 38 | ?> -------------------------------------------------------------------------------- /models/Delivery.php: -------------------------------------------------------------------------------- 1 | query($query); 10 | return $result = $q->fetch(); 11 | } 12 | 13 | // изменение данных в любой таблице 14 | public static function updateDataTable($data, $table, $id) { 15 | global $pdo; 16 | if (isset($data)&&!empty($data)) { 17 | $query = "UPDATE $table SET "; 18 | 19 | foreach ($data as $field => $value) { 20 | $query .= $field . ' = :' . $field . ', '; 21 | } 22 | 23 | $query = substr($query, 0, -2); 24 | $query .= " WHERE id=$id "; 25 | 26 | $q = $pdo->prepare($query); 27 | 28 | foreach ($data as $field => $value) { 29 | $q->bindValue(':' . $field, $value); 30 | } 31 | 32 | return $q->execute(); 33 | } 34 | } 35 | 36 | 37 | } 38 | ?> -------------------------------------------------------------------------------- /views/admin/admin_brands.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить бренд 6 | $brand) : ?> 7 |
8 |

id:

9 |

10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /views/admin/admin_size.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить размер 6 | 7 | $size): ?> 8 |
9 | 10 |

id:

11 |

12 | 13 | 14 | 15 |
16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /controllers/MainController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin/admin_subcategory.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить субкатегорию 6 | 7 | $subcategory) : ?> 8 |
9 |

id:

10 |

11 | 12 |
13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /views/admin/admin_status_order.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить статус заказа 6 | 7 | $status) : ?> 8 |
9 |

id:

10 |

11 | 12 |
13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /views/news/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 | $unit) : ?> 7 | 19 | 20 | 21 |

Новостей нет!

22 | 23 | 24 | 25 |
26 |
27 | 28 | 29 | 30 | 31 |
32 | 33 | -------------------------------------------------------------------------------- /views/account/login.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | 33 |
34 |
35 | 36 | -------------------------------------------------------------------------------- /controllers/AdminOfertaController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin/admin_order_adm.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Менеджер изменивший статус заказа:

6 | 7 | 8 | 9 |
10 |

id: зарегистрирован 11 |

12 | 13 | 26 | 27 |
28 | 29 | 30 |

Не найдено

31 | 32 | 33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /views/admin/admin_oferta_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение договора оферты

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 16 |
17 | 18 | 19 | 20 |
21 | $value) :?> 23 |

24 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /views/admin/admin_return_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение информации о возврате товара

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 16 |
17 | 18 | 19 | 20 |
21 | $value) :?> 23 |

24 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /views/admin/admin_safety_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение политики конфиденциальности компании

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 16 |
17 | 18 | 19 | 20 |
21 | $value) :?> 23 |

24 | 26 | 27 | 28 |
29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /controllers/AdminReturnController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/AdminSafetyController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin/admin_insert_brand.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Добавление нового бренда

6 | 7 |
8 | 9 |
10 | 11 | 15 |
16 |
Введите название бренда!
17 | 18 | 19 |
20 | $value) :?> 22 |

23 | 25 | 26 | 27 |

28 | 29 | 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /components/functions.php: -------------------------------------------------------------------------------- 1 | $value) { 6 | if (!empty($value)) { 7 | $newArr[] = $value; 8 | } 9 | } 10 | return $newArr; 11 | } 12 | // сохранение введенных даных в полях формы при неудачной отправке 13 | function getArrVal($array, $key) { 14 | if(is_array($array)) { 15 | if(array_key_exists($key, $array)) { 16 | return $array[$key]; 17 | } else { 18 | return ''; 19 | } 20 | } else { 21 | return ''; 22 | } 23 | } 24 | // склонение слова 'товар' для страницы оформление заказа 25 | function declensionWord($quantity){ 26 | if($quantity>=5 && $quantity<=20){ 27 | return 'товаров'; 28 | }else if ($quantity%10 == 1) { 29 | return 'товар'; 30 | }else if ($quantity%10 >= 2 && $quantity%10 <= 4) { 31 | return 'товара'; 32 | }else{ 33 | return 'товаров'; 34 | } 35 | 36 | } 37 | // сохранение значения выпадающего списка при неудачной отправке формы 38 | function selected($post,$name,$value) { 39 | if (isset($post[$name])) { 40 | if ($post[$name] == $value) { 41 | echo 'selected'; 42 | }else{ 43 | echo ''; 44 | } 45 | } 46 | } 47 | 48 | // сохранение значения радио-кнопок 49 | function checkedRadio($post,$name,$value) { 50 | if (isset($post[$name])) { 51 | if ($post[$name] == $value) { 52 | echo 'checked'; 53 | }else{ 54 | echo ''; 55 | } 56 | } 57 | } 58 | 59 | ?> -------------------------------------------------------------------------------- /views/header/main_menu.php: -------------------------------------------------------------------------------- 1 |
2 |
3 | 38 |
39 |
40 | -------------------------------------------------------------------------------- /views/admin/admin_size_insert.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |

Добавление нового размера

7 |
8 | 9 |
10 | 11 | 16 |
17 |
Введите название размера!
18 | 19 | 20 | 21 |
22 | $value) :?> 24 |

25 | 27 | 28 | 29 |

30 | 31 | 32 |
33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /views/admin/admin_insert_subcategory.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Добавление субкатегории

6 |
7 | 8 |
9 | 10 | 14 |
15 |
Введите название субкатегории!
16 | 17 | 18 | 19 |
20 | $value) :?> 22 |

23 | 25 | 26 | 27 |

28 | 29 | 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /views/cabinet_menu/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |

Профиль

5 | 41 |
42 |
43 | -------------------------------------------------------------------------------- /views/account/recovery_pass.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Shoptest - интернет-магазин кроссовок и кед от мировых производителей по доступным ценам в Украине 10 | 11 | 12 |
13 |
14 |

Восстановление пароля

15 | 16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 | 27 | $value) :?> 29 |

30 | 32 |
33 |
34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /views/admin/admin_status_order_insert.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Добавление статуса заказа

6 | 7 |
8 | 9 |
10 | 11 | 16 |
17 |
Введите название статуса!
18 | 19 | 20 | 21 |
22 | $value) :?> 24 |

25 | 27 | 28 | 29 |

30 | 31 | 32 | 33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /views/news/news_one.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 |
7 |

8 | 9 |

10 |

11 |

12 |
13 | <?= $one_news['title'] ?> 14 |
15 |

16 | 17 | 18 |
19 | <?= $one_news['title'] ?> 20 |
21 | 22 | 23 | 24 |

25 | 26 | 27 |
28 | <?= $one_news['title'] ?> 29 |
30 | 31 | 32 | 33 | 34 | 35 |

36 | 37 | 38 |
39 | 40 | 41 | 42 |
43 |
44 | 45 | 46 | 47 |
48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /components/Router.php: -------------------------------------------------------------------------------- 1 | routes = include($routesPath); 8 | } 9 | 10 | private function getURI() 11 | { 12 | if (!empty($_SERVER['REQUEST_URI'])) { 13 | return trim($_SERVER['REQUEST_URI'], '/'); 14 | } else { 15 | return ''; 16 | } 17 | } 18 | 19 | public function run(){ 20 | $uri = $this->getURI(); 21 | 22 | foreach ($this->routes as $uriPattern => $path) { 23 | if (preg_match("~^" . $uriPattern . "$~", $uri)) { 24 | $internalRoute = preg_replace("~$uriPattern~", $path, $uri); 25 | $segments = explode('/', $internalRoute); 26 | $controllerName = array_shift($segments) . 'Controller'; 27 | $controllerName = ucfirst($controllerName); 28 | $actionName = 'action' . ucfirst(array_shift($segments)); 29 | $parameters = $segments; 30 | $controllerFile = ROOT . '/controllers/' . 31 | $controllerName . '.php'; 32 | 33 | if (file_exists($controllerFile)) { 34 | include_once($controllerFile); 35 | } 36 | 37 | $controllerObject = new $controllerName; 38 | 39 | $result = call_user_func_array(array($controllerObject, $actionName), $parameters); 40 | 41 | if ($result !== false) { 42 | break; 43 | } 44 | } 45 | } 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /views/admin/admin_size_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование размера 6 | ( id: )

7 |
8 | 9 |
10 | 11 | 18 |
19 |
Введите название размера!
20 | 21 | 22 | 23 |
24 | $value) :?> 26 |

27 | 29 | 30 | 31 |

32 | 33 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /views/account/create_new_password.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Shoptest - интернет-магазин кроссовок и кед от мировых производителей по доступным ценам в Украине 10 | 11 | 12 |
13 |
14 | 15 |

Создайте новый пароль

16 |
17 |
18 | 19 | 20 |
21 |
22 | 23 | 24 |
25 |
26 | 27 |
28 |
29 | 30 |

Войти

31 |

В магазин

32 | 33 | $value) :?> 35 |

36 | 38 |
39 |
40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /views/admin/admin_about_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение информации о компании

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 | 22 | 25 |
26 | 27 | 28 | 29 |
30 | $value) :?> 32 |

33 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /views/admin/admin_delivery_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение информации об условиях доставки

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 | 22 | 25 |
26 | 27 | 28 | 29 |
30 | $value) :?> 32 |

33 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /views/admin/admin_contacts_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Изменение контактной информации компании

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 | 22 | 25 |
26 | 27 | 28 | 29 |
30 | $value) :?> 32 |

33 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /views/admin/admin_update_subcategory.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование субкатегории 6 | ( id: )

7 |
8 | 9 |
10 | 11 | 19 |
20 |
Введите название субкатегории!
21 | 22 | 23 | 24 |
25 | $value) :?> 27 |

28 | 30 | 31 | 32 |

33 | 34 | 35 | 36 | 37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /views/admin/admin_update_brand.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование бренда 6 | 7 | ( id: )

8 | 9 |
10 | 11 |
12 | 13 | 20 |
21 |
Введите правильное название бренда!
22 | 23 | 24 | 25 |
26 | 27 | 28 | $value) :?> 30 |

31 | 33 | 34 | 35 |

36 | 37 | 38 | 39 | 40 | 41 | 42 |
43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /views/admin/admin_status_order_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование статуса заказа 6 | ( id: )

7 | 8 |
9 | 10 |
11 | 12 | 19 |
20 |
Введите название статуса!
21 | 22 | 23 | 24 |
25 | 26 | $value) :?> 28 |

29 | 31 | 32 | 33 |

34 | 35 | 36 | 37 | 38 |
39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /views/admin/admin_cards.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить карточку 6 | 7 | 8 | $card) : ?> 9 |
10 |
11 |
12 | > 16 | 17 |
18 | 19 |

id:

20 | 21 | 22 | 23 | 24 |
25 | 26 |
27 | <?= $card['alt_img'] ?> 28 |
29 |
30 | 31 | 32 |

Вы не загрузили ни одной карточки!

33 | 34 | 35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /public/slick/fonts/slick.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Generated by Fontastic.me 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /views/account/entrance.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Shoptest - интернет-магазин кроссовок и кед от мировых производителей по доступным ценам в Украине 11 | 12 | 13 |
14 |
15 | 16 |
17 |

У меня уже есть аккаунт

18 |
19 |
20 | 21 | 22 |
23 |
24 | 25 | 26 |
27 |
28 | 29 |
30 |
31 | $value) :?> 33 |

34 | 36 | 39 |
40 | 41 |
42 |

Регистрация

43 |
44 |

Создайте аккаунт чтобы быстрее оформлять заказы и отслеживать их в личном кабинете

45 |
46 | 49 |
50 | 51 |
52 |
53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /controllers/NewsController.php: -------------------------------------------------------------------------------- 1 | $unit) { 28 | echo "
29 |

30 | {$unit['title']} 31 |

32 |

{$unit['date']}

33 |

{$unit['subtitle']}

34 |
35 | \"{$unit['title']}\" 36 |
37 |
Детальнее >>
38 | 39 |
"; 40 | } 41 | } 42 | 43 | } 44 | 45 | // одна новость 46 | public static function actionOneUnit($id_news) { 47 | $menu = CoreController::getMainMenu(); 48 | $one_news = News::getOneNews($id_news); 49 | $title_head = $one_news['title']; 50 | $description_head = $one_news['subtitle']; 51 | 52 | // поиск по сайту 53 | if (isset($_POST['srch'])) { 54 | $result = Search::getResultSearch($_POST); 55 | if (!empty($result)) { 56 | header("location: /{$result[0]['link']}"); 57 | } 58 | } 59 | 60 | require_once ROOT . "/views/news/news_one.php"; 61 | } 62 | } 63 | ?> -------------------------------------------------------------------------------- /views/admin/admin_card_insert.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Добавление рекламной карточки товара

6 | 7 |
8 |
9 | 10 | 11 | 12 |
13 |
Выберите изображение!
14 | 15 |
16 | 17 | 20 |
21 |
Введите id товара!
22 | 23 |
24 | 25 | 28 |
29 |
Введите альтернативный текст для изображения!
30 | 31 |
32 | 33 | 37 |
38 | 39 | 40 | 41 |
42 | $value) :?> 44 |

45 | 47 | 48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /views/cart/index.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 | 6 |

В корзине

7 | 8 | $product) : ?> 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 | 47 |

Ваша корзина пуста !

48 | 49 |
50 |
51 | 52 | 53 | 54 | 55 |
56 | 57 | -------------------------------------------------------------------------------- /public/slick/slick.css: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | .slick-slider 3 | { 4 | position: relative; 5 | 6 | display: block; 7 | box-sizing: border-box; 8 | 9 | -webkit-user-select: none; 10 | -moz-user-select: none; 11 | -ms-user-select: none; 12 | user-select: none; 13 | 14 | -webkit-touch-callout: none; 15 | -khtml-user-select: none; 16 | -ms-touch-action: pan-y; 17 | touch-action: pan-y; 18 | -webkit-tap-highlight-color: transparent; 19 | } 20 | 21 | .slick-list 22 | { 23 | position: relative; 24 | 25 | display: block; 26 | overflow: hidden; 27 | 28 | margin: 0; 29 | padding: 0; 30 | } 31 | .slick-list:focus 32 | { 33 | outline: none; 34 | } 35 | .slick-list.dragging 36 | { 37 | cursor: pointer; 38 | cursor: hand; 39 | } 40 | 41 | .slick-slider .slick-track, 42 | .slick-slider .slick-list 43 | { 44 | -webkit-transform: translate3d(0, 0, 0); 45 | -moz-transform: translate3d(0, 0, 0); 46 | -ms-transform: translate3d(0, 0, 0); 47 | -o-transform: translate3d(0, 0, 0); 48 | transform: translate3d(0, 0, 0); 49 | } 50 | 51 | .slick-track 52 | { 53 | position: relative; 54 | top: 0; 55 | left: 0; 56 | 57 | display: block; 58 | margin-left: auto; 59 | margin-right: auto; 60 | } 61 | .slick-track:before, 62 | .slick-track:after 63 | { 64 | display: table; 65 | 66 | content: ''; 67 | } 68 | .slick-track:after 69 | { 70 | clear: both; 71 | } 72 | .slick-loading .slick-track 73 | { 74 | visibility: hidden; 75 | } 76 | 77 | .slick-slide 78 | { 79 | display: none; 80 | float: left; 81 | 82 | height: 100%; 83 | min-height: 1px; 84 | } 85 | [dir='rtl'] .slick-slide 86 | { 87 | float: right; 88 | } 89 | .slick-slide img 90 | { 91 | display: block; 92 | } 93 | .slick-slide.slick-loading img 94 | { 95 | display: none; 96 | } 97 | .slick-slide.dragging img 98 | { 99 | pointer-events: none; 100 | } 101 | .slick-initialized .slick-slide 102 | { 103 | display: block; 104 | } 105 | .slick-loading .slick-slide 106 | { 107 | visibility: hidden; 108 | } 109 | .slick-vertical .slick-slide 110 | { 111 | display: block; 112 | 113 | height: auto; 114 | 115 | border: 1px solid transparent; 116 | } 117 | .slick-arrow.slick-hidden { 118 | display: none; 119 | } 120 | 121 | -------------------------------------------------------------------------------- /views/admin/admin_slider.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить слайд 6 | 7 | $slide) : ?> 8 |
9 |
10 | 11 |
12 | > 16 | 17 |
18 | 19 |

id:

20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 |
29 | 30 |
31 |
32 | <?= $slide['alt_logo'] ?> 33 |
34 |

35 |

36 |
37 | 38 |
39 | 40 |
41 | 42 | 43 |

Вы не загрузили пока ни одного слайда!

44 | 45 | 46 | 47 | 48 |
49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /controllers/CartController.php: -------------------------------------------------------------------------------- 1 | 0) { 10 | if(!isset($_SESSION['cart'][$key] ) || (int)$_SESSION['cart'][$key]['count'] < $quantity['products_count']){ 11 | Products::addToCart($_POST) ; 12 | $total_products = Products::getCartCount(); 13 | echo $total_products; 14 | exit; 15 | }else{ 16 | echo 'warning'; 17 | } 18 | } 19 | 20 | } 21 | 22 | } 23 | 24 | // страница корзины 25 | public static function actionIndex(){ 26 | $menu = CoreController::getMainMenu(); 27 | $cartProducts = Products::getCartProducts(); 28 | // общая стоимость 29 | $cost = 0; 30 | if (isset($cartProducts) && !empty($cartProducts)) { 31 | foreach ($cartProducts as $key => $value) { 32 | $cost += $value['count'] * $value['price']; 33 | } 34 | } 35 | 36 | // поиск по сайту 37 | if (isset($_POST['srch'])) { 38 | $result = Search::getResultSearch($_POST); 39 | if (!empty($result)) { 40 | header("location: /{$result[0]['link']}"); 41 | } 42 | } 43 | 44 | require_once ROOT . "/views/cart/index.php"; 45 | } 46 | 47 | // удаление товаров из корзины 48 | public static function actionDelete(){ 49 | if(isset($_POST['key']) && !empty($_POST['key'])) { 50 | unset($_SESSION['cart'][$_POST['key']]); 51 | } 52 | echo 1; 53 | exit; 54 | } 55 | 56 | // изменение количества товаров корзины 57 | public static function actionUpdate(){ 58 | if (isset($_POST['key_up']) && !empty($_POST['key_up']) && 59 | isset($_POST['count_up']) && !empty($_POST['count_up']) && is_numeric($_POST['count_up'])) { 60 | $count = Products::getCountProductSize($_SESSION['cart'][$_POST['key_up']]['id'], $_SESSION['cart'][$_POST['key_up']]['size']); 61 | if ( $_POST['count_up'] <= $count['products_count']) { 62 | $_SESSION['cart'][$_POST['key_up']]['count'] = $_POST['count_up']; 63 | echo 1; 64 | exit; 65 | }else{ 66 | echo $count['products_count']; 67 | exit; 68 | } 69 | } 70 | } 71 | 72 | 73 | } 74 | 75 | ?> -------------------------------------------------------------------------------- /controllers/ProductsController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/AdminAboutController.php: -------------------------------------------------------------------------------- 1 | 0 && $_FILES['img']['size'] <= 3000000) { 17 | // удаление фотографии из папки img_info 18 | $img = ROOT . "/public/img_info/{$info['img']}"; 19 | if(file_exists($img)){ 20 | unlink($img); 21 | } 22 | // сохранение фото и названия фото: 23 | if(!$_FILES['img']['error'] && $_FILES['img']['size'] <= 3000000) { 24 | //Адрес папки для сохранения 25 | $dirPath = ROOT . "/public/img_info/" . $info['id'] . '_about_'. "{$_FILES['img']['name']}"; 26 | if(move_uploaded_file($_FILES['img']['tmp_name'] , $dirPath)){ 27 | $data_about_up['img'] = $info['id'] . '_about_'. "{$_FILES['img']['name']}"; 28 | }else{ 29 | $error[] = "Ошибка при загрузке фото!"; 30 | } 31 | }else {//Если файл не прошел проверку 32 | $error[] = "Превышен размер фото!"; 33 | } 34 | } 35 | 36 | //инф. о компании 37 | $data_about_up['text'] = nl2br(trim($_POST['adm_info_txt']),false) ; 38 | 39 | if (empty($error)) { 40 | if (About::updateDataTable($data_about_up, 'about', $info['id'])) { 41 | $info = About::getAbout(); 42 | $success = 'Изменения внесены!'; 43 | }else{ 44 | $error[] = 'Изменение информации о компании временно не доступно!'; 45 | } 46 | } 47 | } 48 | 49 | // поиск по сайту 50 | if (isset($_POST['srch'])) { 51 | $result = Search::getResultSearch($_POST); 52 | if (!empty($result)) { 53 | header("location: /{$result[0]['link']}"); 54 | } 55 | } 56 | 57 | require_once ROOT . "/views/admin/admin_about_update.php"; 58 | } 59 | 60 | } 61 | } 62 | ?> -------------------------------------------------------------------------------- /controllers/AdminDeliveryController.php: -------------------------------------------------------------------------------- 1 | 0 && $_FILES['img']['size'] <= 3000000) { 18 | // удаление фотографии из папки img_info 19 | $img = ROOT . "/public/img_info/{$info['img']}"; 20 | if(file_exists($img)){ 21 | unlink($img); 22 | } 23 | // сохранение фото и названия фото: 24 | if(!$_FILES['img']['error'] && $_FILES['img']['size'] <= 3000000) { 25 | //Адрес папки для сохранения 26 | $dirPath = ROOT . "/public/img_info/" . $info['id'] . '_delivery_'. "{$_FILES['img']['name']}"; 27 | if(move_uploaded_file($_FILES['img']['tmp_name'] , $dirPath)){ 28 | $data_delivery_up['img'] = $info['id'] . '_delivery_'. "{$_FILES['img']['name']}"; 29 | }else{ 30 | $error[] = "Ошибка при загрузке фото!"; 31 | } 32 | }else {//Если файл не прошел проверку 33 | $error[] = "Превышен размер фото!"; 34 | } 35 | } 36 | 37 | //инф. о компании 38 | $data_delivery_up['text'] = nl2br(trim($_POST['adm_delivery_txt']),false) ; 39 | 40 | if (empty($error)) { 41 | if (Delivery::updateDataTable($data_delivery_up, 'delivery', $info['id'])) { 42 | $info = Delivery::getInfoDelivery(); 43 | $success = 'Изменения внесены!'; 44 | }else{ 45 | $error[] = 'Изменение информации о компании временно не доступно!'; 46 | } 47 | } 48 | } 49 | 50 | // поиск по сайту 51 | if (isset($_POST['srch'])) { 52 | $result = Search::getResultSearch($_POST); 53 | if (!empty($result)) { 54 | header("location: /{$result[0]['link']}"); 55 | } 56 | } 57 | 58 | require_once ROOT . "/views/admin/admin_delivery_update.php"; 59 | } 60 | 61 | } 62 | } 63 | ?> -------------------------------------------------------------------------------- /controllers/AdminContactsController.php: -------------------------------------------------------------------------------- 1 | 0 && $_FILES['img_contact']['size'] <= 3000000) { 17 | // удаление фотографии из папки img_info 18 | $img = ROOT . "/public/img_info/{$info['img']}"; 19 | if(file_exists($img)){ 20 | unlink($img); 21 | } 22 | // сохранение фото и названия фото: 23 | if(!$_FILES['img_contact']['error'] && $_FILES['img_contact']['size'] <= 3000000) { 24 | //Адрес папки для сохранения 25 | $dirPath = ROOT . "/public/img_info/" . $info['id'] . '_contact_'. "{$_FILES['img_contact']['name']}"; 26 | if(move_uploaded_file($_FILES['img_contact']['tmp_name'] , $dirPath)){ 27 | $data_contacts_up['img'] = $info['id'] . '_contact_'. "{$_FILES['img_contact']['name']}"; 28 | }else{ 29 | $error[] = "Ошибка при загрузке фото!"; 30 | } 31 | }else {//Если файл не прошел проверку 32 | $error[] = "Превышен размер фото!"; 33 | } 34 | } 35 | 36 | //контактная инф. компании 37 | $data_contacts_up['text'] = nl2br(trim($_POST['adm_contacts_txt']),false) ; 38 | 39 | if (Contacts::updateDataTable($data_contacts_up, 'contacts', $info['id'])) { 40 | $info = Contacts::getContacts(); 41 | $success = 'Изменения внесены!'; 42 | }else{ 43 | $error[] = 'Изменение контактной информации компании временно не доступно!'; 44 | } 45 | 46 | } 47 | 48 | // поиск по сайту 49 | if (isset($_POST['srch'])) { 50 | $result = Search::getResultSearch($_POST); 51 | if (!empty($result)) { 52 | header("location: /{$result[0]['link']}"); 53 | } 54 | } 55 | 56 | require_once ROOT . "/views/admin/admin_contacts_update.php"; 57 | } 58 | 59 | } 60 | } 61 | ?> -------------------------------------------------------------------------------- /views/cart/massege_order.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |

Спасибо, ваш заказ принят в обработку!

5 |
6 | 7 |
8 | $product) : ?> 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 |
47 |

Оплата:

48 |

Стоимость доставки: бесплатно

49 |

К оплате: грн

50 | 51 | 52 |
53 | 54 |
55 |
56 |
57 | 58 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Online store for sports shoes in HTML, CSS, JavaScript, PHP, MySQL, MVC. 2 | 3 | 4 | **General description** 5 | Functional e-commerce site for the sale of men's and women's branded sneakers, created with user convenience in mind. 6 | Designed for portfolio. 7 | 8 | Technologies used to create the project: HTML, CSS, JavaScript, PHP, MySQL. 9 | Plugins: Slick Slider. 10 | The architectural pattern is MVC. 11 | CMS - self-written. 12 | 13 | **Ease of use** 14 | The main menu is horizontal. 15 | Located in the header of the site and accessible from any page. 16 | The menu structure is intuitive which makes the navigation process simple and accessible. 17 | Page addresses are presented in the form of CNC to enable the visitor to quickly and accurately determine their location on the site. 18 | Additional menu items are located in the footer. 19 | Active menu items are highlighted for user convenience. 20 | You can go to the desired page using the internal search on the site. 21 | The processes of registration, login, checkout are easy to implement for the user. 22 | The site is available in all popular browsers on devices with different screen sizes. 23 | 24 | **Functionality** 25 | *Catalog* 26 | Products are divided into two categories - men's and women's shoes. There is a product filter on the category page. 27 | The page of one product provides complete information about the product, the ability to add the product to the cart. 28 | 29 | *Basket* 30 | Information about added products is presented for each product separately. 31 | Implemented the ability to change the quantity of goods, remove from the cart, proceed to checkout. 32 | 33 | *Checkout* 34 | Available to authorized users. 35 | On the page: a form for the user's contact information, product information, total cost. 36 | After successful registration, a message appears with information about the order, a letter is sent to the client and the store manager. 37 | 38 | *Authorization* 39 | Available after registration. 40 | Separation of user roles: user, administrator, main administrator. 41 | User account password recovery occurs by email. 42 | 43 | *User account* 44 | Features: viewing orders, viewing and editing personal data. 45 | 46 | *News page* 47 | In addition to the e-commerce functionality, the site is also integrated with blog functionality. 48 | 49 | *Main page* 50 | Demonstration of current models, latest news. 51 | 52 | *Search* 53 | You can find the required category of goods or go to the desired page using the internal search on the site. 54 | 55 | *Other information* 56 | Pages available: "About us", "Contacts", "Offer", "Delivery", "Return", "Security". 57 | In the footer there are links to the pages of the store in social networks. 58 | 59 | *Admin panel* 60 | Site content management (CRUD). 61 | Allows you to view, add, edit and delete site content. 62 | 63 | **SEO** 64 | *Page URLs* 65 | Displayed as semantic URLs. 66 | 67 | *title и descripiton* 68 | Each page is unique, customizable. 69 | 70 | *robots.txt и sitemap.xml* 71 | Are available. 72 | 73 | *Alternative text (alt) for images* 74 | Each image is unique. 75 | 76 | *favicon* 77 | Are available. 78 | -------------------------------------------------------------------------------- /views/header/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <?= isset($title_head) ? $title_head : "Shoptest - интернет-магазин кроссовок и кед от мировых производителей по доступным ценам в Украине"?> 9 | 10 | 11 | 12 | 13 |
14 | 15 |
16 | 17 |
18 | 19 |
20 |

21 | Интернет-магазин кроссовок Shoptest

22 | 23 |
menu
24 | 25 | 62 | 63 |
64 |
65 |
66 | 67 | -------------------------------------------------------------------------------- /views/admin/admin_card_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование карточки id:

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 14 | 15 |
16 |
17 | 18 |
19 | 20 |
21 | 22 | 25 |
26 |
Введите id товара!
27 | 28 |
29 | 30 | 33 |
34 |
Введите альтернативный текст для изображения!
35 | 36 |
37 | 38 | 54 |
55 | 56 | 57 | 58 |
59 | $value) :?> 61 |

62 | 64 | 65 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /models/Cards.php: -------------------------------------------------------------------------------- 1 | prepare($query); 9 | $q->bindValue(':limit', $limit, PDO::PARAM_INT); 10 | $q->execute(); 11 | return $cards = $q->fetchAll(); 12 | } 13 | 14 | // АДМИНПАНЕЛЬ: 15 | 16 | // получение всех карточек 17 | public static function getAllCards($limit = 1000) { 18 | global $pdo; 19 | $query = "SELECT * FROM " . self::$table . " WHERE date_add ORDER BY date_add DESC LIMIT :limit "; 20 | $q = $pdo->prepare($query); 21 | $q->bindValue(':limit', $limit, PDO::PARAM_INT); 22 | $q->execute(); 23 | $cards = $q->fetchAll(); 24 | // информация по товару на который ведет ссылка 25 | for ($i=0; $i < count($cards); $i++) { 26 | $cards[$i]['product'] = Products::getById($cards[$i]['link']); 27 | } 28 | return $cards; 29 | } 30 | 31 | // изменение данных в любой таблице 32 | public static function updateDataTable($data, $table, $id) { 33 | global $pdo; 34 | if (isset($data)&&!empty($data)) { 35 | $query = "UPDATE $table SET "; 36 | 37 | foreach ($data as $field => $value) { 38 | $query .= $field . ' = :' . $field . ', '; 39 | } 40 | 41 | $query = substr($query, 0, -2); 42 | $query .= " WHERE id=$id "; 43 | 44 | $q = $pdo->prepare($query); 45 | 46 | foreach ($data as $field => $value) { 47 | $q->bindValue(':' . $field, $value); 48 | } 49 | 50 | return $q->execute(); 51 | } 52 | } 53 | 54 | // добавление новых данных в любую таблицу 55 | public static function insertDataTable($data,$table) { 56 | global $pdo; 57 | if (isset($data)&&!empty($data)) { 58 | $query = "INSERT INTO $table SET "; 59 | 60 | foreach ($data as $field => $value) { 61 | $query .= $field . ' = :' . $field . ', '; 62 | } 63 | 64 | $query = substr($query, 0, -2); 65 | $query .= ";"; 66 | 67 | $q = $pdo->prepare($query); 68 | 69 | foreach ($data as $field => $value) { 70 | $q->bindValue(':' . $field, $value); 71 | } 72 | 73 | if ($q->execute()) { 74 | // Если запрос выполенен успешно, возвращаем id добавленной записи 75 | return $pdo->lastInsertId(); 76 | } 77 | // Иначе возвращаем 0 78 | return 0; 79 | } 80 | } 81 | 82 | // информация по 1 карточке 83 | public static function getOneCard($id_card) { 84 | global $pdo; 85 | $query = "SELECT * FROM " . self::$table . " WHERE id = :id_card "; 86 | $q = $pdo->prepare($query); 87 | $q->bindValue(':id_card', $id_card, PDO::PARAM_INT); 88 | $q->execute(); 89 | return $card = $q->fetch(); 90 | } 91 | 92 | // удаление строки из любой таблицы 93 | public static function deleteById($table, $name_col, $id){ 94 | global $pdo; 95 | $sql = "DELETE FROM $table WHERE $name_col = :id"; 96 | $result = $pdo->prepare($sql); 97 | $result->bindParam(':id', $id, PDO::PARAM_INT); 98 | return $result->execute(); 99 | } 100 | } 101 | ?> -------------------------------------------------------------------------------- /models/Slider.php: -------------------------------------------------------------------------------- 1 | prepare($query); 10 | $q->bindValue(':limit', $limit, PDO::PARAM_INT); 11 | $q->execute(); 12 | return $slider = $q->fetchAll(); 13 | } 14 | 15 | // АДМИНПАНЕЛЬ: 16 | // слайды для отображения в админпанели 17 | public static function getAdminSlider($limit = 1000000) { 18 | global $pdo; 19 | $query = "SELECT * FROM " . self::$table . " WHERE date_add ORDER BY date_add DESC LIMIT :limit "; 20 | $q = $pdo->prepare($query); 21 | $q->bindValue(':limit', $limit, PDO::PARAM_INT); 22 | $q->execute(); 23 | $slides = $q->fetchAll(); 24 | // информация по товару на который ведет ссылка 25 | for ($i=0; $i < count($slides); $i++) { 26 | $slides[$i]['product'] = Products::getById($slides[$i]['link']); 27 | } 28 | return $slides; 29 | } 30 | 31 | // изменение данных в любой таблице 32 | public static function updateDataTable($data, $table, $id) { 33 | global $pdo; 34 | if (isset($data)&&!empty($data)) { 35 | $query = "UPDATE $table SET "; 36 | 37 | foreach ($data as $field => $value) { 38 | $query .= $field . ' = :' . $field . ', '; 39 | } 40 | 41 | $query = substr($query, 0, -2); 42 | $query .= " WHERE id=$id "; 43 | 44 | $q = $pdo->prepare($query); 45 | 46 | foreach ($data as $field => $value) { 47 | $q->bindValue(':' . $field, $value); 48 | } 49 | 50 | return $q->execute(); 51 | } 52 | } 53 | 54 | // добавление новых данных в любую таблицу 55 | public static function insertDataTable($data,$table) { 56 | global $pdo; 57 | if (isset($data)&&!empty($data)) { 58 | $query = "INSERT INTO $table SET "; 59 | 60 | foreach ($data as $field => $value) { 61 | $query .= $field . ' = :' . $field . ', '; 62 | } 63 | 64 | $query = substr($query, 0, -2); 65 | $query .= ";"; 66 | 67 | $q = $pdo->prepare($query); 68 | 69 | foreach ($data as $field => $value) { 70 | $q->bindValue(':' . $field, $value); 71 | } 72 | 73 | if ($q->execute()) { 74 | // Если запрос выполенен успешно, возвращаем id добавленной записи 75 | return $pdo->lastInsertId(); 76 | } 77 | // Иначе возвращаем 0 78 | return 0; 79 | } 80 | } 81 | 82 | // удаление строки из любой таблицы 83 | public static function deleteById($table, $name_col, $id){ 84 | global $pdo; 85 | $sql = "DELETE FROM $table WHERE $name_col = :id"; 86 | $result = $pdo->prepare($sql); 87 | $result->bindParam(':id', $id, PDO::PARAM_INT); 88 | return $result->execute(); 89 | } 90 | 91 | // информация по 1 слайду 92 | public static function getOneSlide($id_slide) { 93 | global $pdo; 94 | $query = "SELECT * FROM " . self::$table . " WHERE id = :id_slide "; 95 | $q = $pdo->prepare($query); 96 | $q->bindValue(':id_slide', $id_slide, PDO::PARAM_INT); 97 | $q->execute(); 98 | return $slider = $q->fetch(); 99 | } 100 | 101 | } 102 | ?> -------------------------------------------------------------------------------- /views/admin/admin_slider_insert.php: -------------------------------------------------------------------------------- 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 |
Введите id товара!
45 | 46 |
47 | 48 | 52 |
53 | 54 | 55 | 56 |
57 | $value) :?> 59 |

60 | 62 | 63 | 64 | 65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /views/footer/footer.php: -------------------------------------------------------------------------------- 1 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /views/admin/admin_news_insert.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Добавление новости

6 | 7 |
8 |
9 | 10 | 13 |
14 |
Введите заголовок статьи!
15 | 16 |
17 | 18 | 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 | $value) :?> 63 |

64 | 66 | 67 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /config/routes.php: -------------------------------------------------------------------------------- 1 | 'main/sitemap', 4 | 'robots.txt' => 'main/robots', 5 | 'safety' => 'safety/index', 6 | 'return/info' => 'returnInfo/index', 7 | 'delivery' => 'delivery/index', 8 | 'contacts' => 'contacts/index', 9 | 'oferta' => 'oferta/index', 10 | 'news/lazy/load' => 'news/lazyLoad', 11 | 'news/one/([0-9]+)' => 'news/oneUnit/$1', 12 | 'news' => 'news/index', 13 | 14 | 'admin/about' => 'adminAbout/updateAbout', 15 | 16 | 'admin/contacts' => 'adminContacts/updateContacts', 17 | 18 | 'admin/safety' => 'adminSafety/updateSafety', 19 | 20 | 'admin/delivery' => 'adminDelivery/updateDelivery', 21 | 22 | 'admin/return' => 'adminReturn/updateReturn', 23 | 24 | 'admin/oferta' => 'adminOferta/updateOferta', 25 | 26 | 'admin/news/update/([0-9]+)' => 'adminNews/updateNews/$1', 27 | 'admin/news/delete' => 'adminNews/deleteNews', 28 | 'admin/news/insert' => 'adminNews/insertNews', 29 | 'admin/news' => 'adminNews/index', 30 | 31 | 'admin/card/update/([0-9]+)' => 'adminCards/updateCard/$1', 32 | 'admin/card/delete/([0-9]+)' => 'adminCards/deleteCard/$1', 33 | 'admin/card/insert' => 'adminCards/insertCard', 34 | 'admin/card/visibility' => 'adminCards/CardVisibility', 35 | 'admin/cards' => 'adminCards/index', 36 | 37 | 'admin/slider/update/([0-9]+)' => 'adminSlider/updateSlide/$1', 38 | 'admin/slider/delete/([0-9]+)' => 'adminSlider/deleteSlide/$1', 39 | 'admin/slider/insert' => 'adminSlider/insertSlide', 40 | 'admin/slider/visibility' => 'adminSlider/visibility', 41 | 'admin/slider' => 'adminSlider/index', 42 | 43 | 'admin/user/oders/([0-9]+)' => 'adminUsers/orders/$1', 44 | 'admin/users/all/admins' => 'adminUsers/allAdmins', 45 | 'admin/one/([0-9]+)' => 'adminUsers/oneAdmin/$1', 46 | 'admin/update/user' => 'adminUsers/updateUser', 47 | 'admin/users' => 'adminUsers/index', 48 | 49 | 'admin/order/manager/([0-9]+)' => 'adminOrders/manager/$1', 50 | 'admin/update/order' => 'adminOrders/updateOrder', 51 | 'admin/orders' => 'adminOrders/index', 52 | 53 | 'admin/update/status/order/([0-9]+)' => 'adminStatusOrder/updateStatusOrder/$1', 54 | 'admin/insert/status/order' => 'adminStatusOrder/insertStatusOrder', 55 | 'admin/status/order' => 'adminStatusOrder/index', 56 | 57 | 'admin/update/size/([0-9]+)' => 'adminSize/updateSize/$1', 58 | 'admin/insert/size' => 'adminSize/insertSize', 59 | 'admin/size' => 'adminSize/index', 60 | 61 | 'admin/update/subcategory/([0-9]+)' => 'adminSubcategory/updateSubcategory/$1', 62 | 'admin/insert/subcategory' => 'adminSubcategory/insertSubcategory', 63 | 'admin/subcategory' => 'adminSubcategory/index', 64 | 65 | 'admin/update/brand/([0-9]+)' => 'adminBrand/updateBrand/$1', 66 | 'admin/add/brand' => 'adminBrand/addBrand', 67 | 'admin/brand' => 'adminBrand/index', 68 | 69 | 'admin/update/product/([0-9]+)'=>'adminProduct/updateProduct/$1', 70 | 'admin/delete/([0-9]+)'=> 'adminProduct/deleteProduct/$1', 71 | 'admin/insert/product' => 'adminProduct/insertProduct', 72 | 'admin/product' => 'adminProduct/index', 73 | 74 | 'recovery' => 'Account/recovery', 75 | 'hash/(.+)' => 'Account/CreateNewPassword/$1', 76 | 'logout' => 'Account/logout', 77 | 'login' => 'Account/login', 78 | 'cabinet' => 'Cabinet/cabinet', 79 | 'profile' => 'Cabinet/profile', 80 | 'registration' => 'Account/registration', 81 | 'entrance' => 'Account/entrance', 82 | 83 | 'product/([0-9]+)' => 'Products/product/$1', 84 | 'products/([0-9]+)' => 'Products/index/$1', 85 | 'checkout' => 'orders/checkout', 86 | 'cart/delete' => 'cart/delete', 87 | 'cart/update' => 'cart/update', 88 | 'cart/addProduct' => 'cart/addProduct', 89 | 'cart' => 'cart/index', 90 | 91 | 'about' => 'About/index', 92 | '' => 'Main/index', 93 | '(^.+$)' => 'Main/index' 94 | ); 95 | ?> -------------------------------------------------------------------------------- /views/admin/admin_users_one_adm.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Главный администратор внесший изменения:

6 | 7 | 8 | 9 |
10 |

id: зарегистрирован 11 |

12 | 13 | 74 | 75 | 76 |
77 | 78 | 79 |

Не найдено

80 | 81 | 82 | 83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /views/cabinet/cabinet.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |
6 | 7 | 8 | 9 |
10 |

История покупок

11 | 12 | $order): ?> 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 | 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 |
77 | -------------------------------------------------------------------------------- /controllers/AdminOrdersController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /controllers/AdminBrandController.php: -------------------------------------------------------------------------------- 1 | beginTransaction(); 84 | // редактирование бренда 85 | $brand_update = AdminProducts::updateDataTable($data_brands_up, 'brands', $id_brand); 86 | // проверка на наличие бренда введенного в форму 87 | $check_brand_up = AdminBrands::getBrandForParameter('name',trim($_POST['admin_update_brand_name'])); 88 | if (count($check_brand_up)==1) { 89 | $pdo->commit(); 90 | $success = 'Изменения внесены успешно!'; 91 | $brand = AdminBrands::getBrandForParameter('id',$id_brand); 92 | }else{ 93 | $pdo->rollBack(); 94 | $error[] = 'Такой бренд уже существует!'; 95 | } 96 | } 97 | } 98 | 99 | // поиск по сайту 100 | if (isset($_POST['srch'])) { 101 | $result = Search::getResultSearch($_POST); 102 | if (!empty($result)) { 103 | header("location: /{$result[0]['link']}"); 104 | } 105 | } 106 | require_once ROOT . "/views/admin/admin_update_brand.php"; 107 | } 108 | 109 | } 110 | } 111 | ?> -------------------------------------------------------------------------------- /controllers/AdminSizeController.php: -------------------------------------------------------------------------------- 1 | beginTransaction(); 87 | // редактирование размера 88 | $brand_update = AdminProducts::updateDataTable($data_sizes_up, 'sizes', $id_size); 89 | // проверка на наличие размера введенного в форму 90 | $check_size_up = AdminSizes::getSizeForParameter('name',trim($_POST['adm_up_size_name'])); 91 | if (count($check_size_up)==1) { 92 | $pdo->commit(); 93 | $success = 'Изменения внесены успешно!'; 94 | $size = AdminSizes::getSizeForParameter('id',$id_size); 95 | }else{ 96 | $pdo->rollBack(); 97 | $error[] = 'Такой размер уже существует!'; 98 | } 99 | } 100 | 101 | } 102 | 103 | // поиск по сайту 104 | if (isset($_POST['srch'])) { 105 | $result = Search::getResultSearch($_POST); 106 | if (!empty($result)) { 107 | header("location: /{$result[0]['link']}"); 108 | } 109 | } 110 | 111 | require_once ROOT . "/views/admin/admin_size_update.php"; 112 | } 113 | 114 | 115 | } 116 | 117 | 118 | 119 | } 120 | 121 | ?> -------------------------------------------------------------------------------- /public/slick/slick-theme.css: -------------------------------------------------------------------------------- 1 | @charset 'UTF-8'; 2 | /* Slider */ 3 | .slick-loading .slick-list 4 | { 5 | background: #fff url('./ajax-loader.gif') center center no-repeat; 6 | } 7 | 8 | /* Icons */ 9 | @font-face 10 | { 11 | font-family: 'slick'; 12 | font-weight: normal; 13 | font-style: normal; 14 | 15 | src: url('./fonts/slick.eot'); 16 | src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg'); 17 | } 18 | /* Arrows */ 19 | .slick-prev, 20 | .slick-next 21 | { 22 | font-size: 0; 23 | line-height: 0; 24 | 25 | position: absolute; 26 | top: 50%; 27 | 28 | display: block; 29 | 30 | width: 20px; 31 | height: 20px; 32 | padding: 0; 33 | -webkit-transform: translate(0, -50%); 34 | -ms-transform: translate(0, -50%); 35 | transform: translate(0, -50%); 36 | 37 | cursor: pointer; 38 | 39 | color: transparent; 40 | border: none; 41 | outline: none; 42 | background: transparent; 43 | } 44 | .slick-prev:hover, 45 | .slick-prev:focus, 46 | .slick-next:hover, 47 | .slick-next:focus 48 | { 49 | color: transparent; 50 | outline: none; 51 | background: transparent; 52 | } 53 | .slick-prev:hover:before, 54 | .slick-prev:focus:before, 55 | .slick-next:hover:before, 56 | .slick-next:focus:before 57 | { 58 | opacity: 1; 59 | } 60 | .slick-prev.slick-disabled:before, 61 | .slick-next.slick-disabled:before 62 | { 63 | opacity: .25; 64 | } 65 | 66 | .slick-prev:before, 67 | .slick-next:before 68 | { 69 | font-family: 'slick'; 70 | font-size: 20px; 71 | line-height: 1; 72 | 73 | opacity: .75; 74 | color: white; 75 | 76 | -webkit-font-smoothing: antialiased; 77 | -moz-osx-font-smoothing: grayscale; 78 | } 79 | 80 | .slick-prev 81 | { 82 | left: -25px; 83 | } 84 | [dir='rtl'] .slick-prev 85 | { 86 | right: -25px; 87 | left: auto; 88 | } 89 | .slick-prev:before 90 | { 91 | content: '←'; 92 | } 93 | [dir='rtl'] .slick-prev:before 94 | { 95 | content: '→'; 96 | } 97 | 98 | .slick-next 99 | { 100 | right: -25px; 101 | } 102 | [dir='rtl'] .slick-next 103 | { 104 | right: auto; 105 | left: -25px; 106 | } 107 | .slick-next:before 108 | { 109 | content: '→'; 110 | } 111 | [dir='rtl'] .slick-next:before 112 | { 113 | content: '←'; 114 | } 115 | 116 | /* Dots */ 117 | .slick-dotted.slick-slider 118 | { 119 | margin-bottom: 30px; 120 | } 121 | 122 | .slick-dots 123 | { 124 | position: absolute; 125 | bottom: -25px; 126 | 127 | display: block; 128 | 129 | width: 100%; 130 | padding: 0; 131 | margin: 0; 132 | 133 | list-style: none; 134 | 135 | text-align: center; 136 | } 137 | .slick-dots li 138 | { 139 | position: relative; 140 | 141 | display: inline-block; 142 | 143 | width: 20px; 144 | height: 20px; 145 | margin: 0 5px; 146 | padding: 0; 147 | 148 | cursor: pointer; 149 | } 150 | .slick-dots li button 151 | { 152 | font-size: 0; 153 | line-height: 0; 154 | 155 | display: block; 156 | 157 | width: 20px; 158 | height: 20px; 159 | padding: 5px; 160 | 161 | cursor: pointer; 162 | 163 | color: transparent; 164 | border: 0; 165 | outline: none; 166 | background: transparent; 167 | } 168 | .slick-dots li button:hover, 169 | .slick-dots li button:focus 170 | { 171 | outline: none; 172 | } 173 | .slick-dots li button:hover:before, 174 | .slick-dots li button:focus:before 175 | { 176 | opacity: 1; 177 | } 178 | .slick-dots li button:before 179 | { 180 | font-family: 'slick'; 181 | font-size: 6px; 182 | line-height: 20px; 183 | 184 | position: absolute; 185 | top: 0; 186 | left: 0; 187 | 188 | width: 20px; 189 | height: 20px; 190 | 191 | content: '•'; 192 | text-align: center; 193 | 194 | opacity: .25; 195 | color: black; 196 | 197 | -webkit-font-smoothing: antialiased; 198 | -moz-osx-font-smoothing: grayscale; 199 | } 200 | .slick-dots li.slick-active button:before 201 | { 202 | opacity: .75; 203 | color: black; 204 | } 205 | -------------------------------------------------------------------------------- /views/admin/admin_slider_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование слайда id:

6 | 7 |

8 | 9 |
10 |
11 | 12 | 13 | 14 |
15 |
16 | 17 |
18 | 19 |
20 | 21 | 24 |
25 |
Введите название бренда!
26 | 27 |
28 | 29 | 32 |
33 |
Введите заголовок!
34 | 35 |
36 | 37 | 39 |
40 |
Введите подзаголовок!
41 | 42 |
43 | 44 | 45 | 46 |
47 |
48 | 49 |
50 | 51 |
52 | 53 | 56 |
57 |
Введите id товара!
58 | 59 |
60 | 61 | 79 |
80 | 81 | 82 | 83 |
84 | 85 | 86 | $value) :?> 88 |

89 | 91 | 92 | 93 | 94 | 95 |
96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /controllers/AdminSubcategoryController.php: -------------------------------------------------------------------------------- 1 | beginTransaction(); 87 | // редактирование субкатегории 88 | $subcat_update = AdminProducts::updateDataTable($data_subcat_up, 'subcategory', $id_subcategory); 89 | // проверка на наличие субкатегории введенной в форму 90 | $check_subcat_up = AdminSubcategory::getSubcategoryForParameter('name',trim($_POST['adm_up_subcat_name'])); 91 | if (count($check_subcat_up)==1) { 92 | $pdo->commit(); 93 | $success = 'Изменения внесены успешно!'; 94 | $subcat = AdminSubcategory::getSubcategoryForParameter('id', $id_subcategory); 95 | }else{ 96 | $pdo->rollBack(); 97 | $error[] = 'Такая субкатегория уже существует!'; 98 | } 99 | } 100 | } 101 | 102 | // поиск по сайту 103 | if (isset($_POST['srch'])) { 104 | $result = Search::getResultSearch($_POST); 105 | if (!empty($result)) { 106 | header("location: /{$result[0]['link']}"); 107 | } 108 | } 109 | 110 | require_once ROOT . "/views/admin/admin_update_subcategory.php"; 111 | } 112 | 113 | } 114 | } 115 | ?> -------------------------------------------------------------------------------- /controllers/AdminUsersController.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /views/admin/admin_users_all_adm.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Администраторы сайта:

6 | 7 | 17 | 18 | 19 | 20 | 21 | $user) : ?> 22 | 23 |
24 |

id: зарегистрирован 25 |

26 | 27 | 88 | 89 | 90 |
91 | 92 | 93 |

Не найдено

94 | 95 | 96 | 97 | 98 |
99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | -------------------------------------------------------------------------------- /controllers/AdminStatusOrderController.php: -------------------------------------------------------------------------------- 1 | beginTransaction(); 88 | // редактирование статуса 89 | $oder_status_update = AdminProducts::updateDataTable($data_oder_statuses_up, 'order_statuses', $id_status_order); 90 | // проверка на наличие статуса введенного в форму 91 | $check_or_st_up = AdminStatusOrder::getStatusForParameter('name',trim($_POST['adm_up_order_status_name'])); 92 | if (count($check_or_st_up)==1) { 93 | $pdo->commit(); 94 | $success = 'Изменения внесены успешно!'; 95 | $oder_status = AdminStatusOrder::getStatusForParameter('id',$id_status_order); 96 | }else{ 97 | $pdo->rollBack(); 98 | $error[] = 'Такой статус уже существует!'; 99 | } 100 | } 101 | 102 | } 103 | 104 | // поиск по сайту 105 | if (isset($_POST['srch'])) { 106 | $result = Search::getResultSearch($_POST); 107 | if (!empty($result)) { 108 | header("location: /{$result[0]['link']}"); 109 | } 110 | } 111 | 112 | require_once ROOT . "/views/admin/admin_status_order_update.php"; 113 | } 114 | 115 | 116 | } 117 | 118 | } 119 | ?> -------------------------------------------------------------------------------- /models/News.php: -------------------------------------------------------------------------------- 1 | query($query); 15 | return $news = $q->fetchAll(); 16 | } 17 | 18 | // получение 1 новости 19 | public static function getOneNews($id) { 20 | global $pdo; 21 | $query = "SELECT * FROM " . self::$table . " WHERE id = :id"; 22 | $q = $pdo->prepare($query); 23 | $q->bindValue(':id', $id); 24 | $q->execute(); 25 | return $product = $q->fetch(); 26 | } 27 | 28 | // получение новостей для главной страницы 29 | public static function getNewsForMain($limit=12) { 30 | global $pdo; 31 | $query = "SELECT * FROM " . self::$table . " ORDER BY date_add DESC LIMIT {$limit} "; 32 | $q = $pdo->query($query); 33 | return $news = $q->fetchAll(); 34 | } 35 | 36 | // АДМИНПАНЕЛЬ: 37 | 38 | // получение всех новостей при переходе по "Управление новостями" используя поиск 39 | public static function getAllNews($post,$onpage){ 40 | global $pdo; 41 | if (isset($post['adm_news_search']) 42 | && preg_match('/^.{1,50}$/iu', trim($post['adm_news_search']) )){ 43 | $search = htmlspecialchars(trim($post['adm_news_search'])); 44 | }else{ 45 | $search = ''; 46 | } 47 | // постраничная навигация 48 | if (isset($post['page']) ) { 49 | $start = ((int)($post['page'][0]) - 1)*$onpage; 50 | }else{ 51 | $start = 0; 52 | } 53 | 54 | $query = "SELECT * FROM " . self::$table . " WHERE title LIKE '%$search%' 55 | OR date_add LIKE '$search%' ORDER BY date_add DESC LIMIT {$start},{$onpage} "; 56 | 57 | $q = $pdo->query($query); 58 | $news = $q->fetchAll(); 59 | 60 | return $news; 61 | } 62 | 63 | // количество всех новостей (используя поиск) для постраничной навигации 64 | public static function getQuantityNews($post){ 65 | global $pdo; 66 | if (isset($post['adm_news_search']) 67 | && preg_match('/^.{1,50}$/iu', trim($post['adm_news_search']) )){ 68 | $search = htmlspecialchars(trim($post['adm_news_search'])); 69 | }else{ 70 | $search = ''; 71 | } 72 | 73 | $query = "SELECT COUNT(id) AS quantity FROM " . self::$table . " WHERE title LIKE '%$search%' 74 | OR date_add LIKE '$search%' "; 75 | 76 | $q = $pdo->query($query); 77 | $news = $q->fetch(); 78 | return $news['quantity']; 79 | } 80 | 81 | // изменение данных в любой таблице 82 | public static function updateDataTable($data, $table, $id) { 83 | global $pdo; 84 | if (isset($data)&&!empty($data)) { 85 | $query = "UPDATE $table SET "; 86 | 87 | foreach ($data as $field => $value) { 88 | $query .= $field . ' = :' . $field . ', '; 89 | } 90 | 91 | $query = substr($query, 0, -2); 92 | $query .= " WHERE id=$id "; 93 | 94 | $q = $pdo->prepare($query); 95 | 96 | foreach ($data as $field => $value) { 97 | $q->bindValue(':' . $field, $value); 98 | } 99 | 100 | return $q->execute(); 101 | } 102 | } 103 | 104 | // добавление новых данных в любую таблицу 105 | public static function insertDataTable($data,$table) { 106 | global $pdo; 107 | if (isset($data)&&!empty($data)) { 108 | $query = "INSERT INTO $table SET "; 109 | 110 | foreach ($data as $field => $value) { 111 | $query .= $field . ' = :' . $field . ', '; 112 | } 113 | 114 | $query = substr($query, 0, -2); 115 | $query .= ";"; 116 | 117 | $q = $pdo->prepare($query); 118 | 119 | foreach ($data as $field => $value) { 120 | $q->bindValue(':' . $field, $value); 121 | } 122 | 123 | if ($q->execute()) { 124 | // Если запрос выполенен успешно, возвращаем id добавленной записи 125 | return $pdo->lastInsertId(); 126 | } 127 | // Иначе возвращаем 0 128 | return 0; 129 | } 130 | } 131 | 132 | // удаление строки из любой таблицы 133 | public static function deleteById($table, $name_col, $id){ 134 | global $pdo; 135 | $sql = "DELETE FROM $table WHERE $name_col = :id"; 136 | $result = $pdo->prepare($sql); 137 | $result->bindParam(':id', $id, PDO::PARAM_INT); 138 | return $result->execute(); 139 | } 140 | } 141 | ?> -------------------------------------------------------------------------------- /views/admin/admin_news_update.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 |

Редактирование новости id: ()

6 | 7 |

8 | 9 | 10 |
11 |
12 | 13 | 20 |
21 |
Введите заголовок статьи!
22 | 23 |
24 | 25 | 32 |
33 |
Введите подзаголовок статьи!
34 | 35 |
36 | 37 | 38 | 39 |
40 |
41 |
42 |
43 | 44 |
45 | 46 | 53 |
54 | 55 |
56 | 57 | 58 | 59 |
60 |
61 | 62 |
63 | 65 |
66 | 67 |
68 | 69 |
70 | 71 | 78 |
79 | 80 |
81 | 82 | 83 | 84 |
85 |
86 | 87 |
88 | 90 |
91 | 92 |
93 | 94 |
95 | 96 | 103 |
104 | 105 | 106 | 107 |
108 | $value) :?> 110 |

111 | 113 | 114 |
115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /views/admin/admin_news.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | добавить новость 6 | 7 |

Найти новость:

8 | 9 | 18 | 19 | 20 | $unit) : ?> 21 | 22 |
23 | 24 |

id:

25 |

27 | 28 | 29 | 30 | 31 |
32 | 33 | 34 | 107 | 108 | 109 |

Новости не найдены!

110 | 111 | 112 |
113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /views/account/registration.php: -------------------------------------------------------------------------------- 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 | 31 |
32 |
33 | 34 |
35 |
36 |
37 | 44 |
45 |
46 |
47 |
48 | 63 |
64 |
65 |
66 |
67 | 73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 |
81 |
Введите правильный номер мобильного телефона!
82 |
83 | 84 | 85 |
86 |
Введите правильный e-mail!
87 |
88 | 89 | 90 |
91 |
Пароль должен содержать больше 6 символов!
92 |
93 | 94 | 95 |
96 |
Пароль и подтверждение пароля не совпадают!
97 |
ПАРОЛЬ ДОЛЖЕН СОДЕРЖАТЬ БОЛЕЕ 6 СИМВОЛОВ
98 | 99 | 103 |
104 | $value) :?> 106 |

107 | 109 |
110 | 111 | 112 | 113 |
114 |
115 |
116 | 117 | -------------------------------------------------------------------------------- /models/Orders.php: -------------------------------------------------------------------------------- 1 | $value) { 14 | $query .= $field . ' = :' . $field . ', '; 15 | } 16 | 17 | $query = substr($query, 0, -2); 18 | $query .= ";"; 19 | 20 | $q = $pdo->prepare($query); 21 | 22 | foreach ($order as $field => $value) { 23 | $q->bindValue(':' . $field, $value); 24 | } 25 | 26 | return $q->execute(); 27 | } 28 | } 29 | 30 | // получение информации о заказе сразу после добавления в orders 31 | public static function getOrder($id_user) { 32 | global $pdo; 33 | $query = "SELECT * FROM " . self::$table . " WHERE id_user = :id_user ORDER BY date_add DESC LIMIT 1"; 34 | $q = $pdo->prepare($query); 35 | $q->bindValue(':id_user', $id_user); 36 | $q->execute(); 37 | return $product = $q->fetch(); 38 | } 39 | 40 | // получение информации о товарах 1 заказа 41 | public static function getProductsOrder($arr){ 42 | // global $pdo; 43 | if (isset($arr) && !empty($arr)) { 44 | // получение инф. о товарах в виде 2-х уровневого массива 45 | $products = []; 46 | foreach ($arr as $key => $value) { 47 | $products[] = Products::getById($value['id']); 48 | } 49 | // получение названия размера и добавление к $products 50 | $size = []; 51 | foreach ($arr as $key => $value) { 52 | $size[] = Products::getBySizeId($value['size']); 53 | } 54 | for ($i=0; $i < count($products) ; $i++) { 55 | $products[$i]['size'] = $size[$i]['name']; 56 | } 57 | // добавление количества товаров в $products 58 | $count = []; 59 | foreach ($arr as $key => $value) { 60 | $count[] = $value['count']; 61 | } 62 | for ($i=0; $i < count($products) ; $i++) { 63 | $products[$i]['count'] = $count[$i]; 64 | } 65 | // добавление цены 1 товара в $products 66 | $price_one = []; 67 | foreach ($arr as $key => $value) { 68 | if (isset($value['price_one'])) { 69 | $price_one[] = $value['price_one']; 70 | } 71 | } 72 | for ($i=0; $i < count($products) ; $i++) { 73 | if (isset($price_one[$i])) { 74 | $products[$i]['price_one'] = $price_one[$i]; 75 | } 76 | } 77 | 78 | return $products; 79 | } 80 | } 81 | 82 | // уменьшение количества товара определенного размера в products_sizes 83 | public static function quantityReduction($products_count, $id_product, $id_size){ 84 | global $pdo; 85 | $str = "UPDATE " . self::$product_size . " SET products_count = :products_count WHERE id_product=:id_product AND id_size=:id_size"; 86 | $query = $pdo->prepare($str); 87 | $query->bindValue(':products_count', $products_count); 88 | $query->bindValue(':id_product', $id_product); 89 | $query->bindValue(':id_size', $id_size); 90 | $query->execute(); 91 | return $query->rowCount(); 92 | } 93 | 94 | // удаление строки товар-размер в products_sizes 95 | public static function deleteStr($id_product, $id_size){ 96 | global $pdo; 97 | $str = "DELETE FROM " . self::$product_size . " WHERE id_product=:id_product AND id_size=:id_size AND products_count=0 "; 98 | $query = $pdo->prepare($str); 99 | $query->bindValue(':id_product', $id_product); 100 | $query->bindValue(':id_size', $id_size); 101 | $query->execute(); 102 | return $query->rowCount(); 103 | } 104 | 105 | // поиск товара в product_size 106 | public static function searchProductId($id_product) { 107 | global $pdo; 108 | $query = "SELECT * FROM " . self::$product_size . " WHERE id_product = :id_product"; 109 | $q = $pdo->prepare($query); 110 | $q->bindValue(':id_product', $id_product); 111 | $q->execute(); 112 | return $product = $q->fetch(); 113 | } 114 | 115 | // изменение visibility в products на 0 116 | // (после того как заказаны все размеры товара и товар удален из product_size) 117 | public static function updateVisibilityProduct($id_product){ 118 | global $pdo; 119 | $str = "UPDATE " . self::$products . " SET visibility = 0 WHERE id=:id "; 120 | $query = $pdo->prepare($str); 121 | $query->bindValue(':id', $id_product); 122 | $query->execute(); 123 | return $query->rowCount(); 124 | } 125 | 126 | // МЕТОДЫ ДЛЯ ЛИЧНОГО КАБИНЕТА: 127 | // получение всех заказов пользователя 128 | public static function getAllOrdersUser($id_user){ 129 | global $pdo; 130 | $query = "SELECT * FROM " . self::$table . " WHERE id_user = :id_user ORDER BY date_add DESC"; 131 | $q = $pdo->prepare($query); 132 | $q->bindValue(':id_user', $id_user); 133 | $q->execute(); 134 | $products = $q->fetchAll(); 135 | // информация о товарах каждого заказа 136 | for ($i=0; $i prepare($query); 149 | $q->bindValue(':status_id', $status_id); 150 | $q->execute(); 151 | return $status = $q->fetch(); 152 | } 153 | 154 | 155 | 156 | } 157 | 158 | ?> --------------------------------------------------------------------------------