Файл: Разработка интернетмагазина с использование cms платформы.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2023
Просмотров: 548
Скачиваний: 6
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
67
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
1) Разработка интернет-магазина // Электронная версия на сайте https://ru.wordpress.org/
2) Общие сведения о CMS WordPress // Электронная версия на сайте https://ru.wikipedia.org/wiki/WordPress
3) Общие сведения о БД MySQL // Электронная версия на сайте https://ru.wikipedia.org/wiki/MySQL
4) Плагин WooCommerce // Электронная версия на сайте https://woocommerce.com/
5) Общие сведения о языке программирования Java // Электронная версия на сайте https://ru.wikipedia.org/wiki/Java
6) Робин Никсон // создаём динамические веб-сайты с помощью PHP,
MySQL, JavaScript, CSS и HTML5, 2016 г. - 768с.
7) Веллинг, Томсон // Разработка веб-приложений с помощью PHP и MySQL,
2017г. - 768 с.
8) Грачев, А. // создаём свой сайт на WorldPress, работа с CMS WorldPress -
Питер, 2011г. - 282 с.
9) Гаевский, А. Ю. // 100% самоучитель по созданию Web-страниц и Web- сайтов: HTML и JavaScript - Москва: 2008г. - 457 с.
68
ПРИЛОЖЕНИЕ А
Техническое задание
Основание для разработки – защита выпускной квалификационой работы.
Целевая аудитория: потенциальные клиенты, владельцы персональных компьютеров.
Назначение - Розничная продажа через интернет-магазин компьютерных комплектующих.
Языковая версии: Русский
Требования к дизайну: стиль сайта простой, легкий, удобный.
Требования к структуре интернет-магазина: интернет-магазин должен включать в себе следующие страницы и разделы:
1) Главная;
2) Магазин;
3) Новости IT;
4) О нас;
5) Доставка и оплата.
Обязательный элемент для всех страниц – логотип, корзина покупателя на видимом месте.
Требования к навигации интернет-магазина: в навигации интернет-магазина должны присутствовать: 1) панель с «хлебными крошками»: возможность перехода в основной раздел сайта на любой странице сайта, возможность вернутся на предыдущую страницу сайта на любой странице, за исключением главной; 2) доступность любой страницы сайта с использованием не больше трех кликов; 3) наличие ссылок на социальные сети в шапке сайта; 4) навигация должна соответствовать общим требованиям к оформлению и верстке сайта
Требования к программному и аппаратному обеспечению сайта: Выбор технических решений обусловлен особенностями требований к веб-ресурсу:
1) веб-сервер Apache не ниже версии 2.2.22 с модулем Rewrite, необходимым для перенаправления страниц;
2) в качестве системы управления базами данных используется MySQL 5.5.25 или выше;
3) взаимодействие с базами данных осуществляется с помощью PhPMyAdmin
3.5.2 или выше;
69 4) хостинг с PHP 5.3.29 или выше;
5) дисковая квота на хостинге 150 Мб или выше;
6) наличие зарегистрированного и корректно настроенного домена.
Требования к защите информации, безопасности и сохранности данных:
Основные требования к информационной безопасности в системе ограничиваются реализацией механизма управления и контроля доступа к данным. То есть, веб-ресурс должен предусматривать базовую защиту от основных видов атак: межсайтового скриптинга (XSS), SQL-инъекций, CSRF- уязвимостей.
Требования к SEO-оптимизации: для улучшения оптимизации сайта должны быть выполнены ряд требований:
1) Валидность и кроссбраузерность кода.
2) Отсутствие скрытых элементов с текстом в шаблоне сайта.
3) CSS-стили и JavaScript-скрипты - должны быть в отдельных файлах .css и .js.
4) Формирование URL страниц сайта должно осуществляться с использованием оптимизированных и лаконичных URL. Это обеспечивает удобство сохранения ссылок пользователями и улучшает рейтинг сайта с позиции поисковых систем, то есть также служит методом SEO-оптимизации сайта. Структуру оптимизированного URL необходимо представлять в виде иерархии.
5) Сайт должен пройти проверку подлинность в поисковых системах Google и
Yandex.
Требования по кроссбраузерности: пользовательский интерфейс должен идентично отображаться в следующих браузерах настольных и мобильных операционных систем:
1) Internet Explorer 11;
2) Mozilla Firefox версии 50.2. и выше;
3) Safari версии 5 и выше;
4) Google Chrome версии 50 и выше;
5) Opera версии 40 и выше;
6) Яндекс. Браузер версии 16.9 и выше;
7) Microsoft Edge версии 38 и выше;
8) Mobile Chrome версии 30 и выше.
Все основные элементы управления и навигации веб-ресурса должны поддерживать сенсорные экраны.
70
ПРИЛОЖЕНИЕ Б
Программный код Web-страниц
INDEX.PHP
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/ define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' );
WP-MAIL.PHP
- ?РНР
/**
71
* Получает сообщение электронной почты из почтового ящика пользователя для добавления как
* WordPress пост. Сведения о подключении к почтовому ящику должны быть
* настройка В разделе Параметры > запись
*
* @WordPress пакет
*/
/ * * Убедитесь, что WordPress bootstrap запущен, прежде чем продолжить. */ требуется( имя_каталога( __файл__ ) . '/РГ-нагрузка.на PHP' );
/ * * Этот фильтр задокументирован в wp-admin / options.РНР */ если ( ! apply_filters ('enable_post_by_email_configuration', true ) ) { wp_die (__('это действие было отключено администратором.'), 403 );
}
$mailserver_url = get_option ('mailserver_url' ); если ... mail.example.com ' = = = $mailserver_url / / пустой ($mailserver_url ) ) { wp_die (__('это действие было отключено администратором.'), 403 );
}
/**
* Пожары, чтобы позволить плагину сделать полное поглощение почты по электронной почте.
*
* @с 2.9.0
*/ do_action ('wp-mail.на PHP' );
/ * * Получите класс POP3 для доступа к почтовому ящику. */ require_once (ABSPATH . WPINC . '/class-pop3.на PHP' );
/ * * Проверьте наличие новых сообщений только через этот интервал. */ если ( ! определено ('WP_MAIL_INTERVAL' ) ) { define ('WP_MAIL_INTERVAL', 300); / / 5 минут
72
}
$last_checked = get_transient ('mailserver_last_checked') ); если ( $last_checked ) { wp_die (__('притормози ковбой, не нужно так часто проверять новые письма!' ) );
} set_transient ('mailserver_last_checked', true, WP_MAIL_INTERVAL );
$time_difference = get_option ('gmt_offset') * HOUR_IN_SECONDS;
$phone_delim = '::';
$протокол POP3 = новый протокол POP3(); если ( ! $pop3 - >connect (get_option ('mailserver_url'), get_option(
'mailserver_port'))||! $pop3 - >пользователь (get_option ('mailserver_login' ) ) ) { wp_die( esc_html( $протоколов POP3->ошибка ) );
}
$count = $pop3 - >pass (get_option ('mailserver_pass' ) ); если (false = = = $count ) { wp_die( esc_html( $протоколов POP3->ошибка ) );
} если (0 === $count ) {
$для POP3->выход(); wp_die (__("кажется, нет никакой новой почты.' ) );
} for ($i = 1; $i < = $ count; $i++ ) {
$message = $pop3 - >get ($i );
$bodysignal = false;
$ boundary = ";
$charset = ";
$содержание = ";
$content_type = ";
$content_transfer_encoding = ";
73
$post_author = 1;
$author_found = false; foreach ($message как $строка ) {
/ Сигнал тела. если (strlen ($line ) < 3 ) {
$bodysignal = true;
} if ($bodysignal ) {
$содержание. = $линия;
} еще { if (preg_match ('/Content-Type: /i', $line ) ) {
$content_type = trim ($line );
$content_type = substr ($content_type, 14, strlen
($content_type ) - 14 );
$content_type = explode ( ' ;', $content_type ); если ( ! пустой( $content_type[1] ) ) {
$charset = взорвать ( ' = ' , $content_type[1] );
$charset = (! пустой ($charset[1]))? отделка
($charset[1]):";
}
$content_type = $content_type[0];
} if (preg_match ('/Content-Transfer-Encoding: /i', $line ) ) {
$content_transfer_encoding = trim ($line );
$content_transfer_encoding = substr
($content_transfer_encoding, 27, strlen ($content_transfer_encoding ) - 27 );
$content_transfer_encoding = explode ( ' ;',
$content_transfer_encoding );
$content_transfer_encoding =
$content_transfer_encoding[0];
}
74 if (($content_type = = 'multipart / alternative') & & (false !== strpos ($line, ' граница="' ) ) && ( " == $граница ) ) {
$boundary = trim ($line );
$граница = взорваться( '"', $границей );
$boundary = $граница[1];
} if (preg_match ('/Subject: / i', $line ) ) {
$предмет = "Трим" ( $строка );
$предмет = функцию substr( $заголовок, 9, функция strlen( $объект ) - 9 );
// Захватывает любой текст в теме перед $phone_delim в качестве темы if (function_exists ('iconv_mime_decode' ) ) {
$subject = iconv_mime_decode ($subject, 2, get_option ('blog_charset' ) );
} еще {
$subject = wp_iso_descrambler ($subject );
}
$subject = explode( $phone_delim, $subject );
$subject = $subject[0];
}
/*
* Установите автора, используя адрес электронной почты
(From или Reply-To, последний используемый)
* в противном случае используйте администратора сайта.
*/ если ( ! $author_found & & preg_match ( '/^(From|Reply-To): /',
$line ) ) { if (preg_match ('/[a-z0-9_.- ] +@[a-z0-9_.- ] +(?!.*<) / i',
$line, $matches ) ) {
$author = $matches[0];
} еще {
75
$author = trim ($line );
}
$author = sanitize_email( $author ); if ( is_email ($author ) ) {
/ * переводчики: почтовый адрес электронной почты автора */
Эхо '<Р>' . sprintf (__('Author is %s'), $author).
'Р>';
$userdata = get_user_by ('электронная почта',
$author ); если ( ! пустой( $данных ) ) {
$post_author = $userdata - > ID;
$author_found = true;
}
}
} if (preg_match ('/Date: / i', $line)) {//формы '20 Mar 2002 20: 32:
37 +0100'
$ddate = str_replace ('Date:',", trim ($line ) );
$ddate = preg_replace ('!\с.(\*+\) \s*$!', ", $ddate ); / / удалите строку часового пояса в скобках, если она существует, так как это путает strtotime
$ddate_U = strtotime ($ddate );
$post_date = gmdate ('Y-m-d H:i: s', $ddate_U +
$time_difference );
$post_date_gmt = gmdate ('Y-m-d H:i: s', $ddate_U );
}
}
}
// Установить $post_status на основе $author_found и возможности publish_posts автора
76 if ($author_found ) {
$user = новый WP_User( $post_author );
$post_status = ($user->has_cap ('publish_posts' ) ) ? 'опубликовать' : 'в ожидании';
} еще {
// Автор не найден в БД, установите статус ожидающий. Автор уже админ.
$post_status = 'в ожидании';
}
$subject = trim ($subject ); if ($content_type = = 'multipart / alternative' ) {
$content = explode ('--'. $ граница, $содержание );
$content = $content[2];
// Сопоставление без учета регистра содержимого-передача- кодирование. если ( функция preg_match( '/содержание-передача-кодирование: кавычки-печатаемый/я', $содержание $делим ) ) {
$content = взорвать ($delim[0], $content );
$content = $content[1];
}
$содержание = strip_tags( $контента,
'<ИМГ><п><БР><я><б><у><них><сильный><удар><шрифта><охватывают><
див>' );
}
$содержание = "Трим" ( $контент );
/**
* Фильтрует исходное содержимое письма.
*
* Дайте Post-By-Email расширения плагинов полный доступ к контенту, либо
* необработанное содержимое или содержимое последнего цитируемого раздела для печати.
77
*
* @с 2.8.0
*
* @ param string $content исходный контент электронной почты.
*/
$content = apply_filters ('wp_mail_original_content', $content ); если ( ложь !== stripos ($content_transfer_encoding, 'quoted-printable' ) ) {
$content = quoted_printable_decode( $content );
} if (function_exists ('iconv')&&! пустой( $кодировку ) ) {
$содержание = с iconv( $charset, то get_option( 'blog_charset' ),
$содержания );
}
// Захватывает любой текст в теле после $phone_delim в качестве тела
$содержание = взорваться( $phone_delim, $содержания );
$content = пустой ($content[1])? $content[0]: $content[1];
$содержание = "Трим" ( $контент );
/**
* Фильтрует содержимое сообщения, отправленного по электронной почте перед сохранением.
*
* @с 1.2.0
*
* @ param string $content содержимое электронной почты.
*/
$post_content = apply_filters ('phone_content', $content );
$post_title = xmlrpc_getposttitle( $content ); если ( $post_title == " ) {
$post_title = $subject;
78
}
$post_category = array (get_option ('default_email_category' ) );
$post_data = compact ('post_content', 'post_title', 'post_date', 'post_date_gmt',
'post_author', 'post_category', 'post_status' );
$post_data = wp_slash( $post_data );
$post_ID = wp_insert_post( $post_data ); if (is_wp_error ($post_ID ) ) {
Эхо "\п" . $post_ID - >get_error_message();
}
/ По какой-то причине мы не могли отправить сообщение. Лучше перейти к следующему письму. if (пустой ($post_ID ) ) { продолжать;
}
/**
* Пожары после публикации сообщения, отправленного по электронной почте.
*
* @с 1.2.0
*
* @param int $post_ID идентификатор сообщения.
*/ do_action ('publish_phone', $post_ID );
Эхо " \n
". _("Автор:"). 'сильный. ' > esc_html ($post_author).
'Р>';
Эхо " \n
". __ ('Posted title:'). 'сильный. ' > esc_html
($post_title). 'Р>'; если ( ! $pop3 - >удалить ($i ) ) {
Эхо '<Р>' . функции sprintf(
/ * переводчики: %s: ошибка POP3 */
79
__ ('Oops: %s' ), esc_html( $протоколов POP3->ошибка )
) . 'Р>';
$протоколов POP3->сброс(); выход;
} еще {
Эхо '<Р>' . функции sprintf(
/ * переводчики: %s: идентификатор сообщения */
_("Миссия завершена. Сообщение на %S удален.' ),
'<сильный. '> $я. 'сильный'>
) . 'Р>';
}
}
$для POP3->выход();
WP-ACTIVATE.PHP
?РНР
/**
* Подтверждает, что ключ активации, отправленный по электронной почте после подписания пользователем
* up для нового сайта соответствует ключу для этого пользователя, а затем отображает подтверждение.
*
* @WordPress пакет
*/ define ('WP_INSTALLING', true );
/ * * Настройка среды WordPress. */
80 требуется( имя_каталога( __файл__ ) . '/РГ-нагрузка.на PHP' ); требуется( имя_каталога( __файл__ ) . '/wp-blog-header.на PHP' ); если ( ! is_multisite() ) { wp_redirect( wp_registration_url() ); умереть();
}
$valid_error_codes = массив ('already_active', 'blog_taken' ); list ($activate_path ) = взорвать ('?', wp_unslash ($_SERVER ['REQUEST_URI'] )
);
$activate_cookie = ' wp-активировать-' . COOKIEHASH;
$key = ";
$result = null; если ( isset и (переменная $_GET['ключ'] ) && isset и( $_POST, где['ключ'] ) & & переменная $_GET['ключ'] !== $_POST ['key'] ) { wp_die (__('обнаружено несоответствие ключевого значения. Пожалуйста, перейдите по ссылке в письме активации.'), __( 'Произошла ошибка при активации ), 400 );
} elseif (! пустой( $_GET ['key'] ) ) {
$key = $_GET ['key'];
} elseif (! пустой ($_POST ['key'] ) ) {
$key = $_POST ['ключ'];
} если ( $ключ ) {
$redirect_url = remove_query_arg( 'ключ' );
81 if ($redirect_url !== remove_query_arg (false ) ) { setcookie ($activate_cookie, $key, 0, $activate_path,
COOKIE_DOMAIN, is_ssl (), true ); wp_safe_redirect ($redirect_url ); выход;
} еще {
$result = wpmu_activate_signup( $key );
}
} если ( $результат === значение null && использования isset( $их помощью[
$activate_cookie ] ) ) {
$key = $_COOKIE[ $activate_cookie ];
$result = wpmu_activate_signup( $key ); cookie посредством setcookie( $activate_cookie, ' ', Time () в -
YEAR_IN_SECONDS, $activate_path, COOKIE_DOMAIN, is_ssl(), правда );
} если ($result === null | | (is_wp_error ($result ) & & 'invalid_key' = = = $result -
>get_error_code() ) ) { status_header (404 );
} elseif ( is_wp_error ($result ) ) {
$error_code = $result - >get_error_code(); если ( ! in_array ($error_code, $valid_error_codes ) ) { status_header (400 );
}
} nocache_headers();
82 if (is_object ($wp_object_cache ) ) {
$wp_object_cache - >cache_enabled = false;
}
// Исправить заголовок страницы
$wp_query - >is_404 = false;
/**
* Срабатывает до загрузки страницы активации сайта.
*
* @с 3.0.0
*/ do_action ('activate_header' );
/**
* Добавляет крючок действия, специфичный для этой страницы.
*
* Запускает {@see 'wp_head'}.
*
* @since MU (3.0.0)
*/ функция do_activate_header() {
/**
* Срабатывает до загрузки страницы активации сайта.
*
* Запускает действие {@see 'wp_head'}.
*
* @с 3.0.0
83
*/ do_action ('activate_wp_head' );
} add_action ('wp_head', 'do_activate_header' );
/**
* Загружает стили, относящиеся к данной странице.
*
* @since MU (3.0.0)
*/ функция wpmu_activate_stylesheet() {
?>
84
- ?php if (! $key) { ?>
<Н2>< / h2>
<имя формы=" activateform " id=" activateform " метод=" post " действие=" " >
<метка для="ключ">?>этикетка>
<тип ввода= "текст" имя=" ключ " id=" ключ "значение= ""размер= "50" />
< / p>
<ввод ИД="отправить" типа="отправить" название="отправить" класс="представить" значение="('активировать');?> " / >
< / p>
форма>
- ?РНР
} еще { если (is_wp_error ($result ) && in_array ($result - >get_error_code (),
$valid_error_codes ) ) {
$signup = $result - >get_error_data();
?>
<Н2>< / h2>
- ?РНР echo '
'; if ($signup- > домен . $signup- > path == " ) { е(
/* переводчики: 1: URL-адрес входа, 2: имя 3: адрес электронной почты пользователя, 4: потеряли пароль, URL-адрес */