Разработка интернет-магазина одежды
Разработка сайта интернет-магазина, управляемого базой данных. Установка XAMPP, разделение кода и оформления с помощью Smarty. Начало реализации проекта Goodstore. Создание каталога товаров. Создание модели данных с помощью ALLFUSION ERWIN DATA MODELER.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 20.03.2017 |
Размер файла | 3,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
$this->mProducts[$i]['thumbnail']);
// Генерируемссылку Add to Cart
$this->mProducts[$i]['link_to_add_product'] =
Link::ToAddProduct($this->mProducts[$i]['product_id']);
$this->mProducts[$i]['attributes'] =
Catalog::GetProductAttributes($this->mProducts[$i]['product_id']);
}
}
}
?>
Файл first_page_contents.tpl
{* first_page_contents.tpl *}
<pclass="description">
Добро пожаловать на сайт магазина женской одежды GoodStore!
<pclass="description">
По всем интересующим Вас вопросам, а так же вопросам
доставки и оплаты обращаться по электронному адресу администратора:
goodstore.shop@yandex.ru или по телефону 8-938-444-68-12
</p>
</p>
<p class="description">
Мы надеемся, вам понравится
наш ассортимент товаров!
Сейчас действуют скидки на зимние коллекции.
</p>
{include file="products_list.tpl"}
{* first_page_contents.tpl *}
{load_presentation_object filename="first_page_contents" assign="obj"}
<p class="description">
</p>
<p class="description">
</p>
<p>Доступ <ahref="{$obj->mLinkToAdmin}">к странице администрирования</a>.</p>
Файлproduct.tpl
{load_presentation_object filename="product" assign="obj"}
<h1 class="title">{$obj->mProduct.name}</h1>
{if $obj->mProduct.image}
<img class="product-image" src="{$obj->mProduct.image}"
alt="{$obj->mProduct.name} image" />
{/if}
{if $obj->mProduct.image_2}
<img class="product-image" src="{$obj->mProduct.image_2}"
alt="{$obj->mProduct.name} image 2" />
{/if}
<p class="description">{$obj->mProduct.description}</p>
<p class="section">
Цена:
{if $obj->mProduct.discounted_price != 0}
<span class="old-price">{$obj->mProduct.price}</span>
<span class="price">{$obj->mProduct.discounted_price}</span>
{else}
<span class="price">{$obj->mProduct.price}</span>
{/if}
</p>
{* Генерируем список значений атрибутов *}
<pclass="attributes">
{* Просматриваем список атрибутов и их значений *}
{section name=k loop=$obj->mProduct.attributes}
{* Генерируем новый тег select? *}
{if $smarty.section.k.first ||
$obj->mProduct.attributes[k].attribute_name !==
$obj->mProduct.attributes[k.index_prev].attribute_name}
{$obj->mProduct.attributes[k].attribute_name}:
<select name="attr_{$obj->mProduct.attributes[k].attribute_name}">
{/if}
{* Генерируем новый тег option *}
<option value="{$obj->mProduct.attributes[k].attribute_value}">
{$obj->mProduct.attributes[k].attribute_value}
</option>
{* Закрываем тег select? *}
{if $smarty.section.k.last ||
$obj->mProduct.attributes[k].attribute_name !==
$obj->mProduct.attributes[k.index_next].attribute_name}
</select>
{/if}
{/section}
</p>
{* Добавляем кнопку для отправки формы *}
<p>
<input type="submit" name="submit" value="Добавить в корзину" />
</p>
</form>
{if $obj->mLinkToContinueShopping}
<a href="{$obj->mLinkToContinueShopping}">Продолжить покупки</a>
{/if}
{*<h2>Find similar products in our catalog:</h2>*}
<ol>
{section name=i loop=$obj->mLocations}
<li class="navigation">
{strip}
<a href="{$obj->mLocations[i].link_to_department}">
{$obj->mLocations[i].department_name}
</a>
{/strip}
»
{strip}
<a href="{$obj->mLocations[i].link_to_category}">
{$obj->mLocations[i].category_name}
</a>
{/strip}
</li>
{/section}
</ol>
Файлproduct.php
<?php
// Отвечает за отображение подробных сведений о товаре
classProduct
{
// Public-переменные для использования в шаблоне Smarty
public $mProduct;
public $mProductLocations;
public $mLinkToContinueShopping;
public $mLocations;
// Private-переменная
private $_mProductId;
// Конструктор класса
public function __construct()
{
// Инициализация переменной
if (isset ($_GET['ProductId']))
$this->_mProductId = (int)$_GET['ProductId'];
else
trigger_error('ProductId not set');
}
publicfunctioninit()
{
// Получаем сведения о товаре из уровня логики приложения
$this->mProduct = Catalog::GetProductDetails($this->_mProductId);
if (isset ($_SESSION['link_to_continue_shopping']))
{
$continue_shopping = Link::QueryStringToArray($_SESSION['link_to_continue_shopping'];
$page = 1;
if (isset ($continue_shopping['Page']))
$page = (int)$continue_shopping['Page'];
if (isset ($continue_shopping['CategoryId']))
$this->mLinkToContinueShopping = Link::ToCategory((int)$continue_shopping['DepartmentId'], (int)$continue_shopping['CategoryId'], $page);
elseif (isset ($continue_shopping['DepartmentId']))
$this->mLinkToContinueShopping = Link::ToDepartment((int)$continue_shopping['DepartmentId'], $page);
elseif (isset ($continue_shopping['SearchResults']))
$this->mLinkToContinueShopping =
Link::ToSearchResults(
trim(str_replace('-', ' ',$continue_shopping['SearchString'])),
$continue_shopping['AllWords'], $page);
else
$this->mLinkToContinueShopping = Link::ToIndex($page);
}
if ($this->mProduct['image'])
$this->mProduct['image'] =
Link::Build('product_images/' . $this->mProduct['image']);
if ($this->mProduct['image_2'])
$this->mProduct['image_2'] =
Link::Build('product_images/' . $this->mProduct['image_2']);
$this->mProduct['attributes'] =
Catalog::GetProductAttributes($this->mProduct['product_id']); $this->mLocations = Catalog::GetProductLocations($this->_mProductId);
// Генерируем ссылку Add to Cart
$this->mProduct['link_to_add_product'] =
Link::ToAddProduct($this->_mProductId);
// Генерируем ссылки на страницы отдела и категории
for ($i = 0; $i < count($this->mLocations); $i++)
{
$this->mLocations[$i]['link_to_department'] =
Link::ToDepartment($this->mLocations[$i]['department_id']);
$this->mLocations[$i]['link_to_category'] =
Link::ToCategory($this->mLocations[$i]['department_id'],
$this->mLocations[$i]['category_id']);
}
}
}
?>
Файлfirst_page_contents.php
<?php
class FirstPageContents
{
public $mLinkToAdmin;
public function __construct()
{
$this->mLinkToAdmin = Link::ToAdmin();
}
}
?>
Файл admin.php
<?php
// Запускаем сеанс
session_start();
// Создаем буфер вывода
ob_start();
// Включаемвспомогательныефайлы
require_once 'include/config.php';
require_once BUSINESS_DIR . 'error_handler.php';
// Задаем обработчик ошибок
ErrorHandler::SetHandler();
// Загружаемшаблонстраницыприложения
require_once PRESENTATION_DIR . 'application.php';
require_once PRESENTATION_DIR . 'link.php';
// Загружаем дескриптор базы данных
require_once BUSINESS_DIR . 'database_handler.php';
// Загружаем код уровня логики приложения
require_once BUSINESS_DIR . 'catalog.php';
// Загружаем файл шаблона Smarty
$application = new Application();
// Отображаем страницу
$application->display('store_admin.tpl');
// Закрываем соединение с базой данных
DatabaseHandler::Close();
// Выводим содержимое буфера
flush();
ob_flush();
ob_end_clean();
?>
Файл store_admin.tpl
{load_presentation_object filename="store_admin" assign="obj"}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Demo Store Admin from Beginning PHP and MySQL E-Commerce</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="{$obj->mSiteUrl}styles/goodstore.css" type="text/css"
rel="stylesheet" />
</head>
<body>
<div id="doc" class="yui-t7">
<div id="bd">
<div class="yui-g">
{include file=$obj->mMenuCell}
</div>
<div class="yui-g">
{include file=$obj->mContentsCell}
</div>
</div>
</div>
</body>
</html>
Файл store_admin.php
<?php
class StoreAdmin
{
public $mSiteUrl;
// Определяем файл шаблона для меню
public $mMenuCell = 'blank.tpl';
// Определяем файл шаблона для содержимого страницы
public $mContentsCell = 'blank.tpl';
// Конструктор класса
public function __construct()
{
$this->mSiteUrl = Link::Build('', 'https');
// Разрешаем доступ к этой странице только через HTTPS,
// если USE_SSL установлена в значение yes
if (USE_SSL == 'yes' && getenv('HTTPS') != 'on')
{
header ('Location: https://' . getenv('SERVER_NAME') .
getenv('REQUEST_URI'));
exit();
}
}
public function init()
{
// Если аутентификация не выполнялась, загружаем шаблон admin_login
if (!(isset ($_SESSION['admin_logged'])) ||
$_SESSION['admin_logged'] != true)
$this->mContentsCell = 'admin_login.tpl';
else
{
// Если аутентификация проведена, загружаем
// меню страницы администрирования
$this->mMenuCell = 'admin_menu.tpl';
// При выходе...
if (isset ($_GET['Page']) && ($_GET['Page'] == 'Logout'))
{
unset($_SESSION['admin_logged']);
header('Location: ' . Link::ToAdmin());
exit();
}
// Если значение Page не задано явно, подразумеваем страницу Departments
$admin_page = isset ($_GET['Page']) ? $_GET['Page'] : 'Departments';
// Выбираем, какую страницу администрирования загружать...
if ($admin_page == 'Departments')
$this->mContentsCell = 'admin_departments.tpl';
elseif ($admin_page == 'Categories')
$this->mContentsCell = 'admin_categories.tpl';
elseif ($admin_page == 'Attributes')
$this->mContentsCell = 'admin_attributes.tpl';
elseif ($admin_page == 'AttributeValues')
$this->mContentsCell = 'admin_attribute_values.tpl';
elseif ($admin_page == 'Products')
$this->mContentsCell = 'admin_products.tpl';
elseif ($admin_page == 'ProductDetails')
$this->mContentsCell = 'admin_product_details.tpl';
}
}
}
?>
Файл admin_login.tpl
{* admin_login.tpl *}
{load_presentation_object filename="admin_login" assign="obj"}
<div class="login">
<p class="login-title">Войти в Goodstore</p>
<form method="post" action="{$obj->mLinkToAdmin}">
<p>
Введите данные для входа или вернитесь назад
<a href="{$obj->mLinkToIndex}">в магазин</a>.
</p>
{if $obj->mLoginMessage neq ""}
<p class="error">{$obj->mLoginMessage}</p>
{/if}
<p>
<label for="username">Логин:</label>
<input type="text" name="username" size="35" value="{$obj->mUsername}" />
</p>
<p>
<label for="password">Пароль:</label>
<input type="password" name="password" size="35" value="" />
</p>
<p>
<input type="submit" name="submit" value="Войти" />
</p>
</form>
</div>
Файл admin_login.php
<?php
// Класс, отвечающий за аутентификацию администраторов
classAdminLogin
{
// Public-переменные, доступные в шаблонах Smarty
public $mUsername;
public $mLoginMessage = '';
public $mLinkToAdmin;
public $mLinkToIndex;
// Конструктор класса
publicfunction __construct()
{
// Проверяем правильность ввода идентификатора пользователя и пароля
if (isset ($_POST['submit']))
{
if ($_POST['username'] == ADMIN_USERNAME
&& $_POST['password'] == ADMIN_PASSWORD)
{
$_SESSION['admin_logged'] = true;
header('Location: ' . Link::ToAdmin());
exit();
}
else
{
$this->mLoginMessage = 'Войти не удалось, пожалуйста, попробуйте еще раз:';
}
$this->mLinkToAdmin = Link::ToAdmin();
$this->mLinkToIndex = Link::ToIndex();
}
}
}
?>
Файлadmin_menu.tpl
{* admin_menu.tpl *}
{load_presentation_object filename="admin_menu" assign="obj"}
<h1>Администрирование Goodstore</h1>
<p> |
<a href="{$obj->mLinkToStoreAdmin}">АДМИНИСТРИРОВАНИЕ КАТАЛОГА</a> |
<a href="{$obj->mLinkToAttributesAdmin}">АДМИНИСТРИРОВАНИЕ АТРИБУТОВ ТОВАРОВ</a> |
<a href="{$obj->mLinkToStoreFront}">ВИТРИНА</a> |
<a href="{$obj->mLinkToLogout}">ВЫЙТИ</a> |
</p>
Файлadmin_menu.php
<?php
class AdminMenu
{
public $mLinkToStoreAdmin;
public $mLinkToAttributesAdmin;
public $mLinkToStoreFront;
public $mLinkToLogout;
public function __construct()
{
$this->mLinkToStoreAdmin = Link::ToAdmin();
$this->mLinkToAttributesAdmin = Link::ToAttributesAdmin();
$this->mLinkToStoreFront = Link::ToIndex();
$this->mLinkToLogout = Link::ToLogout();
}
}
?>
Файл admin_departments.tpl
{* admin_departments.tpl *}
{load_presentation_object filename="admin_departments" assign="obj"}
<form method="post"
action="{$obj->mLinkToDepartmentsAdmin}">
<h3>Редактировать отделы Goodstore:</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
{if $obj->mDepartmentsCount eq 0}
<p class="no-items-found">В вашей базе данных нет отделов!</p>
{else}
<table class="tss-table">
<tr>
<thwidth="200">Название отдела</th>
<th>Описание отдела</th>
<th width="240"> </th>
</tr>
{section name=i loop=$obj->mDepartments}
{if $obj->mEditItem == $obj->mDepartments[i].department_id}
<tr>
<td>
<input type="text" name="name"
value="{$obj->mDepartments[i].name}" size="30" />
</td>
<td>
{strip}
<textarea name="description" rows="3" cols="60">
{$obj->mDepartments[i].description}
</textarea>
{/strip}
</td>
<td>
<input type="submit"
name="submit_edit_cat_{$obj->mDepartments[i].department_id}"
value="Редактировать категорию" />
<inputtype="submit"
name="submit_update_dept_{$obj->mDepartments[i].department_id}"
value="Обновить" />
<input type="submit" name="cancel" value="Отменить" />
<input type="submit"
name="submit_delete_dept_{$obj->mDepartments[i].department_id}"
value="Удалить" />
</td>
</tr>
{else}
<tr>
<td>{$obj->mDepartments[i].name}</td>
<td>{$obj->mDepartments[i].description}</td>
<td>
<input type="submit"
name="submit_edit_cat_{$obj->mDepartments[i].department_id}"
value="Редактировать категорию" />
<inputtype="submit"
name="submit_edit_dept_{$obj->mDepartments[i].department_id}"
value="Редактировать отдел" />
<inputtype="submit"
name="submit_delete_dept_{$obj->mDepartments[i].department_id}"
value="Удалить" />
</td>
</tr>
{/if}
{/section}
</table>
{/if}
<h3>Добавить новый отдел:</h3>
<p>
<input type="text" name="department_name" value="[название]" size="30" />
<input type="text" name="department_description" value="[описание]"
size="60" />
<input type="submit" name="submit_add_dept_0" value="Добавить" />
</p>
</form>
Файлadmin_departments.php
<?php
// Класс, обеспечивающий функциональность администрирования отделов
class AdminDepartments
{
// Public-переменные, доступные в шаблоне Smarty
public $mDepartmentsCount;
public $mDepartments;
public $mErrorMessage;
public $mEditItem;
public $mLinkToDepartmentsAdmin;
// Private-переменные
private $_mAction;
private $_mActionedDepartmentId;
// Конструктор класса
publicfunction __construct()
{
// Просматриваем список переданных переменных
foreach ($_POST as $key => $value)
// При щелчке на кнопке отправки...
if (substr($key, 0, 6) == 'submit')
{
/* Получаем позицию последнего символа '_' из имени кнопки,
например, strrpos('submit_edit_dept_1', '_') вернет значение 17 */
$last_underscore = strrpos($key, '_');
/* Получаем область действия из имени кнопки
(например, 'edit_dep' из 'submit_edit_dept_1') */
$this->_mAction = substr($key, strlen('submit_'),
$last_underscore - strlen('submit_'));
/* Получаем идентификатор отдела, к которому относится нажатая кнопка(цифру в конце имени кнопки),например, '1' из 'submit_edit_dept_1' */
$this->_mActionedDepartmentId = substr($key, $last_underscore + 1);
break;
}
$this->mLinkToDepartmentsAdmin = Link::ToDepartmentsAdmin();
}
publicfunctioninit()
{
// При добавлении нового отдела...
if ($this->_mAction == 'add_dept')
{
$department_name = $_POST['department_name'];
$department_description = $_POST['department_description'];
if ($department_name == null)
$this->mErrorMessage = 'Department name required';
if ($this->mErrorMessage == null)
{
Catalog::AddDepartment($department_name, $department_description);
header('Location: ' . $this->mLinkToDepartmentsAdmin);
}
}
// При редактировании существующего отдела...
if ($this->_mAction == 'edit_dept')
$this->mEditItem = $this->_mActionedDepartmentId;
// При обновлении отдела...
if ($this->_mAction == 'update_dept')
{
$department_name = $_POST['name'];
$department_description = $_POST['description'];
if ($department_name == null)
$this->mErrorMessage = 'Department name required';
if ($this->mErrorMessage == null)
{
Catalog::UpdateDepartment($this->_mActionedDepartmentId,
$department_name, $department_description);
header('Location: ' . $this->mLinkToDepartmentsAdmin);
}
}
// При удалении отдела...
if ($this->_mAction == 'delete_dept')
{
$status = Catalog::DeleteDepartment($this->_mActionedDepartmentId);
if ($status < 0)
$this->mErrorMessage = 'Department not empty';
else
header('Location: ' . $this->mLinkToDepartmentsAdmin);
}
// При редактировании категорий отдела...
if ($this->_mAction == 'edit_cat')
{
header('Location: ' .
htmlspecialchars_decode(
Link::ToDepartmentCategoriesAdmin(
$this->_mActionedDepartmentId)));
exit();
}
// Загружаем список отделов
$this->mDepartments = Catalog::GetDepartmentsWithDescriptions();
$this->mDepartmentsCount = count($this->mDepartments);
}
}
?>
Файл admin_categories.tpl
{* admin_categories.tpl *}
{load_presentation_object filename="admin_categories" assign="obj"}
<form method="post"
action="{$obj->mLinkToDepartmentCategoriesAdmin}">
<h3>
Редактирование категорий для отдела: {$obj->mDepartmentName} [
<a href="{$obj->mLinkToDepartmentsAdmin}">вернуться к отделам ...</a>]
</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
{if $obj->mCategoriesCount eq 0}
<p class="no-items-found">Нет категорий в этом отделе!</p>
{else}
<table class="tss-table">
<tr>
<thwidth="200">Название категории</th>
<th>Описание категории</th>
<th width="240"> </th>
</tr>
{section name=i loop=$obj->mCategories}
{if $obj->mEditItem == $obj->mCategories[i].category_id}
<tr>
<td>
<input type="text" name="name"
value="{$obj->mCategories[i].name}" size="30" />
</td>
<td>
{strip}
<textarea name="description" rows="3" cols="60">
{$obj->mCategories[i].description}
</textarea>
{/strip}
</td>
<td>
<input type="submit"
name="submit_edit_prod_{$obj->mCategories[i].category_id}"
value="Редактировать продукт" />
<inputtype="submit"
name="submit_update_cat_{$obj->mCategories[i].category_id}"
value="Обновить" />
<input type="submit" name="cancel" value="Отменить" />
<input type="submit"
name="submit_delete_cat_{$obj->mCategories[i].category_id}"
value="Удалить" />
</td>
</tr>
{else}
<tr>
<td>{$obj->mCategories[i].name}</td>
<td>{$obj->mCategories[i].description}</td>
<td>
<input type="submit"
name="submit_edit_cat_{$obj->mCategories[i].category_id}"
value="Редактировать" />
<input type="submit"
name="submit_edit_prod_{$obj->mCategories[i].category_id}"
value="Редактировать продукт" />
<inputtype="submit"
name="submit_delete_cat_{$obj->mCategories[i].category_id}"
value="Удалить" />
</td>
</tr>
{/if}
{/section}
</table>
{/if}
<h3>Добавить новую категорию:</h3>
<input type="text" name="category_name" value="[название]" size="30" />
<input type="text" name="category_description" value="[описание]"
size="60" >
<input type="submit" name="submit_add_cat_0" value="Добавить" />
</form>
Файл admin_categories.php
<?php
// Класс, обеспечивающий администрирование категорий
classAdminCategories
{
// Public-переменные, доступные в шаблоне Smarty
public $mCategoriesCount;
public $mCategories;
public $mErrorMessage;
public $mEditItem;
public $mDepartmentId;
public $mDepartmentName;
public $mLinkToDepartmentsAdmin;
public $mLinkToDepartmentCategoriesAdmin;
// Private-переменные
private $_mAction;
private $_mActionedCategoryId;
// Конструктор класса
public function __construct()
{
if (isset ($_GET['DepartmentId']))
$this->mDepartmentId = (int)$_GET['DepartmentId'];
else
trigger_error('DepartmentId not set');
$department_details = Catalog::GetDepartmentDetails(
$this->mDepartmentId);
$this->mDepartmentName = $department_details['name'];
foreach ($_POST as $key => $value)
// При щелчке на кнопке...
if (substr($key, 0, 6) == 'submit')
{
/* Получаем позицию последнего символа '_' из имени нажатой
кнопки, например e.g strrpos('submit_edit_cat_1', '_') is 16 */
$last_underscore = strrpos($key, '_');
/* Узнаем тип нажатой кнопки
(например, 'edit_cat' из 'submit_edit_cat_1') */
$this->_mAction = substr($key, strlen('submit_'),
$last_underscore - strlen('submit_'));
/* Получаем идентификатор категории, для которой нажата кнопка
(номер в конце имени нажатой кнопки),
например, '1' из 'submit_edit_cat_1' */
$this->_mActionedCategoryId = (int)substr($key, $last_underscore + 1);
break;
}
$this->mLinkToDepartmentsAdmin = Link::ToDepartmentsAdmin();
$this->mLinkToDepartmentCategoriesAdmin =
Link::ToDepartmentCategoriesAdmin($this->mDepartmentId);
}
publicfunctioninit()
{
// При добавлении новой категории...
if ($this->_mAction == 'add_cat')
{
$category_name = $_POST['category_name'];
$category_description = $_POST['category_description'];
if ($category_name == null)
$this->mErrorMessage = 'Category name is empty';
if ($this->mErrorMessage == null)
{
Catalog::AddCategory($this->mDepartmentId, $category_name,
$category_description);
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToDepartmentCategoriesAdmin));
}
}
// При редактировании существующей категории...
if ($this->_mAction == 'edit_cat')
{
$this->mEditItem = $this->_mActionedCategoryId;
}
// При обновлении категории...
if ($this->_mAction == 'update_cat')
{
$category_name = $_POST['name'];
$category_description = $_POST['description'];
if ($category_name == null)
$this->mErrorMessage = 'Category name is empty';
if ($this->mErrorMessage == null)
{
Catalog::UpdateCategory($this->_mActionedCategoryId, $category_name,$category_description);
header('Location: ' .htmlspecialchars_decode(
$this->mLinkToDepartmentCategoriesAdmin));
}
}
// При удалении категории...
if ($this->_mAction == 'delete_cat')
{
$status = Catalog::DeleteCategory($this->_mActionedCategoryId);
if ($status < 0)
$this->mErrorMessage = 'Category not empty';
else
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToDepartmentCategoriesAdmin));
}
// При редактировании товаров из категории ...
if ($this->_mAction == 'edit_prod')
{
header('Location: ' .
htmlspecialchars_decode(
Link::ToCategoryProductsAdmin($this->mDepartmentId,
$this->_mActionedCategoryId)));
exit();
}
// Загружаем список категорий
$this->mCategories =
Catalog::GetDepartmentCategories($this->mDepartmentId);
$this->mCategoriesCount = count($this->mCategories);
}
}
?>
Файлadmin_attributes.tpl
{* admin_attributes.tpl *}
{load_presentation_object filename="admin_attributes" assign="obj"}
<form method="post"
action="{$obj->mLinkToAttributesAdmin}">
<h3>Редактирование атрибутов продуктов Goodstore:</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
{if $obj->mAttributesCount eq 0}
<p class="no-items-found">
Нет продуктов с атрибутами в базе данных!
</p>
{else}
<table class="tss-table">
<tr>
<th>Название атрибута</th>
<th width="240"> </th>
</tr>
{section name=i loop=$obj->mAttributes}
{if $obj->mEditItem == $obj->mAttributes[i].attribute_id}
<tr>
<td>
<input type="text" name="name"
value="{$obj->mAttributes[i].name}" size="30" />
</td>
<td>
<input type="submit"
name="submit_edit_attr_val_{$obj->mAttributes[i].attribute_id}"
value="Редактировать значение атрибута" />
<input type="submit"
name="submit_update_attr_{$obj->mAttributes[i].attribute_id}"
value="Обновить" />
<input type="submit" name="cancel" value="Отменить" />
<input type="submit"
name="submit_delete_attr_{$obj->mAttributes[i].attribute_id}"
value="Удалить" />
</td>
</tr>
{else}
<tr>
<td>{$obj->mAttributes[i].name}</td>
<td>
<input type="submit"
name="submit_edit_attr_{$obj->mAttributes[i].attribute_id}"
value="Редактироватьатрибут" />
<input type="submit"
name="submit_edit_val_{$obj->mAttributes[i].attribute_id}"
value="Редактировать значение атрибута" />
<input type="submit"
name="submit_delete_attr_{$obj->mAttributes[i].attribute_id}"
value="Удалить" />
</td>
</tr>
{/if}
{/section}
</table>
{/if}
<h3>Добавитьновыйатрибут:</h3>
<p>
<input type="text" name="attribute_name" value="[название]" size="30" />
<input type="submit" name="submit_add_attr_0" value="Добавить" />
</p>
</form>
Файл admin_attributes.php
<?php
// Класс, обеспечивающий администрирование атрибутов
classAdminAttributes
{
// Public-переменные, доступные в шаблоне Smarty
public $mAttributesCount;
public $mAttributes;
public $mErrorMessage;
public $mEditItem;
public $mLinkToAttributesAdmin;
// Private-переменные
private $_mAction;
private $_mActionedAttributeId;
// Конструктор класса
publicfunction __construct()
{
// Просматриваем список переданных переменных
foreach ($_POST as $key => $value)
// Если нажата кнопка отправки...
if (substr($key, 0, 6) == 'submit')
{
/* Получаем позицию последнего символа '_' из имени кнопки,
например, strrpos('submit_edit_attr_1', '_') вернет значение 17 */
$last_underscore = strrpos($key, '_');
/* Получаем область действия кнопки
(например, 'edit_attr' из 'submit_edit_attr_1') */
$this->_mAction = substr($key, strlen('submit_'),
$last_underscore - strlen('submit_'));
/* Получаем идентификатор атрибута, к которому относится кнопка
(номер в конце имени этой кнопки), например,
'1' из 'submit_edit_attr_1' */
$this->_mActionedAttributeId = substr($key, $last_underscore + 1);
break;
}
$this->mLinkToAttributesAdmin = Link::ToAttributesAdmin();
}
publicfunctioninit()
{
// При добавлении нового атрибута...
if ($this->_mAction == 'add_attr')
{
$attribute_name = $_POST['attribute_name'];
if ($attribute_name == null)
$this->mErrorMessage = 'Attribute name required';
if ($this->mErrorMessage == null)
{
Catalog::AddAttribute($attribute_name);
header('Location: ' . $this->mLinkToAttributesAdmin);
}
}
// При редактировании существующего атрибута...
if ($this->_mAction == 'edit_attr')
$this->mEditItem = $this->_mActionedAttributeId;
// При обновлении атрибута...
if ($this->_mAction == 'update_attr')
{
$attribute_name = $_POST['name'];
if ($attribute_name == null)
$this->mErrorMessage = 'Attribute name required';
if ($this->mErrorMessage == null)
{
Catalog::UpdateAttribute($this->_mActionedAttributeId,
$attribute_name);
header('Location: ' . $this->mLinkToAttributesAdmin);
}
}
// При удалении атрибута...
if ($this->_mAction == 'delete_attr')
{
$status = Catalog::DeleteAttribute($this->_mActionedAttributeId);
if ($status < 0)
$this->mErrorMessage =
'Attribute has one or more values and cannot be deleted';
else
header('Location: ' . $this->mLinkToAttributesAdmin);
}
// При редактировании значений атрибута...
if ($this->_mAction == 'edit_val')
{
header('Location: ' .
htmlspecialchars_decode(
Link::ToAttributeValuesAdmin(
$this->_mActionedAttributeId)));
exit();
}
// Загружаем список атрибутов
$this->mAttributes = Catalog::GetAttributes();
$this->mAttributesCount = count($this->mAttributes);
}
}
?>
Файл admin_attribute_values.tpl
{* admin_attribute_values.tpl *}
{load_presentation_object filename="admin_attribute_values" assign="obj"}
<form method="post"
action="{$obj->mLinkToAttributeValuesAdmin}">
<h3>
Редактирование значений атрибутов: {$obj->mAttributeName} [
<ahref="{$obj->mLinkToAttributesAdmin}">вернуться к атрибутам ...</a> ]
</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
{if $obj->mAttributeValuesCount eq 0}
<p class="no-items-found">Нет значений у атрибута!</p>
{else}
<table class="tss-table">
<tr>
<th>Значение атрибута</th>
<th width="170"> </th>
</tr>
{section name=i loop=$obj->mAttributeValues}
{if $obj->mEditItem == $obj->mAttributeValues[i].attribute_value_id}
<tr>
<td>
<input type="text" name="value"
value="{$obj->mAttributeValues[i].value}" size="30" />
</td>
<td>
<input type="submit"
name="submit_update_val_{$obj->mAttributeValues[i].attribute_value_id}" value="Обновить" />
<input type="submit" name="cancel" value="Отменить" />
<input type="submit" name="submit_delete_val_{$obj->mAttributeValues[i].attribute_value_id}" value="Удалить" />
</td>
</tr>
{else}
<tr>
<td>{$obj->mAttributeValues[i].value}</td>
<td>
<input type="submit" name="submit_edit_val_{$obj->mAttributeValues[i].attribute_value_id}" value="Редактировать" />
<input type="submit" name="submit_delete_val_{$obj->mAttributeValues[i].attribute_value_id}" value="Удалить" />
</td>
</tr>
{/if}
{/section}
</table>
{/if}
<h3>Добавить новое значение атрибута:</h3>
<input type="text" name="attribute_value" value="[значение]" size="30" />
<input type="submit" name="submit_add_val_0" value="Добавить" />
</form>
Файл admin_attribute_values.php
<?php
// Класс, обеспечивающий администрирование значений атрибутов
class AdminAttributeValues
{
// Public-переменные, доступные в шаблоне Smarty
public $mAttributeValuesCount;
public $mAttributeValues;
public $mErrorMessage;
public $mEditItem;
public $mAttributeId;
public $mAttributeName;
public $mLinkToAttributeAdmin;
public $mLinkToAttributeValuesAdmin;
// Private-переменные
private $_mAction;
private $_mActionedAttributeValueId;
// Конструктор класса
public function __construct()
{
if (isset ($_GET['AttributeId']))
$this->mAttributeId = (int)$_GET['AttributeId'];
else
trigger_error('AttributeId not set');
$attribute_details = Catalog::GetAttributeDetails
($this->mAttributeId);
$this->mAttributeName = $attribute_details['name'];
foreach ($_POST as $key => $value)
// Если нажата кнопка отправки...
if (substr($key, 0, 6) == 'submit')
{
/* Получаем позицию последнего символа '_' из имени кнопки,например, strrpos('submit_edit_val_1', '_') вернет значение 16*/
$last_underscore = strrpos($key, '_');
/* Получаем область действия кнопки
(например, 'edit_cat' from 'submit_edit_val_1') */
$this->_mAction = substr($key, strlen('submit_'),
$last_underscore - strlen('submit_'));
/* Получаем идентификатор значения атрибута, к которому
относилась нажатая кнопка (номер в конце имени кнопки),
например, '1' из 'submit_edit_val_1' */
$this->_mActionedAttributeValueId =
(int)substr($key, $last_underscore + 1);
break;
}
$this->mLinkToAttributesAdmin = Link::ToAttributesAdmin();
$this->mLinkToAttributeValuesAdmin =
Link::ToAttributeValuesAdmin($this->mAttributeId);
}
publicfunctioninit()
{
// При добавлении нового значения атрибута...
if ($this->_mAction == 'add_val')
{
$attribute_value = $_POST['attribute_value'];
if ($attribute_value == null)
$this->mErrorMessage = 'Attribute value is empty';
if ($this->mErrorMessage == null)
{
Catalog::AddAttributeValue($this->mAttributeId, $attribute_value);
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToAttributeValuesAdmin));
}
}
// При редактировании существующего значения атрибута...
if ($this->_mAction == 'edit_val')
{
$this->mEditItem = $this->_mActionedAttributeValueId;
}
// При обновлении значения атрибута...
if ($this->_mAction == 'update_val')
{
$attribute_value = $_POST['value'];
if ($attribute_value == null)
$this->mErrorMessage = 'Attribute value is empty';
if ($this->mErrorMessage == null)
{
Catalog::UpdateAttributeValue(
$this->_mActionedAttributeValueId, $attribute_value);
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToAttributeValuesAdmin));
}
}
// При удалении значения атрибута...
if ($this->_mAction == 'delete_val')
{
$status =
Catalog::DeleteAttributeValue($this->_mActionedAttributeValueId);
if ($status < 0)
$this->mErrorMessage = 'Cannot delete this attribute value. ' .'One or more products are using it!';
else
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToAttributeValuesAdmin));
}
// Загружаем список значений атрибута
$this->mAttributeValues =
Catalog::GetAttributeValues($this->mAttributeId);
$this->mAttributeValuesCount = count($this->mAttributeValues);
}
}
?>
Файлadmin_products.tpl
{* admin_products.tpl *}
{load_presentation_object filename="admin_products" assign="obj"}
<form method="post"
action="{$obj->mLinkToCategoryProductsAdmin}">
<h3>
Редактирование продуктов: {$obj->mCategoryName} [
<a href="{$obj->mLinkToDepartmentCategoriesAdmin}">
вернутьсяккатегориям ...</a> ]
</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
{if $obj->mProductsCount eq 0}
<p class="no-items-found">Нетпродуктоввэтойкатегории!</p>
{else}
<table class="tss-table">
<tr>
<th>Название</th>
<th>Описание</th>
<th>Цена</th>
<th>Скидка</th>
<th width="80"> </th>
</tr>
{section name=i loop=$obj->mProducts}
<tr>
<td>{$obj->mProducts[i].name}</td>
<td>{$obj->mProducts[i].description}</td>
<td>{$obj->mProducts[i].price}</td>
<td>{$obj->mProducts[i].discounted_price}</td>
<td>
<input type="submit"
name="submit_edit_prod_{$obj->mProducts[i].product_id}"
value="Редактировать" />
</td>
</tr>
{/section}
</table>
{/if}
<h3>Добавить новый продукт:</h3>
<input type="text" name="product_name" value="[название]" size="30" />
<input type="text" name="product_description" value="[описание]"
size="60" />
<input type="text" name="product_price" value="[цена]" size="10" />
<input type="submit" name="submit_add_prod_0" value="Добавить" />
</form>
Файлadmin_products.php
<?php
// Класс, отвечающий за администрирование товаров категории
classAdminProducts
{
// Public-переменные, доступные в шаблоне Smarty
public $mProductsCount;
public $mProducts;
public $mErrorMessage;
public $mDepartmentId;
public $mCategoryId;
public $mCategoryName;
public $mLinkToDepartmentCategoriesAdmin;
public $mLinkToCategoryProductsAdmin;
// Private-переменные
private $_mAction;
private $_mActionedProductId;
// Конструктор класса
public function __construct()
{
if (isset ($_GET['DepartmentId']))
$this->mDepartmentId = (int)$_GET['DepartmentId'];
else
trigger_error('DepartmentId not set');
if (isset ($_GET['CategoryId']))
$this->mCategoryId = (int)$_GET['CategoryId'];
else
trigger_error('CategoryId not set');
$category_details = Catalog::GetCategoryDetails($this->mCategoryId);
$this->mCategoryName = $category_details['name'];
foreach ($_POST as $key => $value)
// Если нажата кнопка отправки...
if (substr($key, 0, 6) == 'submit')
{
/* Получаем позицию последнего символа '_' из имени кнопки,
например, strrpos('submit_edit_prod_1', '_') вернет значение 17 */
$last_underscore = strrpos($key, '_');
/* Получаем область действия кнопки
(например, 'edit_prod' из 'submit_edit_prod_1') */
$this->_mAction = substr($key, strlen('submit_'),
$last_underscore - strlen('submit_'));
/* Получаем идентификатор атрибута, к которому относится кнопка
(номер в конце имени этой кнопки), например,
'1' из 'submit_edit_prod_1' */
$this->_mActionedProductId = (int)substr($key, $last_underscore + 1);
break;
}
$this->mLinkToDepartmentCategoriesAdmin =
Link::ToDepartmentCategoriesAdmin($this->mDepartmentId);
$this->mLinkToCategoryProductsAdmin =
Link::ToCategoryProductsAdmin($this->mDepartmentId,
$this->mCategoryId);
}
public function init()
{
// При добавлении нового товара...
if ($this->_mAction == 'add_prod')
{
$product_name = $_POST['product_name'];
$product_description = $_POST['product_description'];
$product_price = $_POST['product_price'];
if ($product_name == null)
$this->mErrorMessage = 'Product name is empty';
if ($product_description == null)
$this->mErrorMessage = 'Product description is empty';
if ($product_price == null || !is_numeric($product_price))
$this->mErrorMessage = 'Product price must be a number!';
if ($this->mErrorMessage == null)
{
Catalog::AddProductToCategory($this->mCategoryId, $product_name,
$product_description, $product_price);
header('Location: ' .htmlspecialchars_decode(
$this->mLinkToCategoryProductsAdmin));
}
}
// Еслимыхотимпросмотретьсведенияотоваре
if ($this->_mAction == 'edit_prod')
{
header('Location: ' .
htmlspecialchars_decode(
Link::ToProductAdmin($this->mDepartmentId,
$this->mCategoryId,
$this->_mActionedProductId)));
exit();
}
$this->mProducts = Catalog::GetCategoryProducts($this->mCategoryId);
$this->mProductsCount = count($this->mProducts);
}
}
?>
Файлadmin_product_details.tpl
{* admin_product_details.tpl *}
{load_presentation_object filename="admin_product_details" assign="obj"}
<form enctype="multipart/form-data" method="post"
action="{$obj->mLinkToProductDetailsAdmin}">
<h3>
Редактирование товара: ID #{$obj->mProduct.product_id} —
{$obj->mProduct.name} [
<a href="{$obj->mLinkToCategoryProductsAdmin}">
вернуться к товарам ...</a> ]
</h3>
{if $obj->mErrorMessage}<p class="error">{$obj->mErrorMessage}</p>{/if}
<table class="borderless-table">
<tbody>
<tr>
<td valign="top">
<p class="bold-text">
Название товара:
</p>
<p>
<input type="text" name="name"
value="{$obj->mProduct.name}" size="30" />
</p>
<p class="bold-text">
Описание товара:
</p>
<p>
{strip}
<textarea name="description" rows="3" cols="60">
{$obj->mProduct.description}
</textarea>
{/strip}
</p>
<p class="bold-text">
Цена:
</p>
<p>
<input type="text" name="price"
value="{$obj->mProduct.price}" size="5" />
</p>
<p class="bold-text">
Скидка:
</p>
<p>
<input type="text" name="discounted_price"
value="{$obj->mProduct.discounted_price}" size="5" />
</p>
<p>
<input type="submit" name="UpdateProductInfo"
value="Обновить" />
</p>
</td>
<td valign="top">
<p>
<fontclass="bold-text">Товар относится к категории:</font>
{$obj->mProductCategoriesString}
</p>
<p class="bold-text">
Удалить этот товар:
</p>
<p>
{html_options name="TargetCategoryIdRemove"
options=$obj->mRemoveFromCategories}
<input type="submit" name="RemoveFromCategory" value="Удалить"
{if $obj->mRemoveFromCategoryButtonDisabled}
disabled="disabled" {/if}/>
</p>
<p class="bold-text">
Отправить товар в эту категорию:
</p>
<p>
{html_options name="TargetCategoryIdAssign"
options=$obj->mAssignOrMoveTo}
<input type="submit" name="Assign" value="Отправить" />
</p>
<p class="bold-text">
Переместить товар этой категории:
</p>
<p>
{html_options name="TargetCategoryIdMove"
options=$obj->mAssignOrMoveTo}
<input type="submit" name="Move" value="Переместить" />
<input type="submit" name="RemoveFromCatalog"
value="Удалить товар из каталога"
{if !$obj->mRemoveFromCategoryButtonDisabled}
disabled="disabled" {/if}/>
</p>
{if $obj->mProductAttributes}
<p class="bold-text">
Атрибуты товара:
</p>
<p>
{html_options name="TargetAttributeValueIdRemove"
options=$obj->mProductAttributes}
<input type="submit" name="RemoveAttributeValue"
value="Удалить" />
</p>
{/if}
{if $obj->mCatalogAttributes}
<pclass="bold-text">
Связать атрибут товара:
</p>
<p>
{html_options name="TargetAttributeValueIdAssign"
options=$obj->mCatalogAttributes}
<input type="submit" name="AssignAttributeValue"
value="Связать" />
</p>
{/if}
<p class="bold-text">
Установить параметр отображения для данного товара:
</p>
<p>
{html_options name="ProductDisplay"
options=$obj->mProductDisplayOptions
selected=$obj->mProduct.display}
<input type="submit" name="SetProductDisplayOption" value="Установить" />
</p>
</td>
</tr>
</tbody>
</table>
<p>
<font class="bold-text">Название изображения:</font> {$obj->mProduct.image}
<input name="ImageUpload" type="file" value="Загрузить" />
<input type="submit" name="Upload" value="Загрузить" />
</p>
{if $obj->mProduct.image}
<p>
<img src="product_images/{$obj->mProduct.image}"
border="0" alt="{$obj->mProduct.name} image" />
</p>
{/if}
<p>
<font class="bold-text">Название изображения 2:</font> {$obj->mProduct.image_2}
<input name="Image2Upload" type="file" value="Загрузить" />
<input type="submit" name="Upload" value="Загрузить" />
</p>
{if $obj->mProduct.image_2}
<p>
<img src="product_images/{$obj->mProduct.image_2}"
border="0" alt="{$obj->mProduct.name} image 2" />
</p>
{/if}
<p>
<font class="bold-text">Уменьшенное изображение:</font> {
$obj->mProduct.thumbnail}
<input name="ThumbnailUpload" type="file" value="Загрузить" />
<input type="submit" name="Upload" value="Загрузить" />
</p>
{if $obj->mProduct.thumbnail}
<p>
<img src="product_images/{$obj->mProduct.thumbnail}"
border="0" alt="{$obj->mProduct.name} thumbnail" />
</p>
{/if}
</form>
Файлadmin_product_details.php
<?php
// Класс, отвечающий за администрирование сведений о товарах
class AdminProductDetails
{
// Public-элементы
public $mProduct;
public $mErrorMessage;
public $mProductCategoriesString;
public $mProductDisplayOptions;
public $mProductAttributes;
public $mCatalogAttributes;
public $mAssignOrMoveTo;
public $mRemoveFromCategories;
public $mRemoveFromCategoryButtonDisabled = false;
public $mLinkToCategoryProductsAdmin;
public $mLinkToProductDetailsAdmin;
// Private-элементы
private $_mProductId;
private $_mCategoryId;
private $_mDepartmentId;
// Конструктор класса
public function __construct()
{
// В строке запроса должен присутствовать DepartmentId
if (!isset ($_GET['DepartmentId']))
trigger_error('DepartmentId not set');
else
$this->_mDepartmentId = (int)$_GET['DepartmentId'];
// В строке запроса должен присутствовать CategoryId
if (!isset ($_GET['CategoryId']))
trigger_error('CategoryId not set');
else
$this->_mCategoryId = (int)$_GET['CategoryId'];
// В строке запроса должен присутствовать ProductId
if (!isset ($_GET['ProductId']))
trigger_error('ProductId not set');
else
$this->_mProductId = (int)$_GET['ProductId'];
$this->mProductDisplayOptions = Catalog::$mProductDisplayOptions;
$this->mLinkToCategoryProductsAdmin =
Link::ToCategoryProductsAdmin($this->_mDepartmentId,
$this->_mCategoryId);
$this->mLinkToProductDetailsAdmin =Link::ToProductAdmin
($this->_mDepartmentId,
$this->_mCategoryId,
$this->_mProductId);
}
public function init()
{
// При загрузке изображения товара...
if (isset ($_POST['Upload']))
{
/* Проверяем, есть ли доступ на запись в папку product_images */
if (!is_writeable(SITE_ROOT . '/product_images/'))
{
echo "Can't write to the product_images folder";
exit();
}
// Если код ошибки - 0, файл успешно загружен
if ($_FILES['ImageUpload']['error'] == 0)
{
/* ИспользуемфункциюPHPmove_uploaded_fileдляперемещения
загруженного файла из временной папки в папку product_images */
move_uploaded_file($_FILES['ImageUpload']['tmp_name'],
SITE_ROOT . '/product_images/' .
$_FILES['ImageUpload']['name']);
// Обновляем информацию о товаре в базе данных
Catalog::SetImage($this->_mProductId,
$_FILES['ImageUpload']['name']);
}
// Если код ошибки - 0, файл успешно загружен
if ($_FILES['Image2Upload']['error'] == 0)
{
/* ИспользуемфункциюPHPmove_uploaded_fileдляперемещения
загруженного файла из временной папки в папку product_images */
move_uploaded_file($_FILES['Image2Upload']['tmp_name'],
SITE_ROOT . '/product_images/' .
$_FILES['Image2Upload']['name']);
// Обновляем информацию о товаре в базе данных
Catalog::SetImage2($this->_mProductId,
$_FILES['Image2Upload']['name']);
}
// Если код ошибки - 0, файл успешно загружен
if ($_FILES['ThumbnailUpload']['error'] == 0)
{
// Перемещаем загруженный файл в папку product_images
move_uploaded_file($_FILES['ThumbnailUpload']['tmp_name'],
SITE_ROOT . '/product_images/' .
$_FILES['ThumbnailUpload']['name']);
// Обновляем информацию о товаре в базе данных
Catalog::SetThumbnail($this->_mProductId,
$_FILES['ThumbnailUpload']['name']);
}
}
// При обновлении информации о товаре...
if (isset ($_POST['UpdateProductInfo']))
{
$product_name = $_POST['name'];
$product_description = $_POST['description'];
$product_price = $_POST['price'];
$product_discounted_price = $_POST['discounted_price'];
if ($product_name == null)
$this->mErrorMessage = 'Product name is empty';
if ($product_description == null)
$this->mErrorMessage = 'Product description is empty';
if ($product_price == null || !is_numeric($product_price))
$this->mErrorMessage = 'Product price must be a number!';
if ($product_discounted_price == null ||
!is_numeric($product_discounted_price))
$this->mErrorMessage = 'Product discounted price must be a number!';
if ($this->mErrorMessage == null)
Catalog::UpdateProduct($this->_mProductId, $product_name,
$product_description, $product_price, $product_discounted_price);
}
// При удалении товара из категории...
if (isset ($_POST['RemoveFromCategory']))
{
$target_category_id = $_POST['TargetCategoryIdRemove'];
$still_exists = Catalog::RemoveProductFromCategory(
$this->_mProductId, $target_category_id);
if ($still_exists == 0)
{
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToCategoryProductsAdmin));
exit();
}
}
// При задании режима отображения товара...
if (isset ($_POST['SetProductDisplayOption']))
{
$product_display = $_POST['ProductDisplay'];
Catalog::SetProductDisplayOption($this->_mProductId,
$product_display);
}
// При удалении товара из каталога...
if (isset ($_POST['RemoveFromCatalog']))
{
Catalog::DeleteProduct($this->_mProductId);
header('Location: ' .
htmlspecialchars_decode(
$this->mLinkToCategoryProductsAdmin));
exit();
}
// При зачислении товара в другую категорию...
if (isset ($_POST['Assign']))
{
$target_category_id = $_POST['TargetCategoryIdAssign'];
Catalog::AssignProductToCategory($this->_mProductId,
$target_category_id);
}
// При переносе товара в другую категорию...
if (isset ($_POST['Move']))
{
$target_category_id = $_POST['TargetCategoryIdMove'];
Catalog::MoveProductToCategory($this->_mProductId,
$this->_mCategoryId, $target_category_id);
header('Location: ' .
htmlspecialchars_decode(
Link::ToProductAdmin($this->_mDepartmentId,
$target_category_id,
$this->_mProductId)));
exit();
}
// При присвоении товару значения атрибута...
if (isset ($_POST['AssignAttributeValue']))
{
$target_attribute_value_id = $_POST['TargetAttributeValueIdAssign'];
Catalog::AssignAttributeValueToProduct($this->_mProductId, $target_attribute_value_id);
}
// При удалении значения атрибута из товара...
if (isset ($_POST['RemoveAttributeValue']))
{
$target_attribute_value_id = $_POST['TargetAttributeValueIdRemove'];
Catalog::RemoveProductAttributeValue($this->_mProductId, $target_attribute_value_id);
}
// Получаем информацию о товаре
$this->mProduct = Catalog::GetProductInfo($this->_mProductId);
$product_categories = Catalog::GetCategoriesForProduct(
$this->_mProductId);
$product_attributes =
Catalog::GetProductAttributes($this->_mProductId);
for ($i = 0; $i < count($product_attributes); $i++)
$this->mProductAttributes[
$product_attributes[$i]['attribute_value_id']] =
$product_attributes[$i]['attribute_name'] . ': ' .
$product_attributes[$i]['attribute_value'];
$catalog_attributes =
Catalog::GetAttributesNotAssignedToProduct($this->_mProductId);
for ($i = 0; $i < count($catalog_attributes); $i++)
$this->mCatalogAttributes[
$catalog_attributes[$i]['attribute_value_id']] =
$catalog_attributes[$i]['attribute_name'] . ': ' .
$catalog_attributes[$i]['attribute_value'];
if (count($product_categories) == 1)
$this->mRemoveFromCategoryButtonDisabled = true;
// Отображаем категории, к которым принадлежит товар
for ($i = 0; $i < count($product_categories); $i++)
$temp1[$product_categories[$i]['category_id']] =
$product_categories[$i]['name'];
$this->mRemoveFromCategories = $temp1;
$this->mProductCategoriesString = implode(', ', $temp1);
$all_categories = Catalog::GetCategories();
for ($i = 0; $i < count($all_categories); $i++)
$temp2[$all_categories[$i]['category_id']] =
$all_categories[$i]['name'];
$this->mAssignOrMoveTo = array_diff($temp2, $temp1);
}
}
?>
Приложение Б
Листинги SQL-запросов
Запрос 1
-- Creategoodstoreadminuser
GRANT ALL PRIVILEGES ON `goodstore`.*
TO 'goodstoreadmin'@'localhost' IDENTIFIED
BY 'goodstoreadmin'
WITH GRANT OPTION;
Запрос 2
-- Создаемтаблицуdepartment
CREATE TABLE `department` (
`department_id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`description` VARCHAR(1000),
PRIMARY KEY (`department_id`)
) ENGINE=MyISAM;
Запрос 3
-- Заполняемданнымитаблицуdepartment
INSERT INTO `departmen` (`departmen_id`, `name`, `description`) VALUES
(1, 'Одежда', 'Верхняя одежда, блузки, брюки, платья, юбки'),
(2, 'Обувь','Зимняя, осенняя, летняя'),
(3, 'Аксессуары', 'Сумки, шарфы, шапки');
Запрос 4
-- Созданиехранимойпроцедурыcatalog_get_departments_list
CREATE PROCEDURE catalog_get_departments_list()
BEGIN
SELECT department_id, name FROM department ORDER BY department_id;
END$$
Запрос 5
-- Создаемтаблицуcategory
CREATE TABLE `category`
( `category_id` INT NOT NULL AUTO_INCREMENT,
`department_id` INT NOT NULL,
`name` VARCHAR(100) NOT NULL,
`description` VARCHAR(1000),
PRIMARY KEY (`category_id`),
KEY `idx_category_department_id` (`department_id`)
) ENGINE=MyISAM;
Запрос 6
-- Заполняемтаблицуcategoryданными
INSERT INTO `category` (`category_id`, `department_id`, `name`,
`description`) VALUES
(1, 1, 'Верхняя одежда', 'Пуховики, пальто, ветровки'),
(2, 1, 'Блузки', 'Блузки, рубашки, футболки, толстовки'),
(3, 1, 'Брюки', 'Брюки, джинсы, шорты'),
(4, 1, 'Платья', 'Платья, сарафаны'),
(5, 1, 'Юбки', 'Юбка карандаш, мини, макси'),
(6, 2, 'Зимняя обувь', 'Сапоги, ботфорты'),
(7, 2, 'Осенняя обувь', 'Сапоги, ботильоны, ботинки, кеды на танкетке, ботфорты '),
(8, 2, 'Летняя обувь', 'Туфли, босоножки, балетки, сандалии, сланцы'),
(9, 2, 'Спортивная обувь', 'Кроссовки, кеды, кеды на танкетке'),
(10, 3, 'Сумки', 'Сумки, рюкзаки, клатчи'),
(11, 3, 'Шарфы', 'Теплые шарфы, легкие шарфы, хомуты'),
(12, 3, 'Шапки', 'Вязаные шапки, хомуты');
Подобные документы
CRM-системы: разновидности, проблемы реализации, их преимущества и недостатки. Критические характеристики CRM-систем для работы через Интернет (WEB-CRM). Разработка содержания и структуры WEB-сайта интренет-магазина "Vinil", создание схемы и базы данных.
курсовая работа [2,6 M], добавлен 19.05.2013Разработка интернет-магазина для реального заказчика. Проведение анализа и выбор интернет-технологий для разработки интернет-магазина. Проектирование предметной области. Разработка динамических web-страниц интернет-магазина, управляемых базой данных.
дипломная работа [1,7 M], добавлен 08.06.2013Изучение возможностей AllFusion ERwin Data Modeler и проектирование реляционной базы данных (БД) "Санатория" на основе методологии IDEF1x. Определение предметной области, основных сущностей базы, их первичных ключей и атрибутов и связи между ними.
лабораторная работа [197,5 K], добавлен 10.11.2009Понятие интернет-магазина, его виды и особенности организации. Создание графического контента для наполнения сайта-каталога, его логической и физической структуры. Понятие, объекты и происхождение авторского права, его регистрация и средства защиты.
дипломная работа [2,2 M], добавлен 22.08.2015Разработка интернет-магазина мужской и женской одежды и аксессуаров. Требования к техническим характеристикам сайта (трафик, надежность, безопасность). Выбор методов сопровождения интернет-магазина. Подключение интернет-магазина к платежным системам.
отчет по практике [2,9 M], добавлен 01.05.2015Применение серверной платформы Denwer и с CMS Opencart при создании сайта интернет-магазина электроники. Установка и настройка Denwer и Opencart. Русификация сайта на Opencart, создание системы отображения цен в рублях. Разработка функционала сайта.
практическая работа [985,3 K], добавлен 04.08.2015Теоретические и практические основы Web-программирования. Проблемы и перспективы Интернет-магазинов. Типы данных, используемые в PHP. Работа с базой данных. Особенности встраивания РНР кода. Схема работы Интернет-магазина. Язык Web-программирования РНР.
курсовая работа [3,8 M], добавлен 27.12.2012Создание базы данных для автоматизации электронного магазина по продаже шин в терминале ER моделирования. Построение логической и концептуальной модели базы данных. Её реализация в интерактивной среде Интернет. Расчет экономической эффективности магазина.
курсовая работа [4,5 M], добавлен 10.10.2012Анализ сравнения интернет-магазина и электронного магазина. Проектирование структуры web-сайта. Обработка заказа. Основное понятие языка php. Средства безопасности системного уровня приложения. Разработка структуры базы данных и структуры web-сайта.
курсовая работа [1,4 M], добавлен 31.03.2014Разработка и написание программного обеспечения для интернет-магазина по продаже свежих овощей в режиме "online". Функциональные требования, схема данных. Главная страница сайта, корзина, регистрация пользователя. Описание классов и файлов программы.
курсовая работа [1,2 M], добавлен 18.04.2013