И така, този уеб пакет е моето детенце. Буквално. От 2010-та година е в зародиш, тогава бях започнал да му пиша регистрация и класации.
Наскоро гледах кодовете и ми стана лошо, толкова съм бил неопитен. Сега не съм най-добрия програмист на света, разбира се, но имам самочувствието, че прилагам логични и сигурни решения.
Уеб пакета беше пренаписан изцяло от нулата за срок от 1 седмица (7 дни) по около 4-5 часа на ден. Не работих служебните си задачи, а правих това.
За това време завърших:
- CMS ядро;
- Регистрация;
- Логин;
- Вдигане на точки;
- Ресет с проверка на инвентар;
- Класации с лимит 50;
- Проверка дали сървъра е онлайн с fsockopen;
- Misc статистики като тотал герои, акаунти и т. н.
Така както имах една основа и реших да го пусна на моя сървър, които работи от 11.02.2018 и ресетнах на 16.11.2018. От тогава този уеб пакет е live. На една локална машина си правя новостите и като всичко вече работи и е наред го мятам на официалния домейн.
Искам да споделя с Вас, защото съм уверен, че тук се подвизават много мислещи и логични умове, някои подходи и технологии, които съм решил да използвам, за да видя различните мнения и евентуално поле за подобрение Ето ги и тях:
Инсталирал съм си PDO екстеншън на PHP-то и с един и същ код работи на win, което ми е девелпомънт средата и на linux, което ми е хостинга. Много важно беше за мен да е OK на linux. Връзката става като си създавам един клас PDO и после в отделните функции го викам с global. Не затварям конекцията накрая, може да ми препоръчате добър начин за това.
CMS-а съм го решил да следва подобен на MVC модел, но по мой си начин, а именно
- 1 папка с контролери, controller;
- 1 папка с функции, които да се ползват от контролерите, modules;
- 1 папка с темплейт файлове.
Отделно имам спомагателна папка includes, в която имам, ще го нарека “ядрото” на системата, т. е. PHP функции, които обработват GET заявките, езика и други.
Та начина на работа е следния:
Когато напишеш в браузъра anhimu.eu/register, скрипта чете какво става след чертата и проверява дали съществува такъв файл в папка controller. В случая имаме register и го инклудвам. От там register контролера си инклудва негов файл от папка modules, където са само функции. Направил съм си един файл common.php, където да са функциите за всяка страница и вече са отделните страници, където имаме специфични функции - отделни файлове. Това не знам колко смисъл има, но съм го правил с идеята файловете да са множество, но малки по размер и да е по-лекичко. След като се изпълнят необходимите функции и изчисления имам една функция load_template, която според текущия темплейт от конфиг файла зарежда съответния темплейт файл. Темплейт файловете са php, но вътре се прави само echo и foreach. С идея да може лесно да се правят нови темплейти дори от по-неопитни хора.
Цялото това нещо е обвито от логика за използване на ajax за зареждане на страниците, т. е. когато е включен ajax-a от кофиг файла (true/false), зареждаме само в главния контейнер съдъражието на отделните модули, без хедър и футър. Зарежда много бързо. Сложил съм си таймер от 200 милисекунди, за да няма спам рекуести към сървъра ако го нацъкаш няколко пъти - това си е в javascript-a и е общодостъпно - може да се разгледа още сега.
И така, после имам една изключително готина функция за превод:
translate(string, “Descriptive text”)
Какво става тук:
първия параметър е кратък slug на самия превод, който е записан в XML файл заедно с всички преведени текстове. Функцията търси във вече заредения XML за този ред и ако го няма, прави echo на втория параметър и го записва в XML файла. Този метод на работа много ми харесва, защото ако правя нови неща из сайта винаги ми се ъпдейтва файла с превода и е винаги последна версия. Тоест, забравям за него като ангажимент, в един момент като реша да превеждам сайта ще стане много лесно и после ако правя допълнения, пак ще се допълват в другите езици най-отдолу на английски. Пример: translate(‘ucp_reg_done’, ‘Account registered. You may now login’);
Ако го нямаме това в XML-a просто ще се добави най-долу а английски и може да се преведе.
Секюритито на SQL куеритата: разчитам изцяло на PDO prepare. Преди се слагаха разни кавички и други боклуци, но след солидно проучване в stackoverflow и други подходящи места, разбрах че с prepared statements няма нужда от нищо повече. Към потенциални недоброжелатели: на лайв сайта и сървър си правя бакъп веднъж дневно на цялата база на две места, така че: няма смисъл. Към всички останали: Вие бихте ли сложили още един слой защита и какъв?
Днес имах приключения да подкарам изпращане на e-mail през xampp пакет без допълнителни екстеншъни и с минимални настройки, но не успях. Ще се опитам да го направя или ще избера най-лесния екстеншън. Идеята ми тук е да имам вградена mailing система, която да работи еднакво лесно и на win и на linux. Защото ако някой пожелае да ползва системата и е на windows, там също трябва да работи.
Планирам за в бъдеще:
CMS ядро:
- интелигентен кеш (не като на muonlinewebs - ползвал съм и не съм доволен);
MU-related:
- забравена парола - смяна с пращане на мейл и token за кликване и ресетване;
- четене на новини от базата (ще имам отделна база за сайта, най-чисто ми изглежда така - и 2010-та бях тръгнал по този начин);
- админ панел за управление на различни неща - в момента барам по файловете, което не ми е проблем, но ако го ползват и други хора ще е необходим;
- маркет за продажба на предмети;
- депозиране на камъни и тем подобни пт/към сайта и играта - както е в уебс;
- търг;
- класация гилдии.
Друго сега не се сещам.
Моля, колегите програмисти да изкажат мнението си относно похватите на работа, които съм преразказал тук.
Моля, сървър администраторите и играчите да изкоментират списъка на функции и какво трябва още да има.
Моля за предложения за функции, които са уникални и много добри като идея, но не са реализирани в другите сайтове.
Аз си мислех за някаква класация на партита - да гледа играчите през определено време и които хора са близко един до друг като координати и качват горе-долу по еднакъв начин да ги смята, че са в парти - такова нещо наистина няма (май) ама ми се вижда доста безполезно.
Функциите с инвентар и items са ми още непознати - взех жокер от декодираната версия muonlinewebs и си го имплементирах по мой начин, но и горе и долу трябва да е празно, за да те пусне да реснеш (инвентара). В бъдеще ще го направя да е само горе. Като го разуча. Items и guild mark се декодират и изобщо не съм наясно там какво става, предстои да разучавам. Но със сигурност ми се иска да има market на предмети и търг, нещо от сорта.
Та така, проектът стигна до тук. Затова хората са казали: по-добре късно, отколкото никога. Ще продължавам да добавям неща, защото ми работи и на сървъра. Когато го почувствам достатъчно добро като функции и защита, ще споделя ако има желаещи да пробват!
Ето live демо:
https://anhimu.eu
(изглежда много постно като сайт, но започваш да гледаш на него с други очи като прочетеш по-горе цялата му концепция и амбициозната идея, която притежава).
Поздрави и очаквам Вашите мнения, проектът е интересен и ще го разцъквам от време на време.
П. С. За сега поддръжката на версия ще е максимум 99.60, защото моя сървър е на нея, но няма да е трудно да се вкарват нови неща от новите версии - нещата се пишат с мисъл за мулти-съвместимост и много настройки в config файла.
Сори за телефонските скрийнове ама писах мнението през телефона.
П. С. 2 Почнах да разглеждам другите теми тук и видях, че много хора са писали за респонсив. Този сайт ще е 100% респонсив с използване на най-новите bootstrap и jquery, зареждани през CDN за по-голяма бързина (може да сложа един switch в конфига за CDN on/off че понякога пада bootstrap CDN и става зле)
П. С. 3 Сайтът се разработва на най-новото PHP 7.2, MSSQL 2008 и работи със сигурност на най-новия xampp под windows 7 и apache пакет под ubuntu 18.04 (най-новото в момента).