Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP: Частина 3. Побудова каталогу товарів для Інтернет-магазину за допомогою локальної бази даних і Web-служб

  1. Серія контенту:
  2. Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP
  3. Побудова online-каталогу товарів
  4. Відстеження обраного товару
  5. Платіжна система
  6. Розробка адміністративного інтерфейсу
  7. Пропонована реалізація рішення
  8. Лістинг 1. PHP-сценарій online-каталогу
  9. Лістинг 2. PHP-функції для відображення колонтитулів
  10. Лістинг 3. Основний PHP-сценарій
  11. Лістинг 4. Використовувані константи
  12. висновок
  13. Ресурси для скачування

Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

Серія контенту:

Цей контент є частиною # з серії # статей: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP

Слідкуйте за виходом нових статей цієї серії.

У цій статті з циклу, присвяченого використанню Web-служб, триває обговорення процесу взаємодії з сервером, що забезпечує доступ до своєї функціональності через Web-служби. В рамках статті будуть детально розглянуті аспекти реалізації Інтернет-магазину, що мають максимальне значення для користувача.

Побудова online-каталогу товарів

Розглянутий у статті Інтернет-магазин призначений для торгівлі книгами. Для реалізації проекту буде потрібно створити базу даних, яка підтримує таку предметну область. У базі даних повинна зберігатися інформація про категорії книг, адреси для доставки замовлень, умови оплати і т.д. У попередніх статтях вже розбиралися механізми реалізації Web-інтерфейсів до баз даних, тому дана функціональність не повинна викликати питань. Для остаточної обробки замовлень будуть застосовуватися транзакції, що має бути відображено в реалізації бази даних.

Відстеження обраного товару

Існують два методи відстеження товарів, обраних відвідувачами. Перший - це приміщення обраних елементів в базу даних, а другий - маніпулювання змінними HTTP-сеансу. Використання змінних HTTP-сеансу для відстеження обираних товарів набагато простіше в реалізації, так як не вимагає постійного звернення до бази даних. Також такий підхід дозволяє уникнути захаращення бази непотрібними даними в процесі роботи, так як окремі відвідувачі можуть просто переглядати магазин, щось вибирати, але нічого не купувати. І якщо кожен раз їх дії будуть вносити зміни в базу даних, то це призведе до надмірних накладних витрат. Тому використання змінних HTTP-сеансу буде найкращим вибором для вирішення даного завдання. При цьому, коли користувач завершить роботу з каталогом і зробить остаточний розрахунок, ця інформація буде поміщена в базу даних у вигляді запису, яка реєструє транзакцію. Крім цього, ці дані можуть відображатися в іншому місці на Web-сторінці, щоб користувач в будь-який момент часу міг бачити вартість замовлених їм товарів.

Платіжна система

У проект буде включений механізм для прийому від відвідувачів списку замовлених товарів і інформації щодо доставки. Реалізація реальної обробки платежів виходить за рамки даного циклу статей, так як для цих цілей існує велика кількість вже готових платіжних систем. В рамках цього циклу буде реалізована спеціальна функція, яка буде імітувати інтерфейс до будь-якої платіжної системи.

Платіжні системи прив'язані до адміністративних і навіть географічних кордонів, але інтерфейс до таких систем може не змінюватися (або змінюватися косметично) і бути універсальним. Суть даної платіжної системи полягає в передачі в банк інформації про фінансову складову замовлення і отримання з банку коду успішного завершення операції або коду помилки. В обмін на передачу фінансової інформації платіжна система буде стягувати плату у вигляді річної оплати або оплати за установку. При цьому платіжній системі буде потрібно інформація про клієнта (наприклад, номер кредитної картки), ідентифікаційна інформація про власника магазину для визначення банківського рахунку, а також загальна сума транзакції. Загальну суму замовлення можна отримати з купівельної корзини в змінної HTTP-сеансу, а коли остаточна інформація на замовлення буде занесена в базу даних, змінну сеансу можна буде видалити.

Розробка адміністративного інтерфейсу

Крім платіжної системи та інших елементів потрібно адміністративний інтерфейс для реалізації таких можливостей, як додавання, видалення і редагування інформації про книги та категоріях в базі даних. Найчастіше доводиться міняти ціну на товар, так як в магазинах регулярно проводяться спеціальні акції або сезонні розпродажі. Це призводить до необхідності збереження не тільки замовлення клієнта, а й ціни, яка повинна бути виплачена за обраний товар. Відображення в записах тільки елементів замовлення і поточної ціни кожного елемента може істотно ускладнити роботу бухгалтерії. Крім цього, в такій ситуації при поверненні або обмін товару клієнту, можливо, будуть повернуті зайві грошові кошти, якщо товари були придбані по акції. Все це необхідно врахувати при реалізації системи.

Пропонована реалізація рішення

Таким чином, можна сказати, що буде потрібно розробити систему, що має два основних уявлення - призначене для користувача і адміністративне. Логіка для користувача інтерфейсу полягає в тому, що клієнт спочатку відкриває головну сторінку, на якій перераховані всі категорії книг на сайті. Ця сторінка дає йому можливість перейти далі до певної категорії книг, а потім і до інформації про конкретну книжку. В інтерфейсі також буде можливість помістити обрану книгу в кошик. В рамках роботи з кошиком можна зробити остаточний розрахунок і покинути магазин або повернутися на титульну сторінку.

Адміністративний інтерфейс дозволяє входити в систему і додавати нові книги і категорії. При цьому найпростіший спосіб реалізувати можливість редагування і видалення книг і категорій полягає в тому, щоб надати адміністратору окрему версію сайту, відмінну від тієї, яка доступна користувачеві. У цьому випадку адміністратор матиме можливість переглядати категорії і книги, але замість доступу до купівельному кошику він буде переходити до певної книзі або категорії, а потім редагувати або видаляти її.

В даному контексті потрібно розробити деякі сценарії так, щоб вони відповідали вимогам і користувачів, і адміністратора. Тому трьома основними компонентами системи будуть: каталог товарів, купівельна корзина разом з обробкою замовлення і адміністративний інтерфейс сайту. Для цього буде потрібно створити набір бібліотек, які об'єднують фрагменти коду, що відповідають за виведення HTML, тим самим, відокремивши бізнес-логіку від уявлення. Такий підхід значно спростить створення і супровід коду.

У лістингу 1 наведено PHP-сценарій для титульної сторінки каталогу товарів, а на малюнку 1 показано її уявлення:

Лістинг 1. PHP-сценарій online-каталогу
<? Php require ( 'book_sc_fns.php'); // для використання купівельної корзини необхідно запустити HTTP-сеанс session_start (); do_html_header ( 'Ради бачити Вас в магазині Книголюб!'); echo '<p> Будь ласка, виберіть категорію: </ p>'; // витягти категорії з бази даних $ cat_array = get_categories (); // відобразити категорії у вигляді посилань на відповідні сторінки display_categories ($ cat_array); // якщо користувач увійшов в систему як адміністратор, вивести // посилання для додавання, видалення і редагування категорій if (isset ($ _ SESSION [ 'admin_user'])) {display_button ( 'admin.php', 'admin-menu', ' Меню адміністрування '); } Do_html_footer (); ?>
Малюнок 1. Головна сторінка online-каталогу

У лістингу 2 наведено функції, що відповідають за відображення тексту в колонтитулах:

Лістинг 2. PHP-функції для відображення колонтитулів
<? Php function do_html_header ($ title = '') {// висновок HTML-заголовка // оголошення змінних HTTP-сеансу if (! $ _ SESSION [ 'items']) $ _SESSION [ 'items'] = '0'; if (! $ _ SESSION [ 'total_price']) $ _SESSION [ 'total_price'] = '0.00'; ?&gt; <Html> <head> <title> <? Php echo $ title; ?> </ Title> </ head> <body> <table width = '100%' border = 0 cellspacing = 0 bgcolor = '# cccccc'> <tr> <td rowspan = 2> <a href = 'index. php '> <img src =' images / Book-O-Rama.gif 'alt =' Магазин КНИГОЛЮБ 'border = 0 align =' left 'valign =' bottom 'height = 55 width = 325> </a> </ td> <td align = 'right' valign = 'bottom'> <? php if (isset ($ _ SESSION [ 'admin_user'])) echo '& nbsp;'; else echo 'Всього книг ='. $ _ SESSION [ 'items']; ?&gt; </ Td> <td align = 'right' rowspan = 2 width = 135> <? Php if (isset ($ _ SESSION [ 'admin_user'])) display_button ( 'logout.php', 'log-out', 'Вихід'); else display_button ( 'show_cart.php', 'view-cart', 'Показати кошик'); ?&gt; </ Tr> <tr> <td align = right valign = top> <? Php if (isset ($ _ SESSION [ 'admin_user'])) echo '& nbsp;'; else echo 'Загальна сума = $'. number_format ($ _ SESSION [ 'total_price'], 2); ?> </ Td> </ tr> </ table> <? Php if ($ title) do_html_heading ($ title); } Function do_html_footer () {// висновок завершальних HTML-дескрипторів?> </ Body> </ html> <? Php // далі йдуть інші функції, що входять в бібліотеку}

У лістингу 3 розглядається PHP-сценарій, який реалізує найважливіші елементи бізнес-процесу.

Лістинг 3. Основний PHP-сценарій
<? Php // використання змінної HTTP-сеансу в якості кошика користувача session_start (); require_once ( 'constants.php'); require_once ( 'Product.php'); require_once ( 'AmazonResultSet.php'); require_once ( 'utilityfunctions.php'); require_once ( 'bookdisplayfunctions.php'); require_once ( 'cartfunctions.php'); require_once ( 'categoryfunctions.php'); // масив з назвами вхідних параметрів. // вони пройдуть валідацію і будуть трансформовані в глобальні змінні. $ External = array ( 'action', 'ASIN', 'mode', 'browseNode', 'page', 'search'); // вхідні параметри можуть бути отримані через методи GET або POST. foreach ($ external as $ e) {if (@ $ _ REQUEST [$ e]) $$ e = $ _REQUEST [$ e]; else $$ e = ''; $$ e = trim ($$ e); } // значення за замовчуванням для глобальних змінних. if ($ mode == '') $ mode = 'books'; // товар за замовчуванням - книги if ($ browseNode == '') $ browseNode = 53; // категорія за замовчуванням - 53 (бестселери) if ($ page == '') $ page = 1; // сторінка за замовчуванням - 1 // валідація вхідних параметрів if (! Eregi ( '^ [A-Z0-9] + $', $ ASIN)) // ASIN - послідовність символів і цифр $ ASIN = ''; if (! eregi ( '^ [az] + $', $ mode)) // mode - послідовність символів $ mode = 'books'; $ Page = intval ($ page); // pages і browseNodes - числа $ browseNode = intval ($ browseNode); $ Search = safeString ($ search); if (! isset ($ _ SESSION [ 'cart'])) {session_register ( 'cart'); $ _SESSION [ 'cart'] = array (); } // ці дії повинні бути виконані до того, // як буде показаний верхній розділ addToCart ($ _ SESSION [ 'cart'], $ ASIN, $ mode); if ($ action == 'deletefromcart') deleteFromCart ($ _ SESSION [ 'cart'], $ ASIN); if ($ action == 'emptycart') $ _SESSION [ 'cart'] = array (); // перегляд верхнього розділу require_once ( 'topbar.php'); switch ($ action) {case 'detail': showCategories ($ mode); showDetail ($ ASIN, $ mode); break; case 'addtocart': case 'deletefromcart': case 'emptycart': case 'showcart': echo '<hr /> <h1> купівельна корзина </ h1>'; showCart ($ _ SESSION [ 'cart'], $ mode); break; case 'image': showCategories ($ mode); echo '<h1> збільшене зображення товару </ h1>'; showImage ($ ASIN, $ mode); break; case 'search': showCategories ($ mode); echo "<h1> результат пошуку '$ search' </ h1>"; showSearch ($ search, $ page, $ mode); break; case 'browsenode': default: showCategories ($ mode); $ Category = getCategoryName ($ browseNode); if (! $ category || $ category == 'Best Selling Books') {echo '<h1> бестселери </ h1>'; } Else {echo "<h1> бестселери в категорії $ category </ h1>"; } ShowBrowseNode ($ browseNode, $ page, $ mode); break; } Require ( 'bottom.php'); ?>

Дані сценарій починається зі створення HTTP-сеансу. При цьому купівельна корзина зберігається у вигляді змінної HTTP-сеансу. Після цього підключаються кілька сценаріїв, кожен з яких визначає набір змінних і констант, використовуваних в додатку. У лістингу 4 наведено список констант.

Лістинг 4. Використовувані константи
<? Php // це додаток буде працювати за методом REST (XML поверх HTTP) або SOAP define ( 'METHOD', 'REST'); // константи для створення кешу define ( 'CACHE', 'cache'); // шлях до кешувального файлів define ( 'ASSOCIATEID', 'webservices-20'); // встановити ID define ( 'DEVTAG', 'DHBIBVFDMBJDL'); // встановити DEVTAG if (DEVTAG == 'XXXXXXXXXXXXXX') {die ( 'необхідно зареєструватися для використання Web-служб Amazon <a href = "https://associates.amazon.com/exec/panama/associates/ join / developer / application.html / ref = sc_bb_l_0 / 002 "> Amazon </a> '); } // закритий список категорій товарів Amazon $ categoryList = array (5 => 'Computers & Internet', 3510 => 'Web Development', 295223 => 'PHP', 17 => 'Literature and Fiction', 3 => ' Business & Investing ', 53 =>' Non Fiction ', 23 =>' Romance ', 75 =>' Science ', 21 =>' Reference ', 6 =>' Food & Wine ', 27 =>' Travel ', 16272 => 'Science Fiction'); ?>

В основному сценарії знаходиться ряд допоміжних операцій і головний цикл обробки подій, проте подібна функціональність вже розглядалася раніше, так що ніяких труднощів виникнути не повинно. Також в прикладі використовуються однотипні рішення, що забезпечують деяку стандартність в підходах до вирішення поставлених завдань. Більш докладно робота сценарію і його взаємодію з іншими компонентами буде розглянута в наступній статті.

висновок

У статті наведено докладний аналіз коду для створення купівельної корзини, яка буде взаємодіяти з Web-службами. Описано базові принципи створення каталогу товарів, методів відстеження обраного товару і функціонування платіжної системи Інтернет-магазину.

Даний проект спирається на більш ранній цикл статей «Реальні Web-проекти на PHP і MySQL. Основа Інтернет-магазину - «купівельна корзина» - є сполучною компонентом для всіх раніше написаних статей, присвячених програмуванню на PHP.

Ресурси для скачування

Схожі теми

  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 1 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 2 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 3 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 4 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 5 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 6 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 7 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 8 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 9 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 10 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 11 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 12 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 13 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 14 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. Частина 1 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. Частина 2 .
  • Реальні проекти на PHP і MySQL. Робота з Web-службами за допомогою XML і SOAP. частина 3 .

Підпишіть мене на повідомлення до коментарів

Com/developerworks/ru/library/?
Gt; <Html> <head> <title> <?
Php echo $ title; ?
SESSION [ 'items']; ?
Gt; </ Td> <td align = 'right' rowspan = 2 width = 135> <?
Gt; </ Tr> <tr> <td align = right valign = top> <?
Number_format ($ _ SESSION [ 'total_price'], 2); ?