Проекттин файлдык архитектурасы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Проекттин файлдык архитектурасы

Поиск

Баардык веб-долбоорлор төмөнкү элементтерден турат:

· Берилиштер базасы, мисалы MySQL же PostgreSQL

· Статикалык файлдар(HTML, сүрөттөр, JavaScript файлдар, стильдер жадыбалдары ж.б.)

· Колдонуучулар же администраторлор жүктөгөн файлдар

· PHP класстар жана китепканалар

· Сырттан келген китепканалар(башка иштеп чыгуучудан келген скрипт)

· Batch файлдар (буйрук сап аркылуу иштетилген скрипттер)

· Окуялар журналы(же болбосо логтор, тиркеме же сервер тараптан жүргүзүлгөн отчеттор)

· Конфигурация файлдары

Жогоруда айтылгандарды тартиптүү түрдө сакташ үчүн Symfony MVC идеясы жана долбоор/тиркеме/модуль/иш-аракет иерархиясы боюнча түзүлгөн стандарттык файлдык структураны сунуштайт. Файлдык структура долбоор, тиркеме же модуль түзүү учурунда автоматтык түрдө түзүлөт. Албетте, сиз өзүңүздүн талаптарыңыз же заказчиктин талаптары боюнча өзгөртүп алсаңыз деле болот.

Долбоордун директориялары

· app/ -эң негизгиси конфигурацияларды камтыйт жана ошонун ичине routing кирет

· src/ - проектин коду, bundles

· vendor/ -китепканалардын жыйындысы

· web/ - аяккы колдонуучуларга жеткиликтүү директория

Эми ар бир директорияны тереңиреек изилдеп көрөлү. web/ -бул сырттан жеткиликтүү болгон баардык файлдардын директориясы. Мисал катары: сүрөттөр, css, js файлдар ж.б. Мындан сырткары ушул директорияда тиркемеге кирүү скрипти жайгашкан(front controller). Front controller төмөнкүдөй болушу мүмкүн:

// web/app.php

require_once __DIR__.'/../app/bootstrap.php.cache';

require_once __DIR__.'/../app/AppKernel.php';

use Symfony\Component\HttpFoundatholds all tests for the bundle.ion\Request;

$kernel = new AppKernel('prod', false);

$kernel->loadClassCache();

$kernel->handle(Request::createFromGlobals())->send();

 

Баардык суроо-талаптарды Front Controller иштетип чыгат. Front Controller катарында, кадимки скрипттер чыгышат.

· app/console – тиркемеге CLI(буйрук сабы) аркылуу жетүү

· app/app.php – тиркемеге web аркылуу жетүү

· app/app_dev.php – тиркемеге web аркылуу иштеп чыгуучу режиминде жетүү

Жогоруда айтылган баардык фронт контроллерлер бир негиз боюнча түзүлүшөт:

· Жүктөөчү класстарды каттоо скриптин кошуу жолу менен autoload (автоматтык түрдө класстарды жүктөө)тураланат;

· кээ бир учурда класстардын кэши колдонулат (көп колднулган класстар);

· Өзөк иштетилет;

Өзөк(Kernel) – бул Symfony системанын движогу. Анын негизги максаты иштөө чөйрөсүн демилгелөө.

Өзөк AppKernel.php app/ директориясында жайгашкан.

app/ директориясын тиркемелерди иштеп чыгуу учурунда биз конфигурацияларды жана роутингти өзгөртүү үчүн колдонобуз. Ушу директория кэш жана логторду камтыйт(app/cache, app/logs), андан тышкары app/Resource тиркеме деңгээлиндеги шаблондорду камтыйт.

src/ биз жазганбаардык кодду камтыйт(php, css, js ж.б.), тиркеменин иштөөсүнө зарыл. Ушул директорияда бандлдар(bundle) жайгашкан.

Symfony фрэмворктун жардамы менен иштеп чыгуунун эң негизги өзгөчөлүгү – бул bundle системасы. Бандл – белгилүү бир максатка жетүү үчүн колдонулган скрипттердин жыйындысы(php, js, html, css ж.б.).

Symfonyнин өзгөчөлүгү – “баардык нерсе bundle ”, тиркеме, жадагалса өзөктүн функционалы. Башкача айтканда, биз биринчи кезекте бандл түзүшүбүз керек.

3.3 сүрөттө көрсөтүлгөндөй, src/ директориясы жалаң гана бандлдарды камтыйт.

 

Бандлдын структурасын карап кетсек:

· Admin/ -админ панелине тиешелүү класстарды камтыйт(бандл түзүүдө болбойт, колдонуучу тараптан түзүлө турган директория).

· Controller/ -бандлдын контроллери

· DependencyInjection [1] – кызматтарды камтыйт

· Entity – берилиштер базасы менен иштөөчү класстарды камтыйт

· Form – формаларды түзүгө php скрипттерди камтыйт

· Resources/views/ -көрсөтүү шаблондорун камтыйт(мисалы Hello/index.html.twig)

· Resources/public/ - веб-тиркеменин иштөөсүнө керектүү бөлүкчөлөрдү камтыйт, бирок код болуп саналбайт (сүрөт, css ж.б.). web/ директориясына assets:install буйругу аркылуу көчүрүлөт.

· Tests – бандлдын тесттерин камтыйт

 

Symfony сунуштаган файлдык архитектура MVСнин баардык мыкты идеяларын өзүнө тартып алгандыктан, андан тышкары ийкемдүүлүк жана конфигурацияны өзгөртүү жөндөмдүүлүгү болгондуктан менин дипломдук ишиме негизки каркас болуп тандалды.

 

 

Берилиштер базасы

Колдонула турган берилиштер жөнүндө маалымат алыш үчүн, биринчиден интернет-дүкөн системасы аткара турган маселелерди белгилейли:

· Товарлардын көрсөтүүсү

· Товарлардын классификациясы

· Колдонуучуларды катто

· Товарларды кутучуга кошуу

· Кутучанын ичиндегилерди көрсөтүү

· Төлөм

· ж.б.

Маселелер тизмесинен системага маанилүү маңыздарды чыгарсак болот.

Товарлар(дисктер), заказдар, кардаарлар, категориялар ар бир интернет дүкөндүн негизи катары болуп эсептелинет.

 

Негизги маңыз деген себебим, интернет дүкөн системасына гана тиешелүү жадыбалдар.

Жадыбалдар:

1. discs – дисктер жөнүндө маалыматтарды камтыйт

2. disc_info – бир диск жөнүндө маалымат камтыйт

3. producers – иштеп чыгаруучулардын жадыбалы

4. type – дисктердин түрлөрү

5. countries – өлкөлөрдүн жадыбалы

6. formats – форматтардын жадыбалы

7. janrs – жанрлардын жадыбалы

8. bin_orders – заказдардын жадыбалы

9. bin_clients – кардаарлардын жадыбалы

10. gallery – дисктерге тиешелүү медиялардын(сүрөт, видео) жадыбалы

11. users – колдонуучулардын жадыбалы

Жогоруда айтылган жадыбалдардын талааларын тереңиреек карап кетели

 

3.1-жадыбал. discs жадыбалы

Мамычанын аты Берилиштердин тиби Узундугу Түшүндүрмө
Discs жадыбалы
  id Int   Код
  poster_id Int   Постердин коду
  country_id Int   Өлкөнүн коду
  janr_id Int   Жанрдын коду
  format_id Int   Форматтын коду
  producer_id Int   Иштеп чыгуучунун коду
  type_id Int   Түрлөрдүн коду
  name Varchar   Дисктин аты
  description Longtext   Дисктин сыпаттоосу
  active Tinyint   Активдүү
  quantity_of_films Int   Фильмдердин саны
  quantity_of_series Int   Сериялардын саны
  quantity_of_clips Int   Клиптердин саны
  date Datetime   Чыгарылган датасы
  price Int   баасы

 

 

3.2-жадыбалы. disc_info жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`disc_info` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `disc_id` INT(11) NULL DEFAULT NULL, `content` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`), INDEX `FK_disc_info_discs` (`disc_id` ASC), CONSTRAINT `FK_disc_info_discs` FOREIGN KEY (`disc_id`) REFERENCES `cinemax`.`discs` (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 7 DEFAULT CHARACTER SET = utf8' COLLATE = utf8_unicode_ci
Disc_info жадыбалы
  id Int   Код
  disc_id Int   Дисктин коду
  content Longtext   Диск жөнүндө маалымат

 

3.3-жадыбалы. producers жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`producers` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 2 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Producers жадыбалы
  Id Int   Код
  Name Varchar   Иштеп чыгуучунун аты

 

 

3.4-жадыбалы. types жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`types` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 6 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Types жадыбалы
  Id Int   Код
  Name Varchar   Түрлөр

 

 

3.5-жадыбалы. formats жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`formats` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 2 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Formats жадыбалы
  Id Int   Код
  Name Varchar   Форматтар

 

 

3.6-жадыбалы. сountries жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`countries` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 10 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Countries жадыбалы
  Id Int   Код
  Name Varchar   Өлкөлөр

 

3.7-жадыбалы. janrs жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`janrs` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 19 DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Janrs жадыбалы
  Id Int   Код
  Name Varchar   Жанрлар

 

 

3.8-жадыбалы. bin_orders жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`bin_orders` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `bin_client_id` INT(11) NULL DEFAULT NULL, `disc_id` INT(11) NULL DEFAULT NULL, `amount` INT(11) NULL DEFAULT NULL, `coast` DOUBLE NOT NULL, PRIMARY KEY (`id`), INDEX `IDX_8249FC5E617F627A` (`bin_client_id` ASC), INDEX `IDX_8249FC5EC38F37CA` (`disc_id` ASC), CONSTRAINT `FK_8249FC5E617F627A` FOREIGN KEY (`bin_client_id`) REFERENCES `cinemax`.`bin_clients` (`id`), CONSTRAINT `FK_8249FC5EC38F37CA` FOREIGN KEY (`disc_id`) REFERENCES `cinemax`.`discs` (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Bin_orders жадыбалы
  Id Int   Код
  Bin_client_id Int   Кардаардын коду
  Disc_id Int   Дисктин коду
  Amount Int   Саны
  Coast Double   Жалпы баа

 

3.9-жадыбалы. bin_clients жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`bin_clients` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INT(11) NULL DEFAULT NULL, `fio` VARCHAR(250) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `phone` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `email` VARCHAR(250) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `address` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, `active` TINYINT(1) NULL DEFAULT NULL, `date_order` DATETIME NOT NULL, PRIMARY KEY (`id`), INDEX `IDX_CBCEFBF9A76ED395` (`user_id` ASC), CONSTRAINT `FK_CBCEFBF9A76ED395` FOREIGN KEY (`user_id`) REFERENCES `cinemax`.`users` (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Bin_clients жадыбалы
  Id Int   Код
  User_id Int   Колдонуучу коду
  Fio Varchar   Аты-жөнү
  Phone Varchar   Телефон
  Email Varchar   Email адрес
  Address Varchar   Жеткирүү адреси
  Active Tinyint   Активдүү
  Date_order Datetime   Заказ кылынган дата

3.10-жадыбалы. gallery жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`gallery` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `context` VARCHAR(64) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `default_format` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `enabled` TINYINT(1) NOT NULL, `updated_at` DATETIME NOT NULL, `created_at` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 26
Gallery жадыбалы
  Id Int   Код
  Name Varchar   Медиянын аты
  Context Varchar   Контекст
  Default_format Varchar   Унчукпоо форматы
  Enabled Tinyint   Активдүү
  Updated_at Datetime   Жаңыртуу датасы
  Created_at Datetime   Түзүлгөн датасы

3.11-жадыбалы. users жадыбалы

Users жадыбалы
  Id Int   Код
  Username Varchar   Логин
  Email Varchar   Email адрес
  Enabled Tinyint   Активдүү
  Password Varchar   Пароль
  Created_at Datetime   Түзүлүү датасы
  Updated_at Datetime   Жаңыланган датасы
  Date_of_birth Datetime   Туулган жылы
  Firstname Varchar   Аты
  Lastname Varchar   Фамилиясы
  Address Varchar   Адрес
  Roles Longtext   Рольдор
  Gender Varchar   Жыныстык
  ж.б.      
           

 

Бул жерде интернет дүкөнгө гана тиешелүү жадыбалдары көрсөтүлгөн. Мындан сырткары фильмдерди көрүү функцоналынын берилиштер базасы дагы бар. Жадыбалдары төмөнкү 3.5-сүрөттө көрсөтүлгөн.

 

Жадыбалдар:

1. movies – фильмдер жөнүндө маалыматты камтыйт

2. comments – комментарийлер

3. directors – режиссерлор

4. actors – актерлор

5. countries – өлкөлөр

6. janrs – жанрлар

7. movies_director – many-to-many боюнчабайланыш жадыбалы

8. movies _actors -many-to-many боюнчабайланыш жадыбалы

9. movies _janrs -many-to-many боюнчабайланыш жадыбалы

10. movies_countries -many-to-many боюнчабайланыш жадыбалы

3.12-жадыбалы. movies жадыбалы

Мамычанын аты Берилиштердин тиби Узундугу Түшүндүрмө
CREATE TABLE IF NOT EXISTS `cinemax`.`movies` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `url` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `poster_id` INT(11) NULL DEFAULT NULL, `description` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NULL DEFAULT NULL, `views` INT(11) NULL DEFAULT NULL, `active` TINYINT(4) NULL DEFAULT NULL, `year` INT(11) NULL DEFAULT NULL, PRIMARY KEY (`id`), INDEX `FK_movies_media__media` (`poster_id` ASC), CONSTRAINT `FK_movies_media__media` FOREIGN KEY (`poster_id`) REFERENCES `cinemax`.`media__media` (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci
Movies жадыбалы
  id Int   Код
  Name Varchar   Аты
  url Varchar   Фильмге шилтеме
  Poster_id Int   Постердин коду
  Description Longtext   Фильмдин сыпаттоосу
  Views Int   Көрүү саны
  Active Tinyint   Активдүү
  Year Datetime   Жыл

 

 

3.13-жадыбалы. comments жадыбалы

CREATE TABLE IF NOT EXISTS `cinemax`.`comments` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `movie_id` INT(11) NULL DEFAULT NULL, `author` VARCHAR(255) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `comment` LONGTEXT CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL, `created` DATE NOT NULL, `active` TINYINT(1) NULL DEFAULT NULL, PRIMARY KEY (`id`), INDEX `FK_comments_movies` (`movie_id` ASC), CONSTRAINT `FK_comments_movies` FOREIGN KEY (`movie_id`) REFERENCES `cinemax`.`movies` (`id`)) ENGINE = InnoDB AUTO_INCREMENT = 8 DEFAULT CHARACTER SET = utf8
Comments жадыбалы
  id Int   Код
  Movie_id Int   Фильм коду
  Author Varchar   Автор
  Comment Longtext   Комментарий
  Created_date Datetime   Дата
  Active Tinyint   Активдүү

 

Жогоруда айтылган функционалга тиешелүү башка жадыбалдарды карай турган болсок, алардын структурасы жөнөкөй. Бирок байланыш жадыбалдарын карап кете турган болсок, алардын негизги максаты эки жадыбал арасындагы many-to-many байланышын түзүү.

movies_actors жадыбалын мисал катары алсак,movies жана actors жадыбалдар арасында many-to-many байлынышын түзөт.

Албетте, көрсөтүлгөн жадыбалдардан да тышкары кошумча жадыбалдар бар. Бул жерде негизги функционалга түз тиешеси бар жадыбалдар көрсөтүлдү. Кошумча жадыбалдар:

· videos – трейлерлердин жадыбалы

· feedback – кайтарма жооп жадыбалы

· slider_header – баштапкы баракчада турган слайдер жадыбалы

· ips – колдонуулардын ip-адрестер жадыбалы

· visits – сайтка кирүүнүн санын камтыган жадыбал

 

Коддук реализация

Интернет-дүкөндүн эң маанилүү функционалдарын карап кетели. Интернет-дүкөн дегенде биринчиден биздин оюбузга кутуча келет. Кутучасыз интернет-дүкөн болбойт, ошондуктан биринчиден кутучадан баштасак.

Кутуча, BinController.php

Кутучага тандалган товар кошуу, өчүрүү, санын көбөйтүү, азайтуу функциялары BinController.php файлында жазылган. BinController.php ичин карап көрсөк.

Колдонуучу товар заказ кылгысы келсе, биринчиден заказ кылуу баскычын басат, анан керектүү амал иштейт. Заказ кылынган товар кутучага түшөт, кийинчереек кутучага өтүп колдонуучу стандарттык амалдарын(кошуу, өчүрүү, төлөм) аткара билет. Коддо кутучага кошуу функциясы төмөндө жазылган:

public function addAjaxBinAction($id) {

if($this->getRequest()->isXmlHttpRequest()) {

$discs = $this->getDoctrine()

->getRepository("CinemaxBundle:Discs")

->find($id);

$request = $this -> getRequest();

if($discs) {

$disc = $request -> cookies -> get("cookieDiscs");

if(!isset($disc[$id]) || empty($disc[$id]))

$disc[$id] = 0;

$amount = $request->query->get('amount',1);

 

$discPage = $request->query->get('discPage');

if($discPage == "true")

$disc[$id] = $amount;

else

$disc[$id]++;

$response = new Response();

$cookie = new Cookie("cookieDiscs[$id]", $disc[$id], time() + 3600);

$response->headers->setCookie($cookie);

$response->send();

return $this->render('CinemaxBundle:Bin:addAjaxBin.html.twig', array('disc' => $discs));

}

else {

throw new \Exception('Что то не так');

}

}

return new Response();

Заказ кылуу баскычын басканда жогорудагы addAjaxBinAction функциясы аткарылат. Бул эң биринчи иштейт турган функция десек болот. Заказ кылып жаткан учурда дисктин id-си функцияга аргумент катары жиберилет. Ошо id боюнча discs жадыбалынан керектүү диск изделет. Табылган диск кукиге сакталат. Сакталгандан кийин товар кутучага кошулду деген popup чыгат. Popup ajax-тын жардамы менен чакырылат. Ошол чакырылган popup-та кутучага өтүү деген шилтемеси бар. Эгер колдонуучу кааласа кутучага өтүшү мүмкүн же болбосо popup-ты жабып товар тандоону улантып кетиши мүмкүн.

Ал эми кутучага өтүү функциясын карасак:

public function binAction() {

/* @var DiscsRepository $repository */

$request = $this->getRequest();

$discsIds = $request->cookies->get("cookieDiscs");

$discs = null;

if (!empty($discsIds)) {

$repository = $this->getDoctrine()->getRepository("CinemaxBundle:Discs");

$discs = $repository->getDiscsById($discsIds);

}

return $this->render('CinemaxBundle:Bin:discsInBin.html.twig', array(

'discs' => $discs,

'discsCount' => $discsIds

));

}

binAction функциясы эч кандай аргумент албайт. Анын макстаты кутучага өтүү. Өткөндө айтылды, заказ кылынан дисктер кукиде сакталат деп. Ушул функция кукиден баардык товарды алып discsInBin.html.twig файлын чакырат. Ушу менен кутучага өтүү амалы бүтөт.

Товардын санын көбөйтүү, азайтуу, товарды, жыйынтыгы чыгару bin.js аттуу файлда жазылган.

$(".disc_add").click(function () {

var input = $(this).prev('.disc_input');

var amount = input.val();

amount++;

input.val(amount);

discTotal(input,amount);

});

$(".disc_rem").click(function () {

var input = $(this).next('.disc_input');

var amount = input.val();

if (amount > 1)

amount--;

input.val(amount);

discTotal(input,amount);

});

function discTotal(input,amount){

 

var html_price = input.nextAll('.disc_total_price').children('.som');

var price = 40;

html_price.html(price * amount);

calculate();

 

}

 

function calculate() {

var sumPrice = 0;

$('.bin_table').find('tr[id]').each(function (i, el) {

var value = $(this).children('td:last').find('.som').html();

sumPrice += parseInt(value);

});

$('.total_value').html(sumPrice.toString());

}

Товарды өчүрүү функциясын карасак:

public function delAjaxBinAction($id)

{

if ($this->getRequest()->isXmlHttpRequest()) {

$request = $this->getRequest();

 

$response = new Response();

$cookie = new Cookie("cookieDiscs[$id]", null, 9999);

$response->headers->setCookie($cookie);

$response->send();

 

return new JsonResponse(array());

}

return $this->redirect($this->generateUrl("cinemax_homepage"));

}

Бул жерде delAjaxBinAction функциясы бир аргумент кабыл алат, анан ошол аргумент аркылуу керектүү дискти кукиден өчүрөт.

Дисктер тандалып, сандары берилип, өчүрө тургандар өчүрүлүп бүткөндөн кийин, эң акыркы этап, бул төлөм. Төлөм баскычын баскандан кийин төмөнкү код ишке ашырылат.

 

public function binFormAction(Request $request)

{

$response = new RedirectResponse($this->generateUrl('cinemax_bin_discs'));

if ($request->isMethod('POST')) {

$data = $request->request->get('bin');

$discs = $request->cookies->get("cookieDiscs");

if (!empty($discs)) {

foreach ($discs as $key => $value) {

if (!isset($data[$key])) {

$response->headers->clearCookie("cookieDiscs[$key]");

}

}

}

if (!empty($data)) {

foreach ($data as $key => $value) {

if ($value == 0) {

$response->headers->clearCookie("cookieDiscs[$key]");

} else {

$cookie = new Cookie("cookieDiscs[$key]", $value, time() + 3600);

$response->headers->setCookie($cookie);

}

}

}

if ($request->request->get('button_bin') == 'Оформить заказ') {

$response->setTargetUrl($this->generateUrl('cinemax_order'));

}

elseif ($request->request->get('button_bin') == 'Продолжить выбор') {

$response->setTargetUrl($this->generateUrl('cinemax_homepage'));

}

}

return $response;

 

binFormAction() функциясы кутучадагы болгон маалыматты сактап, мисалы канча диск кошулду, өчүрүлдү ж.б., анан эгер заказды аткаруу баскычы басылган болсо заказ кылуу формасын жиберет. Тандоону улант деген баскычы басылган болсо, сайттын баштапкы баракчасына жиберет. Биздин учурда заказды аткаруу баскычы басылды.

public function binOrderAction(Request $request)

{

/* @var User $user */

/* @var DiscsRepository $repository */

/* @var Discs $disc */

$discsIds = $request->cookies->get("cookieDiscs");

if (empty($discsIds)) {

return $this->redirect($this->generateUrl("cinemax_bin_discs"));

}

 

$binClients = new BinClients();

$user = $this->getUser();

if (!is_null($user)) {

$binClients->setUser($user);

$binClients->setFio($user->getFullname());

$binClients->setEmail($user->getEmail());

$binClients->setPhone($user->getPhone());

$binClients->setAddress($user->getAddress());

 

}

$form = $this->createForm(new BinClientsFormType(), $binClients);

 

if ($request->isMethod("POST")){

$form->handleRequest($request);

if ($form->isValid()){

$em = $this->getDoctrine()->getManager();

$binClients->setDateOrder(new \DateTime());

$em->persist($binClients);

$em->flush();

 

$repository = $this->getDoctrine()->getRepository("CinemaxBundle:Discs");

$discs = $repository->getDiscsById($discsIds);

if (!empty($discs)){

foreach ($discs as $disc){

$binOrders = new BinOrders();

$binOrders->setBinClient($binClients);

$binOrders->setDisc($disc);

$binOrders->setAmount($discsIds[$disc->getId()]);

$binOrders->setCoast($disc->getPrice());

$em->persist($binOrders);

}

$em->flush();

}

$this->sendEmail($binClients);

$this->ClearCookies($discsIds);

$this->get('session')->getFlashBag()->add('notice', 'Ваш заказ принят');

}

}

return $this->render("CinemaxBundle:Bin:binOrderForm.html.twig", array("form" => $form->createView()));

}

binOrderAction() функциясы заказ кылынган диск жөнүндө маалыматты кукиден алат. Функция аргумент катары суроо талап алгандыктан, текшерүүдөн өтөт:

if ($request->isMethod("POST"))

Эгерде суроо талап текшерүүдөн өтпөсө, бизге заказ кылуу формасы жиберилет. Ал жерде колдонуучу жеке маалыматтарын киргизет. Жеке маалыматтарын киргизип бүткөндөн кийин, сактоо баскычын басат. Баскандайн кийин жогорудагы функция кайрадан аткарылат, бирок бул учурда шартка туура келет. Ал эми клиентти bin_clients, заказды bin_orders жадыбалына сактоо амалдары аткарылат. Сактоо аткарылгандан кийин администратордун почтасына жаңы заказ келди деген билдирме жиберилет. Куки тазаланат. Заказынар кабыл алынды деген маалымдоо көрсөтүлөт. Ошентип заказ кылуу амалы бүтөт.

SearchController.php

 

SearchController.php файлында издөө функциясы жазылган. Ар интернет-дүкөндө издөө болушу зарыл.

public function indexAction(){

$form = $this->createForm(new SearchType());

$request = $this->getRequest();

if ($request->isMethod('GET')) {

$form->submit($request);

$searchText =$form->get('search')->getData();

$repository = $this->getDoctrine()->getRepository('CinemaxBundle:Discs');

$discs = $repository->searchDiscs($searchText);

$paginator = $this -> get('knp_paginator');

$pagination = $paginator

->paginate($discs, $this->get('request')->query->get('page',1),12);

$count = count($pagination);

return $this -> render('CinemaxBundle:Search:index.html.twig', array('count'=> $count, 'pagination'=>$pagination, 'searchText'=>$searchText, 'form'=>$form->createView()));

}

}

public function showFormAction(){

$form = $this->createForm(new SearchType);

return $this -> render('CinemaxBundle:Search:searchForm.html.twig', array('form'=>$form->createView()));

}

Бул коддо издөө амалы аткарылбайт. Бул жерде издөө функциясы чакырылат.

$discs = $repository->searchDiscs($searchText);

searchDiscs() функциясы аргумент катары суралган сөздү алат.

Ушу фукнцияны карап көрсөк.

public function searchDiscs($searchText){

$query = $this->createQueryBuilder('q')

->orWhere("q.name like:search")

->orWhere('q.description like:search')

->andWhere('q.active = 1')

->setParameter('search', '%'. $searchText. '%');

return $query->getQuery();

}

ДемекsearchDiscs() функциясы базага суроо талап жиберип, керектүү сөздү таап чыгат.

Мындан сыркары дагы көптөгөн класстар, функциялар ишке ашырлыган. Бирок мен эң маанилүүлөрүн гана көрсөттүм.

 

 

4. Интернет-дүкөндүн колдонуу көрсөтмөлөрү

4.1 Интернет дүкөндү башкаруу

Интернет-дүкөндү башкаруу - ал эмне?

Интернет-дүкөндү башкаруу эки негизги маселени билдирет:

· товар жөнүндө маалыматты топтоп даярдоо жана жарялоо

· заказ жөнүндө маалыматты кабыл алуу жана иштетүү

Бул маселелер интернет-дүкөндүн же болбосо ишкана башкаруу системанын каражаттары менен ишке ашырылат.

Ал эми жогорудагы маселелерди ким аткарышы керек?

Албетте интернет-дүкөндүн администратору. Эң башкы жана маанилүү рольду аткарган киши – администратор. Ар бир иштеп жаткан интернет-дүкөндүн администратору болушу зарыл же эч болбогондо анын функцияларын аткарган киши.

Администратордун функциялары:

· дүкөндү колдоо(товар кошуу, өчүрүү, өзгөртүү)

· кардаарлар менен катташуу(телефон же онлайн коммуникатор аркылуу)

· заказдарды көзөмөлдөө(админ панель аркылуу)

· заказдарды жеткирүүсүн көзөмөлдөө

· кардаарлардын төлөөсүн көзөмөлдөө(чоң интернет-дүкөндөрдө муну бухгалтерия кылат, бирок биздин дүкөндө өзүбүз кылабыз)

Эң маанилүү рольду администратор экенин билдик. Бирок администратордон дагы сырткары рольдор бар. Алар колдонуучулар. Колдонуучу экиге бөлүнөт: катталган колдонуучу жана конок. Катталган колдонуучу кошумча мүмкүнчүлүктөргө ээ. Мисалы, комментарий калтыруу. Бирок заказды баардык колдонуучу кыла алат.

 

 

Административдик панель

Товарларды, фильмдерди жана трейлерлерди кошуу администратор аткарат. Негизи ушу амалдарды аткарыш үчүн админ панель колдонулат. Административдик панельге жалаң гана администраторлор кире алышат.

 

Жогоруда көрсөтүлгөн форма жалаң гана администратор үчүн. Администратор логин жана паролюн жазып, админ панельге өтөт. Админ панельде болсо, администратор өзүнүн милдетин толук түрдө аткарат. Төмөнкү 4.2-сүрөттө админ панельдин көрүнүшү.

 

 

Сүрөттө көрсөтүлгөндөй эле, кошуу жана тизме баскычтары көп. Демек, администратор, каалаган категорияга белгилүү баскычты басып, басылган баскычка көрө амалды аткарала алат. Диск кошуу амалын карап кетсек. Төмөнкү 4.3-сүрөттө диск кошуу формасы көрсөтүлгөн.

 

Жогоруда көрсөтүлгөн сүрөт, бир мезгилде кошуу жана редакциялоо формасы болушу мүмкүн. Эгер түзүү жана редакциялоо баскычы басылса, кайтадан ушул форма жүктөлөт, бирок боштуктардын ордуна өткөн формада жазылган маалыматтар көчүрүлөт жана редакцияласак болот.

Ал эми кошулган дисктердин тизмесин карасак.

 

 

Эгер тизмеде абдан көп маалымат болуп кетсе, төмөнкүдөй фильтрлөө формасы бар. Ал тизменин оң жагында жайгашкан.

4.5-сүрөт. Фильтрлөө формасы

Көрүнүп тургандай эле аты, активдүү, жанр, жана түрү боюнча фильтр процессин ишке ашырса болот. Мындай фильрлөө бардык тизмелердин баракчасында бар. Өзүңөр байкагандай админ панель жөнөкөй жана колдонуучуга эч кандай кыйынчылык алып келбейт. Демек, ар бир колдонуучу интуитивдик деңгээлде панель менен иштей алат.

 

 

4.3 Колдонуучулар үчүн интернет-дүкөн

Колдонуучу – интернет мейкиндигинде белгилүү бир маселени же функцияны аткарган адам же болбосо уюм. Бирок биздин аймак интернет- маркетинг болгондуктан, колдонуучу - интернет аркылуу арзан жана ишенимдүү байланыш кура билүү мүмкүнчүлүгү жогоруу болгон адамдар.

Системада колдонуучунун ролю дагы абдан маанилүү. Колдонуучулар жок болсо администратордун деле кереги жок. Андан сырткары колдонуучулар интернет-маркетинг аймагында киреше булагы катары эсептелинет. Ошондуктан колдонуучуларды кызыктыртуу жана системага тартуу өтө манилүү.

 

Каттоо процесси.

 

4.6-сүрөт. Колдонуучуну каттоо формасы

 

Каттоону өтү зарыл процесс эмес. Интернет-дүкөндүн фукнцияларын баардык колдонуучу аткара алат. Бирок эгер колдонуучу каттоодон өтүүсүн каалаласа, ал эки этаптан өтүшү зарыл. Биринчиден, колдонуучу жогоруда көрсөтүлгөн формада тааларды толтурушу керек. Эгерде баардыгы туура толтурулса, колдонуучу жазган email адреске билдирме жиберилет. Ошо жиберилген билдирме далилдөө шилтемесин камтыйт. Шилтемеден өтүп колдонуучу катталган колдонуучу болуп эсептелет.

4.7-сүрөт. Колдонуучунун авторизация формасы

Жогоруда авторизация формасы көрсөтүлгөн. Эгер колдонуучу каттоодон өткөн болсо, логин жана пароль талаасын толтуруп, авториязациядан өтсө болот. Андан сырткары, авторизация форманын астында издөө формасы жайггашкан. Колдонуучу издеп жаткан дисктин атын билсе, ошол формага атын жазып таап алышы мүмкүн.

 

 

Каталог

Жогоруда каталогтун көрүнүшү. Админ панельден киргизилген дисктин баары ушул жерден көрүнөт. Байкагандай эле, эгер курсорду дисктин үстүнө алып келсе “Заказать” жана “Подробности” шилтемелери пайда болот. “Заказать” шилтемесин басканда, тандалган диск кутучага кошулат. Ал жөнүндө кийинчерээк. Ал эми “Подробности” шилтемесинен өтсө, тандалган диск жөнүндө маалымат алса болот.

Заказ кылуу процесси

Колдонуучу керектүү дискти тапты, анан заказ кылгысы келди. Заказ кылыш үчүн, ал “Заказать” шилтемесин басат, анан 4.9 сүрөттө көрсөтүлгөн popup экранда пайда болот.

 

4.9-сүрөт. Диск кошулганын билдирген Popup [2]

Popup-тын пайда болуусу, диск кутучага кошулганын билдирет. Сүрөттө көрсөтүлгөндөй, popup кутучага өтүү шилтемесин камтыйт. Эгер биз кутучага өтсөк, ал жерде тандалган диск бар болот.

Кутучада колдонуучу тараптан тандалган дисктердин тизмеси. Ал жерде колдонуучу дисктердин санын көбөйтүп, азайтып, жана өчүрүп салышы мүмкүн. Андан сырткары колдонуучу кааласа тандоону улантып кетиши же болбосо заказды улантышы мүмкүн. Биздин учурда колдонуучу заказды улантууда.

 

 

 

 

 

Бул формада сөзсүз түрдө баардык талаа толтурулушу керек. Колдонуучу өзүнүн жеке маалыматтарын жазып, сактоо баскычын басканда, администратордун почтасына билдирме келет. Администратор келген маалымат боюнча кардаар менен байланыш түзөт. Эгер заказ далилденсе, заказ курьерге айтылат, анан кардаардын адресине жеткирилет. Акы жеткирилгенде төлөнөт. Интернет дүкөндүн эң негизги мүмкүнчүлүктөру жогоруда айтылды жана көрсөтүлдү.

 

4.3.4 Онлайн көрүү функционалы

 

Дисктерди заказ кылуудан да сырткары фильмдерди көрүү мүмкүнчүлүгү бар. Ар бир зыяратчы, каттоодон өтпөстөн, фильмдерди көрө алат. Төмөндө фильмдердин каталогу. Сүрөттө көрсөтүлгөндөй, жанр боюнча фильтрлөөсө болот. Андан сырткары: актер, режиссер, өлкө, жылы боюнча фильтрлөө мүмкүнчүлүгү бар. Алардын баары фильмдин баракчасында жайгашкан. Эгер колдонуучу кааласа, колдонуучу фильм жөнүндө өзүнүн ой-пикирин калтырса болот. Албетте, аны жалаң гана катталган колдонуучулар аткара алышат.

Корутунду

Иштин натыйжасында башында коюлган максаттардын баары ишке ашырылды. Иштелип чыккан “Онлайн түрдө дисктерди сатуу жана


Поделиться:


Последнее изменение этой страницы: 2017-02-10; просмотров: 159; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.110 (0.012 с.)