Бакалавърска програма Информатика Бакалавърска теза на тема Web базирана хотелска система за резервации Разработил : Александър Тодоров Факултетен Номер : F26193



страница9/10
Дата06.09.2016
Размер1.56 Mb.
#8377
ТипПрограма
1   2   3   4   5   6   7   8   9   10

5.5. Оптимизация на приложението SEO
Съкращението SEO, идва от Search Engine Optimization съдържа десетки понятия в себе си, но кратката му дефиниция e: процес, чрез който един сайт бива променян по такъв начин, че да бъдеe харесван от търсачките и да получи повече посещения от тях.

Оптимизацията за търсачки са действия при който се има за цел да се оптимизира даден сайт, така че търсачките да са убедени, че този сайт е по-подходящ за определена ключова дума или фраза (като SEO например) от друг сайт, който твърди, че също е подходящ за тази дума.

При оптимизацията на сайта се съблюдават факторите, на които алгоритъма на търсачката обръща внимание и им дава особена тежест. Тези фактори генерално се разделят на две групи:

-вътрешни фактори - фактори, които са напълно контролируеми от уеб разработчика, понеже те се състоят основно в оформлението на текста на страницата

-външни фактори – изразяват се най-вече в поставените към сайта връзки (линкове) от други сайтове

Един добре оптимизиран уеб сайт значи много повече от няколко html файла, подредени в определена структура и със сигурност ще донесе много повече на своите създатели.

Докато търсачките продължават да развиват и усъвършенстват своите алгоритми, ще продължава да се развива и оптимизацията за търсачки (SEO) – оптимизирайки ново появилите се фактори определяни от търсачките.

Въпреки усъвършенстването на днешните системи за управление на съдържание (CMS), все още създаването на SEO-friendly страници зависи в голяма степен от HTML уменията на автора. Важно за търсачките е коректната употреба на HTML стандартите в съответствие с изискванията и новостите, въведени от Worldwide Web Consortim (w3.org).


Tags - meta tags (мета тагове). Те са част от HTML файла, която е видима за търсачките, но не се визуализира в браузъра. Двата най-важни мета-тага са meta desciption, който съдържа кратко описание на страницата, и meta keywords, който показва списък с ключовите думи, които са свързани с нея. Това, че таговете са скрити от потребителя, съвсем не означава, че са по-важни за търсачките от истинското съдържание на сайта, както мнозина смятат. Инженерите на Google са признавали, че алгоритъмът им въобще не използва meta keywords. Все пак, добавянето им във всяка страница остава препоръчително за сайтове с малко съдържание и при проблеми с дублиращо се съдържание.

Значително по-важно е създаването на добри meta desciption етикети, които описват съдържанието на всяка страница. Смята се, че и те не оказват пряко влияние на Google, но имат значение за потребителя, защото често се появяват под заглавието на сайта в SERP и в този смисъл трябва да са така написани, че да накарат потребителят да посети сайта ви.


В името на URL - Както за много други фактори, и за този съществуват спорове доколко и дали въобще има значение. Въпреки това, добрата практика е адресът на сайта да съдържа ключова дума - не само защото има вероятност да повлияе на търсачките, а и защото ключовата дума е видима за потребителя в SERP.

Относително по-важен фактор за Google е другата част от адреса на страниците. URL структурата трябва да е възможно по-проста, кратка, и, разбира се, да съдържа ключови думи. Добре е адресът на страницата да има възможно най-малко динамични елементи от рода на call?msgid=0007 или categoryid=123. Идеалното URL би трябвало да изглежда подобно на: http://име-на-сайт/име-на-категория/име-на-страница. От друга страна, ключовите думи на кирилица в URL все още се интерпретират грозно в браузърите и затова препоръките за използването им са естетически рисковани.

Много, но качествено - Два са основните фактори, които определят дали онлайн съдържанието е Google-friendly: неговата уникалност и неговата динамика. За да бъде добър сайтът ви, трябва да имате хубави материали, и те се обновяват редовно. Когато си изберете точната ниша, фокусирате се върху определени теми и пишете редовно и интересно върху тях, успехът ви е (почти) гарантиран и сред читатели, и сред търсачки. Именно липсата на уникално съдържание често е основният проблем за сайтовете. Дори да не бъдат оптимизирани по учебник, техните конкуренти, които полагат повече усилия в създаването на собствени материали, ще излизат по-напред в SERP - това e един от успехите на Google, които намаляват възможностите за манипулация.
Оптимизацията на сайта за хотели е направен по всички изброени по – горе стандарти, като се спазват стриктно техните изисквания.
5.6. Описание на потребителският интерфейс
В хотелската система е необходимо да има няколко модула:
- Потребители

- Регистрирани клиенти

- Регистрирани хотели

- Администратор – достъп до пълната информацията, на целият сайт

- Изход – възможност за изход от хотелската система за всички регистрирани
В перзентационната част на сайта на екрана ще бъдат сложени връзки към тези модули ( без администраторската част ) за удобство на клиентите и хотелите. За обикновените потребители модулите Регистрирани потребители, Хотелски потребители и Администратор няма да бъдат достъпни.

При отваряне на страницата на хотелската система, сайта ще има връзка към страница за въвеждане на потребителско име и парола, с които да се влезе в модула за хотели или в модула за клиенти. След въвеждане на валидно потребителско име и парола потребителите ще имат достъп до своите данни, като в зависимост от това, дали са администратори, хотели или клиенти, ще имат достъп до различна част от хотелската система.



5.6.1. Потребители

Потребителите, имат възможност да разглеждат предоставената информация за нужният им хотел. Те могат да търсят необходимият им хотел по дестинация, могат да проверяват свободността на стайте на хотела, да правят резервация online като си платят същевременно и да оставят своите коментари и запитвания.


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

  • направени свои поръчки

  • предоставени лични данни

  • информация за хотелите които е резервирал

  • достъп за промяна на своите лични данни


5.6.3. Регистрирани хотели
Регистрирани хотели, това са хотелите който са предоставили своята информация на сайта и са одобрени и проверени от администратор. Те също имат достъп като потребителите, но имат и достъп до своите хотелски данни. В хотелският модул хотелските клиенти имат следните възможности:

  • да си променят данните за своите хотели

  • да добавят нов хотел

  • да променят цената на своите стай за определен ден или период

  • да имат достъп до всички направени поръчки за тях като това включва данните за даденият клиент и данните за неговата поръчка


5.6.4. Администратор
Администратор – има достъп до информацията целият сайт във всеки един момент администратора може да промени всякакви данни за клиент или хотел. Администратора има достъп до всички динамични текстове в сайта, той може да ги променя по всяко едно време. Може да вижда всички поръки, при него се полочват всички запитвания, той дава достъп на даден регистриран хотел да се презентира в сайта. Този човек също се грижи и за коректно въведените коментари от клиенти за даден хотел.
5.6.5. Изход
Изход – модулът изход се използва за разрушаване на сесията която един логнат потребител е направил с цел сигурност. Нейната функционалност е когато даден влезнал потребител не е активен определен период от време тя се разрушава автоматично.
6. Примерно изпълнение
За по–голяма яснота, съм направил примерно изпълнение с обяснения на

по–важните фрагменти от сайта и представяне на част от програмният код.


6.1. Визуализиране на графичната част на приложението

Началната страница ( index.php ) е разделена на 3 слоя header, footer и дисплей, функционалността на тази страница е да осъществява няколко прости заявки от тип SELECT към базата от данни които са ни нужни за взимането на информация като: зареждане на топ 5 хотела и дестинации, взимане на презентационните текстове въведени за тази страница от администратора на сайта и зареждането на всички въведени страни подредени в 3 колони. При върнатите резултати от базата от данни системата ще създададе двумерен масив в които ще вкара тази информация и след това с цикъл for ще изгенерира целият поток от данни в страницата като спазваме html контекста на дизайна. За динамичното генериране на падащото меню с държавите и градовете, сме използвали PHP скрипт чрез които правим заявки към базата от данни и върнатите резултати от тях ги генерираме в JS скрипт за да можем да създаден нужната ни динамика между падащото меню на държавите и падащото меню на градовете.


Фигура 3

Страницата за новини е разделена на 3 слоя, в нея се визуализират всички въведени новини от администратора на сайта. За извждането на текста за всички новини използваме проста SELECT заявка и върнатите ни резултати групираме в двумерен масив. Използваме функция за съкращаване на текста до определен брой символи, наречена brake text. Всеки съкратен текст носи свой id параметър чрез които с GET променлива можем да генерираме пълната страница на новината, чрез проста заявка SELECT и WHERE клауза на която предаваме GET параметъра. Въведените снимки към определена новина показваме, чрез клас за форматиране на картинки наречен thumbnail. Действието на този клас е да взима подадената му снимка и чрез вградени функции на езика за програмиране да форматира подадената картинка до формат наподобяващ качеството на оригиналният, но с зададени височина и ширина на снимката.


Фигура 4

Тази страница също като предишните е разделена на 3 слоя, за генерирането й използваме прости заявки от тип SELECT, чрез тях ще изваждаме динамичното съдържание на всеки един хотел, чрез подаден GET параметър които е уникално id на даденият хотел. Тази страница има кода за форматиране ( thumbnail ) на картинките за правилното им изобразяване в дадената страница. Всеки един клиент, които посети тази страница, има възможност да избере дата и брой лега за поръчка, тези данни се зареждат от базата данни чрез заявка, която форматираме с PHP езика в двумерен масив и с използване на цикъл for, изгенерирваме цялата информация в падащото меню за брой легла.

Фигура 5

След като даден клиент е избрал необходимата му дата за резервация за даден хотел, му се генерира период на заетост на стаите от една седмица занапред от избраната датата. Това става чрез заявка за съединение на 3 таблици ( CROSS JOIN ) към базата от данни като в WHERE клаузата и ползваме POST параметрите, които клиента е задал с избирането на дата и брой дни като дата, която изпращаме в timestamp формат, от върнатите стойности от базата от данни правим двумерен масив, чрез които с цикъл for генерираме това „ календарче на заетостта”.
Фигура 6

Страницата за подробно търсене притежава следната функционалност. Тя генерира падащо динамично меню на държави и градове, като това става чрез ползването на класа DropDown.class които споменах в по-горните страници. Тя изпраща зададените и стойности към страницата за визуализиране на търсените хотели чрез POST метод.


Фигура 7

Функционалността на тази страница е подобна на началната страница с малка разлика, че тя зарежда информация със снимков материал за дадена страна от базата от данни и генерира всички градове към които са добавени хотели. Това става чрез слята проста заявка SELECT с CROSS JOIN на 3 таблици, като в WHERE клаузата параметрите се взимат чрез GET метод и COUNT функция за всеки град.
Фигура 8

Формата за контакти, е направена за удобство на клиентите, ако имат някакви запитвания за определен хотел или дестинация, която я няма представена в системата. След изпращане на формата се получава емайл на служебният емайл на сайта. Функционалността на тази страница ще бъде да се ползва phpmailer class чрез които ще можем да изпращаме email до администратора, а същевременно ще правим заявка за INSERT чрез която POST параметрите ще записваме в таблицата t_inbox.
Фигура 9

Това е страница, чрез която даден хотел може да присъства в сайта ни, чрез тази форма собственикът или администраторът на даден хотел може да въведе пълната информация за него. Тя е снабдена удобен редактор, с които може да редактират текста по подходящ удобен за презентиране.

В тази страница се ползва DropDown.class, но с малки подобрения, чрез които генерираме и континентите, ползваме JS библиотека, чрез която може всеки един клиент да си форматира текста по негов си еталон. Използваме прости заявки за показването на всички екстри, които могат да бъдат добавени като опции към въвежданият хотел. Записването на цялата въведена информация става чрез заявка за INSERT към базата от данни, като всички параметри към нея ще бъдат изпратени чрез метод POST от формата.


Фигура 10

Чрез тази страница всеки един собственик на хотел може да се влезне в своят хотелски модул и да прави всякакъв вид редакция на своята информация. Функционалността тук реализираме по следният начин. Когато даденият администратор въведе своето потребителски име и парола, и натисне бутона за влизане, чрез метод POST се изпращат тези данни до базата от данни, чрез прост заявка. Ако имаме върнат резултат, използваме сесиина променлива, която пазим до излизането на клиента от модула си. Тази променлива за по-голяма сигурност има определен период на валидност. Тази променлива пазим във всяка една страница за която клиента има достъп.
Фигура 11

Тази страница показва избраните дати за резервация на определен хотел и с техните цени. За да направи клиента поръчка, е нужно да въведе своите данни от кредитната си карта за да се осъществи транзакция по разплащането на резервацията.

За да стигне до тази страница посетителят трябва да е избрал и резервирал свободни дни за тази стая, това става посредством следната функционалност, когато клиента избере определен брой дни и началото за този период от падащите менюта и като даде действие на формата му се попълва кошницата с тези избрани свободни дни. Това става посредством заявка INSERT към базата от данни, като в нея се записват id тата на избраните стаи, дните за престой в timestamp формат, с брой легла и цените за тях. А визуализирането на тази информация става посредством слята проста заявка CROSS JOIN, използваща функции за групиране GROUP BY, по дата и функция за сумиране SUM на общата цена. Клиента има възможност да изтрие определен ден от избраните посредством бутон за триене, неговото действие се изразява по следният начин. Изпраща се заявка DELETE към базата от данни с параметри, създадената сесия от клиента и GET параметъра на дадената селекция от кошницата.

След като клиента е готов да поръча, той трябва да въведе своите данни за кредитна карта. След попълване на необходимите данни, те се форматират в XML формата които ни е предоставен от банката, се отвори SSL конекция към банковият сървър, като за това използвамe CURL библиотеката на PHP и чрез метод POST изпращаме генерираният XML с клиентските данни към банковият сървър. В последствие получаваме моментален отговор, този отговор представлява XML документ. С XML четец разкодираме документа и върщаме моментален отговор на клиента.
Фигура 12

След тази процедура клиентът получи емайл, които изглежда по следният начин, в този е-майл има пълната информация за хотела неговите координати за връзка.

Ако транзакцията е успешна, клиента е прехвърлен на страница за благодарности, а през това време му са генерирани и изпратени emails с подробна информация за даденият хотел и email с генериран персонален достъп до клиентският му модул. Тази функционалност става по следният начин, след прочитането на одобреният клиент, генерираме страница с подробните данни на хотела чрез CROSS JOIN заявка към базата от данни. Върнатите резултати ги обработваме за представяне в HTML формат наречен “ template ” и с класа phpmailer изпращаме на въведеният email от клиента ( генерираната страница ). Същевременно му създаваме потребителски достъп чрез заявка INSERT, като стойностите и са Random генериран потребител и кеширана парола с md5 PHP функция.


Фигура 13

След като даденият хотелски администратор е въвел правилно потребителско име и парола влеза в своят панел. На тази страница му се представят всички въведени хотели от него, с опции за промяна и редактиране. Това в програмно представяне изглежда по следният начин: Щом е влезнал в своят панел, значи се е създала сесия за идентификация, след това е направена простя заявка SELECT за прочитането не всички хотели прикрепени към id то на хотелският администратор и подредени чрез ORDER BY функцията. Като върнатата информация е вкарана в масив, които е генериран чрез цикъл for.
Фигура 14

За да достигне тази страница администратора трябва да е влезнал легално през своят панел и така същевременно да му е била създадена сесина променлива. Тази страница генерира всички въведени снимки към този хотел посредством заявка към базата от данни и върнатите резултати ще бъдат форматирани, и подготвени за визуализиране на снимките чрез thumbnail класа. Всяка една снимка има свое уникално id, чрез което тя може да бъде редактирана. Има опция за преместване на снимката като това се осъществява чрез заявка UPDATE към базата от данни и в WHERE клаузата параметъра е уникалното й id което е взето чрез изпратената GET стойност, а със самата заявка променяме теглото на снимката. Другата функционалност която тази страница изпълнява е upload на снимка, това се осъществява по следният начин, когато клиента избера нужната снимка и натисне бутона качване се генерира md5 кеш на името й ,което е записано в базата от данни, а самата снимка е записана в папка images със същото име.
Фигура 15

На тази страница администраторът може да редактира календара със заетостта на всяка една стая и нейната цена за всеки един ден.

За да редактира заетостта на стаите хотелският администратор е нужно да достигне то страницата за редакция на стаи. На тази страница се генерират всички въведени стаи прибавени към този хотел. Това се осъществява чрез проста заявка SELECT, съединена с CROSS JOIN между 3 таблици, като стаите са подредени по име чрез функцията ORER BY ASC, а в WHERE клаузата се взима GET id то на хотела и генерираната днешна дата в timestamp формат. За вземането на всички легла и цени за дадената дата към дадената стая, използваме проста SELECT заявка с WHERE параметрите, които е GET параметъра на хотела и id то на стаята, което взимаме, като завъртаме генерираният масив от данни от предишната заявка. Тази страница е снабдена с опция за визуализиране на данните напред във времето или назад във времето спрямо днешната дата. Това става със заявка към базата от данни като в нейната WHERE клауза се придава ( за дните напред ) timestamp-a на последният визуализиран ден в страницата, а за дните назад timestamp-а, на днешният ден. Страницата е снабдена с удобно падащо меню за избора на дата и меню за избор на определен период, които искаме да се визуализира. Това се осъществява с CROSS JOIN заявка към базата от данни, като за нейни параметри в WHERE клаузата се взимат POST параметрите от падащите менюта.

За вкарване на нови цени и брой легла сме създали удобно меню което се отваря, чрез JS за по-голямо удобство. То е снабдено с опции за по-лесен update на стаите. След като администратора въведе нужната информация, той ще трябва да натисне бутона за запис. Това действие има следната функционалност, чрез метод POST се изпращат всички данни към заявка за UPDATE като в нейната WHERE клауза се придават тези POST параметри и timestamp параметрите за всеки един от тези дни. Ако администратора иска да използва div менюто той трябва да въведе цената и броя легла, да избере датите за които иска да има update, да избере стаите и дните за тези дати. След като той направи действие, записа се осъществява чрез UPDATE заявка като в нейната WHERE клауза се взимат следните POST параметри: id на стаята, цена и брой легла, timestamp на 2 те дати и избраните дни. Преди да се осъществи UPDATE заявката проверяваме дали има записи за тези дни и ако няма, използваме INSERT заявка вместо UPDATE. Всички тези записи използват таблицата за заетост на стаите t_availability.
Фигура 16

Чрез този модул, хотелският администратор може да разглежда своите поръчки. Това се осъществява чрез LEFT JOIN заявка към 4 таблици, като към WHERE клаузата се придава GET параметъра на id то на хотела, като бъдат подредени по дати чрез ORDER BY функция. Върнатите стойности слагаме в двумерен масив и ползваме for цикъл за тяхното визуализиране в HTML страницата.
Фигура 17

Всяка една от тези резервации има опция за пълен преглед. Тази функционалност изпълняваме по следният начин: чрез LEFT JOIN заявка като в нейната WHERE клауза взимаме GET параметър, id то на дадената поръчка и функция SUM за изчисляване на цените за всеки един ден.
Фигура 18

След като администратора е създал сесия за влизане в панела на сайта, той е прехвърлен чрез метод header() към страницата с модули на сайта, от където той се „ управлява ”. Това са статични links които водят към различните модули на сайта.


Фигура 19

За начало разгледахме модула на хотелите. Чрез него администратора на сайта може да вижда всички одобрени, изчакващи и не одобрени хотели. Това се осъществява чрез заявка LEFT JOIN, CASE клауза в нея за установяване на статуса на хотела и COUNT функция, подредени чрез ORDER BY и LIMIT функция като стойностите са GET параметрите за pagination на страницата. Върнатите данни вкараме в двумерен масив и за визуализирането му използваме цикъл for. Към старицата прибавим и опция за търсене на хотел по страна, град или име на хотел. Това осъществяваме чрез LEFT JOIN заявка с CASE клауза, като към WHERE клаузата ползваме функция LIKE %%.

Фигура 20

Чрез модула за клиенти администраторът може да вижда всички регистрирани клиенти на сайта. Това са хора които са направили поне една поръчка от системата. Администратора може да премахва, да изпраща емайл или да редактира информацията, на даден клиент по всяко едно време от денонощието. Тази страница е снабдена с опция за търсене на даден клиент по емайл.

За визуализирането на всички клиенти използваме проста заявка SELECT с ORDER BY клауза, а за търсенето на клиент по email ползваме проста заявка като в WHERE клаузата, която има LIKE %% функция.


Фигура 21


От модула поръчки администратора може да видим всички направени поръчки до момента подредени по дати. Това използва следната функционалност, проста заявка SELECT към базата от данни и функция за подреждане ORDER BY датите на поръчките. Всяка една поръчка има статус, които показва дали тази поръчка е осъществила разплащане с банката. За да вземем статуса от заявката използваме CASE клауза към нея. Всяка една поръчка има опция чрез която администратора може да направи подробна справка за всяка една поръчка, към кой хотел принадлежи тя, за колко дни и цената й, може да изтрива дадена поръчка и да дава „ръчно” одобрение на поръчка която не е била одобрена от банката. За изтриването ще правим заявка DELETE към базата от данни с WHERE като подаденият параметър ще е id то подаден от GET параметър.
Фигура 22

Детайлната страница за дадена поръчка изглежда по следният начин. Нейната функционалност ще се осъществява като се прави SELECТ заявка придружена с CROSS JOIN като в WHERE клаузата е GET параметъра id то на поръчката, към заявката ще използваме и функция SUM за сумиране на цените за дадените дни.
Фигура 23


Този модул, визуализира всички новини, които са добавени от администратора и се виждат във външната част на сайта. Те могат да се редактират, да им се прикачват снимки и да се изтриват. Също така има и опция за добавяне на нови. За визуализирането използваме проста заявка SELECT. За редактирането използваме заявка UPDATE като в WHERE клаузата й е id-то, подадено чрез GET параметър. За изтриването на дадена новина ще ползваме DELETE заявка и в WHERE клаузата е id-то на новината. За добавяне на снимка към новина ползваме INSERT или DELETE заявки и функция за качване на файл move_uploaded_file() и md5 функция за придаване уникалност на името на файла.
Фигура 24

Този модулът е за текстовите части на сайта, това са страници във външната част на сайта на които текста им е константен, тоест неговото местоположение е точно на определено място в дадената страница. Тези текстове могат да бъдат редактирани или изтривани. Към тях може да се прибавят неограничен брой снимки. Редактирането им се осъществява чрез заявка UPDATE и в WHERE клаузата се придава GET id-то на даденият текст.
Фигура 25

И на последно място модулът за излизане, той не представлява определена страница, а неговата функция е да следи сесията на логнатият администратор и след определено време да се саморазрушава или да бъде разрушена ръчно, чрез кликване на link-а излез. Разрухаването на сесията става с функция destroy() като придаденият й параметър е сесията на влезналият администратор.


    1. Сподели с приятели:
1   2   3   4   5   6   7   8   9   10




©obuch.info 2024
отнасят до администрацията

    Начална страница