Диплом: Использование сети Internet в коммерческих целях (на примере веб-сайта ООО «Якира»)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
86
<? require_once('pagingBar.php'); ?>
<? // добавление наименования изделия к "хлебным крошкам"
if(JRequest::getVar('add2bread')){
$pathway =& $mainframe->getPathway();
$pathway->addItem( $itName,
JURI::current().'?option=com_jCatalog&amp;itemNameID='.$itemNameID );
}?>
Контроллером для предоставления информации о каталоге изделий является
файл getItems.php. Листинг приведен ниже.
<?
defined('_JEXEC') or die('файл не найден'); // выполнение только из среды Joomla
require_once('defaults.php'); // инициализация сеанса и констант
// формирование строки SQL-запроса
$q0 = 'SELECT i.itemID, i.artikul, inm.itemName, i.dimension, i.weight, c.coatingName,
i.price, i.flName
FROM items AS i, itemnames AS inm, coating AS c
WHERE inm.itemNameID = i.itemNameID
AND i.coatingID = c.coatingID';
$itemNameID = JRequest::getVar('itemNameID');
if($itemNameID){
$q0 .= ' AND i.itemNameID='.$itemNameID;
}
$q0 .= ' ORDER BY inm.itemName';
/* Номер строки, с которой начинается выдача ответа на запрос, берется из
настроек компонента по умолчанию. Требуется для реализации пагинации */
$beg = JRequest::getVar('beg');
if(!$beg) $beg = 0;
/* количество строк, входящих в ответ на запрос. Для пагинации */
$rng = JRequest::getVar('rng');
if(!$rng) $rng = NUMROWS;
/* добавление в запрос ограничений на вывод результата */
$q = $q0.' LIMIT '.$beg.','.$rng;
/* отправка запроса к Mysql через интерфейс Joomla! */
$db = & JFactory::getDBO();
$db->setQuery($q,0);
$db->query();
/* получение ответа от СУБД */
$res = $db->loadObjectList();
$itName = $res[0]->itemName;
foreach($res as $row){ // Запрос на получение списка камней, входящих в изделие
$qjwls = "SELECT j.jewID, j.jewelName from jewels as j, item_jewel as ij where
j.jewID=ij.jewID and ij.itemID=".$row->itemID;
$db->setQuery($qjwls,0);
$db->query();
// получение списка камней, входящих в изделие
$row->curJwls = $db->loadObjectList();
$curPath = jCat_PHOT_ITEMS.$row->flName; // путь к фото изделия
if(is_dir($curPath)){
// получение списка графических файлов из папки фото изделия
$files = glob($curPath."/*{jpg,jpeg,JPG,JPEG,gif,GIF}", GLOB_BRACE);
// картинка для отображения в таблице каталога
87
$firstPic = array_shift($files);
if($firstPic){
if(is_dir($firstPic)) continue;
// получение размеров картинки и т.п.
$imgInfo = getimagesize($firstPic);
$H = 110; // высота картинки в таблице каталога
$imgH = $imgInfo[1];
// вычисление ширины картинки в таблице каталога
$ratio = $H/$imgH;
$imgW = $imgInfo[0] * $ratio;
/* составление строки информации о файле, включающей путь к
файлу, размеры для отображения и фактические размеры картинки*/
$row->flName = $row-
>flName.'/'.basename($firstPic).'|'.$imgW.'|'.$H.'|'.$imgInfo[0].'|'.$imgInfo[1];
}else $row->flName = JText::_('NOPHOT'); // при отсутствии файла
// список дополнительных фото изделия для просмотра
$morePictsStr = "";
foreach($files as $a=>$b){
$imgInfo = getimagesize($b);
$ratio = $imgInfo[0]/$imgInfo[1];
if($morePictsStr) $morePictsStr .= '|';
$morePictsStr .= $b."&".$ratio;
}
if($morePictsStr) $row->morePicts = $morePictsStr;
}
}
?>
Аналогично разработаны контроллеры для сохранения корзины на
сервере при перезагрузке страницы, получения информации о камнях и
гороскопах, передачи содержимого статических файлов и отправки e-mail
сообщений.
Б.2. Код файла init.js, где создаются глобальные переменные окна браузера,
необходимые для создания всплывающих окон.
// добавление в стандартный объект «String» языка Javascript метода trim,
// убирающего пробельные символы в начале и конце строки
String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g,'')};
var ordrForm = "ordrForm"; // имя файла с шаблоном формы для отправки заказа
var w_num = screen.width; // ширина экрана устройства
var h_num = screen.height; // высота экрана устройства
var ordBsktImgHdefault = 40; // высота контейнера изделия в ленточной корзине
var numCntW = 132; // ширина контейнера картинки в корзине
// картинки для каталога подготавливаются с соотношением сторон 4/3
var numCntH = (numCntW/4) * 3; // высота контейнера картинки в корзине
// определение, является ли браузер Internet Explorer или нет
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
88
var ordered = new Object(); // хранит информацию о текущем заказе
ordered.numItemNames = 0; // количество изделий в заказе
var Paths = new Object; // пути к папкам фотографий
Paths.photitems = './photos/items/'; // папка с фотографиями изделий
Paths.photjewels = './photos/jewels/'; // папка с фотографиями камней
Paths.photgarnitures = './photos/garnitures/'; // папка с фотографиями гарнитуров
Paths.imgs = './images/'; // папка с прочими изображениями
var Titles = new Object(); // для отображения заголовков, надписей, логотипов и т.п.
Titles.contacts = "Контактная информация";
Titles.mailform = "Обратная связь";
Titles.payment = "Условия оплаты и доставки";
Titles.ordrForm = "Отправить заказ";
Titles.ordrCond = "Условия доставки";
Titles.rgrForm = "авторизация";
// функция для отображения / сокрытия подменю в меню «Каталог» и «Информация»
function showHideSubMenu(obj){
if(obj.lastChild.style.display == 'none'){ // если не отображается подменю
obj.lastChild.style.display = 'block';
// стили активных пунктов меню отличаются в меню «Каталог» и «Информация»
obj.className = (obj.id.indexOf('sub_letters') == -1) ? 'lihover' :
'lijletteractive';
}else{
obj.lastChild.style.display = 'none';
obj.className = (obj.id.indexOf('sub_letters') == -1) ? 'liout' : 'inlinelist'; }
}
Б.3. Основные функции библиотеки phots.js для работы с изображениями
/*Функция для отображения картинок в каталоге. Изначально каталог грузится с
объектами <img>, содержащими только текстовую информацию о пути к своей
картинке в атрибутах parentFolder и photPath, а после полной загрузки компонента
вызывается эта функция для отображения картинок. Это сделано для того, чтобы в
условиях плохой связи загрузка картинок не задерживала просмотр каталога.*/
function showPageImgs(){
$("img[photPath]").each(function(){ // для всех картинок с атрибутом photPath
/* инициализировать атрибут “srcзначением, полученным из атрибутов
parentFolder и photPath*/
$(this).attr("src",$(this).attr("parentFolder") + $(this).attr("photPath"));});
}
}
function createLargePhot(maxW, maxH, titl, contents, morePictsArr){ /* создание
увеличенной области просмотра окна */
var idStr = "DIV_pict"; /* id будущей области */
var container = $(idStr);
/*перед контентом для отображения вставляется шапка с заголовком и кнопкой
для закрытия окна*/
var myhtml = createExitBar(titl, 20, idStr) + contents;
89
var cntTop = (screen.height - maxH)/2 - 120; // положение окна по Y
if(!container.length){ // если такое окно еще не создано
$('<div/>',{ // создать всплывающее окно
class:"popup_visible",
id:idStr,
width:maxW + "px",
height:maxH + "px"
// добавить контент и поместить на страницу
}).html(myhtml).appendTo('body');
}
if(morePictsArr){ /*если передан массив имен дополнительных фото,
имеющихся в папке, соответствующей изделию*/
var smallH = 60; // высота миниатюры доп. фото
var smallW = 80; // ширина миниатюры доп. фото
cntTop -= smallH; // сдвиг всего окна вверх на высоту миниатюры
$(idStr).append($('<div/>',{ // добавление контейнера строки миниатюр
align:"center", // выравнивание миниатюр по центру
css: {
background: 'lightgray',
width: maxW + 'px',
height: (smallH + 5) + 'px',
// если миниатюр слишком много – будет прокрутка
overflow: 'auto'
}
}));
for(var i in morePictsArr){ // добавление миниатюр дополнительных фото
$('#' + idStr + ' div').append($('<img>',{
width:smallW,
height:smallH,
src: morePictsArr[i],
title:'увеличить',
css:{
cursor:'POINTER',
border: '2px solid white'
},
on:{ /*при щелчке по миниатюре вызывается функция,
помещающая фото миниатюры в основное окно и создающее миниатюру фото,
бывшего в основном окне до щелчка*/
click:function(event){
changePhot(this, maxW , smallH, idStr);
}
}
}));
}
}
}
Б.4. Фрагмент клиентского сценария для отображения соответствия камней
знакам Зодиака.
function getHorData(formID, fldVal){
90
if(!fldVal) return;
/*если данные передаются из форм определения соответствия камней и
знаков Зодиака, то эти данные берутся сразу из выпадающего списка,
хранящегося в статическом файле и загружаемого в окно просмотра, а затем
помещаются в тег <span>, имеющий id, состоящий из id родительской формы и
постфикса "_msg"*/
if(formID == "dateFromSignDataSel" || formID == "signFromDateDataSel"){
document.getElementById(formID + "_msg").innerHTML = fldVal;
return;
}
/*в остальных случаях осуществляется асинхронный запрос к серверному
сценарию
....................................................................................................................................*/
}
Аналогично разработаны библиотеки для обработки форм заказа,
отправки асинхронных запросов, пагинации каталогов и работы с корзиной.
Б.5. Код файла xml, описывающего простейший модуль
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5">
<name>garnitures_menu</name>
<author>kir</author>
<authorEmail>admin@yakira.ru</authorEmail>
<authorUrl>http://yakira.ru</authorUrl>
<copyright>(c) me</copyright>
<creationDate>Jan 2019</creationDate>
<description>список гарнитуров</description>
<version>1.0</version>
<files>
<filename module="mod_garns">mod_garns.php</filename>
</files>
<params>
<param name="menuTitle" type='text' default="Каталог" label="заголовок"
description="заголовок меню"></param>
</params>
</install>
Б.6. Код простейшей карты сайта в формате XML
<?xml version="1.0" encoding="utf-8"?>
<!--Created using XmlSitemapGenerator.org - Free HTML, RSS and XML sitemap
generator-->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://yakira.ru</loc>
<lastmod>2018-10-10</lastmod>
91
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>http://yakira.ru/j/index.php?option=com_jCatalog</loc>
<lastmod>2018-10-10</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>http://yakira.ru/j/index.php?option=com_jcatgarns</loc>
<lastmod>2018-10-10</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8
</url>
</urlset>
92
ПРИЛОЖЕНИЕ В. ДАТАЛОГИЧЕСКАЯ МОДЕЛЬ ИМ
Сущность
Идентифи
катор
таблицы
Атрибут
Идентификатор
поля
Тип поля
Покрытие
изделия
coating
Ид покрытия (первичный ключ)
coatingID
tinyint (3) unsigned NOT NULL
AUTO_INCREMENT
Наименование покрытия
coatingName
VARCHAR (24)
DEFAULT NULL
Заказчики
customers
Ид заказчика (первичный ключ)
customerID
timestamp(8) NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP
ФИО заказчика
custNm
char(48) DEFAULT NULL
№ телефона заказчика
tel
char(18) DEFAULT NULL
Адрес e-mail заказчика
email
char(32) DEFAULT NULL
Гарнитуры
изделий
garnitures
Ид гарнитура (первичный ключ)
garnID
smallint(5) unsigned NOT NULL
AUTO_INCREMENT
Артикул
artikul
varchar(10) NOT NULL
Цена гарнитура
price
mediumint(8) unsigned DEFAULT '0'
Промежуточная
таблица изделий,
входящих в
гарнитур
garns_items
Ид гарнитура
garnID
smallint(5) unsigned DEFAULT NULL
Ид изделия, входящего в гарнитур
itemID
mediumint(8) unsigned NOT NULL
Гороскоп
horoscopes
Ид знака зодиака (первичный ключ)
signID
int(2) unsigned NOT NULL
AUTO_INCREMENT
Имя знака зодиака
signName
char(8) DEFAULT NULL
Строка Ид камней, соответствующий знаку
jewels
char(128) DEFAULT NULL
Начало действия знака
dateFrom
char(5) DEFAULT NULL
Окончание действия знака
dateTo
char(5) DEFAULT NULL
Наименования
изделий
itemnames
Ид наименования (первичный ключ)
itemNameID
tinyint(3) unsigned NOT NULL
AUTO_INCREMENT
Наименование
itemName
varchar(20) DEFAULT NULL
Каталог изделий
items
Ид изделия (первичный ключ)
itemID
mediumint(8) unsigned NOT NULL
AUTO_INCREMENT
Артикул изделия
artikul
varchar(10) NOT NULL
Ид наименования
itemNameID
tinyint (3) DEFAULT NULL
Размер
dimension
float(4,1) unsigned NOT NULL
Вес
weight
float(5,2) unsigned NOT NULL
Ид покрытия
coatingID
tinyint(3) unsigned DEFAULT NULL
Цена входная
inPrice
mediumint(8) unsigned NOT NULL
Цена конечная
price
mediumint(5) unsigned NOT NULL
Имя файла с изображением изделия
flName
varchar(64) NOT NULL
Промежуточная
таблица камней,
входящих в
изделия
item_jewel
Ид изделия
itemID
mediumint(8) DEFAULT NULL
Ид камня
jewID
smallint(6) NOT NULL
Каталог камней
jewels
Ид камня
jewID`
smallint(6) NOT NULL
Название камня
jewelName
varchar(45) NOT NULL
Статья о целебных свойствах
healthStr
text NOT NULL
Физические свойства
descrStr
text NOT NULL
Имя файла с изображением камня
jewflName
varchar(55) NOT NULL
Учет проданных
изделий
sold
Ид продажи (первичный ключ)
soldID
int(10) unsigned NOT NULL
AUTO_INCREMENT
Ид изделия
itemID
mediumint(8) unsigned NOT NULL
Ид заказчика
customerID
smallint(8) NOT NULL
Дата продажи
saleDate
timestamp(8) NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Agile-методология в управлении проектами на примере ООО «Ресурсный центр «Академия КлассИнфо»
Aвтoмaтизaция пpoцecca вeдeния инфopмaциoннoй бaзы o дoлжнocтяx и вaкaнcияx c укaзaниeм тpeбoвaний к уpoвню знaний и нaвыкoв кaндидaтoв для гpуппы кaдpoв вoйcкoвoй чacти 3474»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
Cовершенствование управления рентабельности предприятия (на примере гуипп «бендерская типография «полиграфист»)
Event - менеджмент: реализация проекта (на примере ООО "АГРОПАК")