Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Инструкция программиста.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
134.02 Кб
Скачать

Кейс examples:

Вывод ранее заготовленных примеров

$header = "Примеры созданных интернет-магазинов, с помощью нашего коструктора";

$content.= "<p><img src='".$murl."/template/resize.php?img_src=examples/1.jpg&w=300&h300'>";

$content.= "<img src='".$murl."/template/resize.php?img_src=examples/2.jpg&w=300&h300'></p>";

$content.= "<img src='".$murl."/template/resize.php?img_src=examples/3.jpg&w=300&h300'>";

$content.= "<img src='".$murl."/template/resize.php?img_src=examples/4.jpg&w=300&h300'>";

После определения с тем, что выводить, подключаем шаблон, который используя наши данные выводит их в дружелюбном пользователю виде.

include "template/index.php";

Далее подробно о шаблоне

Шаблон(дизайн) сайта template/index.Php

Шаблон сайта — совокупность оформленных и сверстанных в HTML и(или) PHP страниц, графических и служебных файлов, которые могут использоваться для создания типового сайта любой направленности.

Как правило, шаблоны сайтов состоят из графических файлов дизайна распространенных форматов (PNG, JPEG, GIF), помещенных в отдельную папку; статических html(php)-страниц и файлов таблицы стилей (CSS), а в некоторых случаях ещё и Flash.

Наш шаблон самого конструктора, находится в папке /templates/. Основной его файл, это index.php, в котором прописан формат вывода контента. В index.php определены теги обязательные для html страниц, а также подключены стили css.

HTML (от англ. HyperText Markup Language — «язык разметки гипертекста») — стандартный язык разметки документов во Всемирной паутине. Большинство веб-страниц создаются при помощи языка HTML (или XHTML). Язык HTML интерпретируется браузерами и отображается в виде документа в удобной для человека форме.

HTML является приложением («частным случаем») SGML (стандартного обобщённого языка разметки) и соответствует международному стандарту ISO 8879. XHTML же является приложением XML.

Каждый HTML-документ, отвечающий спецификации HTML какой-либо версии, должен начинаться со строки объявления версии HTML <!DOCTYPE…>, которая обычно выглядит примерно так:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/html4/strict.dtd">

Если эта строка не указана, то добиться корректного отображения документа в браузере становится труднее.

Далее обозначается начало и конец документа тегами <html> и </html> соответственно. Внутри этих тегов должны находиться теги заголовка (<head></head>) и тела (<body></body>) документа.

В нашем шаблоне используются переменные, изменяя значения которых, изменяется содержание страницы. У всех переменных, есть значение по-умолчанию, чтобы в случае, если мы не задали их, шаблон все равно выводил адекватную страницу.

Переменная

Описание

$murl

Адрес нашего сайт

$top_button_#

Кнопки горизонтального меню

$header

Заголовок страницы

$content

Содержание

Переменные располагаются в тегах, описанных в css файле

<div id="menu">

<ul>

$top_button_1

$top_button_3

$top_button_2

</ul>

</div>

Пример описания меню в css

#menu

{

float: right;

width: 700px;

}

#menu ul

{

float: right;

margin: 0px;

padding: 60px 0px 0px 0px;

list-style: none;

line-height: normal;

}

#menu li

{

float: left;

margin-left: 2em;

}

Изменяя файл css, можно напрямую воздействовать на внешний вид нашего конструктора. Для файлов магазина, отдельный css

add.php

Файл, отвечающий за вывод формы, для добавления нового магазина

В начале файла мы начинаем сесиию, она нужна нам для генерации капчи

$v=session_name();

$w=session_id();

Далее идет построение формы, на языке разметки html

<form action="" method=post name=add>

Тег <form> устанавливает форму на веб-странице. Форма предназначена для обмена данными между пользователем и сервером. Область применения форм не ограничена отправкой данных на сервер, с помощью клиентских скриптов можно получить доступ к любому элементу формы, изменять его и применять по своему усмотрению.

Элемент <table> служит контейнером для элементов, определяющих содержимое таблицы. Любая таблица состоит из строк и ячеек, которые задаются с помощью тегов <tr> и <td>.

<table align=center>

<tr>

<td><h3>Название вашего интернет-магазина</h3></td>

<td><input type=text name=mag_title required></td>

</tr>

<tr>

<td><h3>Домен вашего интернет-магазина</h3></td>

<td><input type=text name=mag_address required></td>

</tr>

<tr>

<td><h3>Ваш e-mail</h3></td>

<td><input type=text name=usr_mail required></td>

</tr>

<tr>

<td><h3>Пароль</h3></td>

<td><input type=password name=usr_pswd required></td>

</tr>

<tr>

<td><h3>Код с картинки:</h3><img src="/kcaptcha/?$v=$w"></td>

<td><input type="text" name="keystring"></td>

</tr>

<tr>

<td colspan=2 align=center><input type=submit <a class=button button-small value = Создать!></a></td>

</tr>

</table>

</form>

После ввода данных пользователь нажимая кнопку «Создать!» отправляет данные POST-запросом в основной файл index.php, кейс add, описанный выше.

auth.php

Выводит форму по аналогии с add.php, только для авторизации. После заполнения пользователь попадает в index.php, кейс auth.php.

shop_list.php

Файл обрабатывает запрос пользователя в личном кабинет и выводит список доступных магазинов, проверяя есть ли связь у пользователя с магазином, функцией checkAccess(), описанной выше, а также следующей проверкой на наличие магазнов

$user_id = $_COOKIE['uid'];

$connection_info = mysql_query("SELECT * FROM `connect` WHERE `user_id` = '$user_id'");

if(mysql_num_rows($connection_info) == 0)

{

$content = "У пользователя нет магазинов";

}

Если магазины у пользователя есть, запросим данные из базы

$shop_id_array = mysql_fetch_array($connection_info);

$shop_id = $shop_id_array['id'];

$shop_sql = mysql_query("SELECT * FROM `shop` WHERE `id` = $shop_id");

while($shop_info = mysql_fetch_array($shop_sql))

{

$shop_id = $shop_info['id'];

$shop_name = $shop_info['shop_name'];

$shop_domain = $shop_info['shop_domain'];

$shop_inf = $shop_info['shop_info'];

}

На случай, редких, но возможных случаев существует проверка. Если запрос обработался неуспешно, но связь есть. Чтобы воспроизвести такой случай, достаточно удалить магазин из таблицы `shop`.

if(mysql_num_rows($shop_sql) == 0){

$content = "Не сществует такого магазина. Возможно, он был удален";

}

Выводим данные магазина

return <<<EOF

<table width="100%" border="1" cellspacing="1" cellpadding="10" align="center">

<tr align=center>

<td>Название</td>

<td>Домен</td>

<td>Описание</td>

</tr>

<tr>

<td><a href = "$murl/template/shop_edit.php?shop_id=$shop_id">$shop_name</a></td>

<td>$shop_domain</td>

<td>$shop_inf</>

</tr>

</table>

EOF;

shop_edit.php

Файл редактирования информации магазина. После выбора магазина, пользователю предлагается выбрать, что он будет редактировать.

Для этого проверим еще раз, есть ли у него доступ функцией checkAcces()

if(!shop_owner())

{

header("HTTP/1.0 404 Not Found");

die("HTTP/1.0 404 Not Found");

}

Получаем идентификатор магазина в GET-запросе и проверяем, есть ли у нас магазин с таким id

$shop_id = $_GET['shop_id'];

$shop_sql = mysql_query("SELECT * FROM `shop` WHERE `id` = $shop_id");

if($shop_sql !== false && ($info = mysql_fetch_array($shop_sql)) !== false

Если есть, записываем id в переменную

$shop_id = $info['id'];

На основе этой переменной формируем ссылки и выводим список разделов для редактирования

$header = "Выбор категории для редактирования";

$content = <<<EOF

<table>

<tr>

<td>Выберите раздел для редактирования</td>

<tr>

<tr>

<td><a href="$murl/edit/logo.php?shop_id=$shop_id">Логотип</a></td>

<tr>

<tr>

<td><a href="$murl/edit/main.php?shop_id=$shop_id">Основное</a></td>

<tr>

<tr>

<td><a href="$murl/edit/cats.php?shop_id=$shop_id">Категории</a></td>

<tr>

<tr>

<td><a href="$murl/edit/goods.php?shop_id=$shop_id">Товары</a></td>

<tr>

<tr>

<td><a href="$murl/edit/styles.php?shop_id=$shop_id">Стиль</a></td>

<tr>

</table>

EOF;

Подключаем шаблон

include "../template/index.php";

goods_element.php

Функция обработки запроса в базу и вывода результата в корректном виде. Функция описывает вывод одного элемента «Товар». Имея данные о товаре, формируется структура и возвращается, при обращении к функции

function goods_element($info){

global $murl, $domain;

$result = "<table border=0>

<tr>

<td style='background:#d8dff2;'><h3>".$info['goods_name']."</h3></td>

</tr>

<tr>

<td><img src='".$murl."/images/".$info['img']."'></td>

</tr>

<tr>

<td style='background:#d8dff2;'><h3><center><a href='http://".$domain.".".qurl."/index.php?a=buy&goods_id=".$info['id']."'>Купить</a></center></h3></td>

</tr>

<tr align=center>

<td height=100px>".$info['info']."</td>

</tr>

</table>";

return $result;

}

simpleImage.php

Класс обработки изображений.

В классе мы определяем переменные для картинки и типа картинки

var $image;

var $image_type;

Функция загрузки, в которой мы получаем размер и определяем тип. В качестве параметра передается файл изображения

function load($filename) {

$image_info = getimagesize($filename);

$this->image_type = $image_info[2];

if( $this->image_type == IMAGETYPE_JPEG ) {

$this->image = imagecreatefromjpeg($filename);

} elseif( $this->image_type == IMAGETYPE_GIF ) {

$this->image = imagecreatefromgif($filename);

} elseif( $this->image_type == IMAGETYPE_PNG ) {

$this->image = imagecreatefrompng($filename);

}

}

Функция сохранения, с параметрами файл, тип, сжатие и права. Определяем тип и сохраняем.

function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) {

if( $image_type == IMAGETYPE_JPEG ) {

imagejpeg($this->image,$filename,$compression);

} elseif( $image_type == IMAGETYPE_GIF ) {

imagegif($this->image,$filename);

} elseif( $image_type == IMAGETYPE_PNG ) {

imagepng($this->image,$filename);

}

if( $permissions != null) {

chmod($filename,$permissions);

Функция вывод, также определяем тип и выводим

function output($image_type=IMAGETYPE_JPEG) {

if( $image_type == IMAGETYPE_JPEG ) {

imagejpeg($this->image);

} elseif( $image_type == IMAGETYPE_GIF ) {

imagegif($this->image);

} elseif( $image_type == IMAGETYPE_PNG ) {

imagepng($this->image);

}

}

Функции получения ширины и высоты изображения

//получение исходной ширины

function getWidth() {

return imagesx($this->image);

}

//получение исходной высоты

function getHeight() {

return imagesy($this->image);

}

Функции изменения размера

(ресайза)

//ресайз по высоте

function resizeToHeight($height) {

$ratio = $height / $this->getHeight();

$width = $this->getWidth() * $ratio;

$this->resize($width,$height);

}

//ресайз по ширине

function resizeToWidth($width) {

$ratio = $width / $this->getWidth();

$height = $this->getheight() * $ratio;

$this->resize($width,$height);

}

Ресайз, по сути, сжатие изображения, для представления его в компактном виде.

Сжатие изображений — применение алгоритмов сжатия данных к изображениям, хранящимся в цифровом виде. В результате сжатия уменьшается размер изображения, из-за чего уменьшается время передачи изображения по сети и экономится пространство для хранения. Сжатие изображений подразделяют на сжатие с потерями качества и сжатие без потерь. Сжатие без потерь часто предпочтительней для искусственно построенных изображений, таких как графики, иконки программ, либо для специальных случаев, например, если изображения предназначены для последующей обработки алгоритмами распознавания изображений. Алгоритмы сжатия с потерями при увеличении степени сжатия как правило порождают хорошо заметные человеческому глазу артефакты.

resize.php

В файле происходит получение изображения и обращение к классу simpleImage, для его обработки.

Получаем название изображения из GET- запроса.

$img = isset($_GET['img_src']) ? strip_tags($_GET['img_src']) : NULL;

А также, желаемую высоту и ширину. Если не задано, ставим по-умолчанию 204х204

$w = isset($_GET['w']) ? intval($_GET['w']) : 204;

$h = isset($_GET['h']) ? intval($_GET['h']) : 204;

Сформируем переменную, с прямым адресом до файла

$img_src = $murl."/images/".$img;

Создадим объект класса

$image = new SimpleImage();

Загрузим изображение

$image->load($img_src);

Изменим ширину на полученную из GET-запроса

$image->resizeToWidth($w);

И высоту

$image->resizeToHeight($h);

Выведем обработанное изображение

$image->output();

В папке datchka.ru/edit находятся файлы, отвечающие за редактирование определенных типов данных, такие как:

  • Категории

  • Товары

  • Основные данные

  • Логотип

  • Стили

Работа построенна по одному принципу, который повторяется в каждом из файлов:

Подключаем конфигурационный файл

require "../config.php";

Проверяем вошедшего на наличие доступа к редактированию

if(!shop_owner())

Если не проходит, выводим ошибку

{

header("HTTP/1.0 404 Not Found");

die("HTTP/1.0 404 Not Found");

}

из GET-запроса получаем идентификатор магазина

$shop_id = $_GET['shop_id'];

и действие, если, есть. Если нет, то по-умолчанию ставим index..php

$action = isset($_GET['action']) ? $_GET['action'] : "index";

В зависимости от действия, переходим к кейсу

switch($action)

Проверять доступ пользователя к магазину необходимо в каждом файле, во избежание несанкионированного доступа. Файл разбит на кейсы – возможные варианты действий на странице. Далее идет описание кейсов, для каждого файла