Mi az a PrizeX
A PrizeX egy PHP-alapú nyeremény-, játék- és piactérplatform: aukciók, lottó, mystery boxok, játéktermi játékok, több eladós webáruház és pénztárca-/érmegazdaság — mindez egyetlen önhosztolt alkalmazásban. Bővítmény- és sablonarchitektúrára épül, admin felülettel és 38 fizetésiátjáró-bővítménnyel, amelyek lefedik a kártyás, pénztárcás, kriptós és regionális szolgáltatókat, valamint a rendszermag által előre felvett 3 manuális fizetési móddal.
Nincs SaaS-függőség: a saját tárhelyedre telepíted, tiéd az adatbázis, és a licenc élethosszig tartó frissítéseket ad. Minden vertikum (aukciók, lottó, mystery boxok, játékok, bolt) egymástól függetlenül be- és kikapcsolható az admin felületről — egy friss telepítés futhat egyetlen vertikumra szűkített termékként vagy a teljes csomagként is.
A rendszermag kódja soha nem függ szorosan egyetlen bővítménytől sem. Minden vertikum, fizetési átjáró és közösségi belépés egy-egy bővítmény a plugins/ könyvtárban, amely aktiválható, deaktiválható vagy törölhető anélkül, hogy az oldal többi része elromlana.
Táblaelőtag: tbl_, nincs ORM, többnyire prepared statementek. Minden bővítmény a sajátjaként birtokolja és maga migrálja a tábláit egy idempotens db_delta() telepítőn keresztül.
Mire van szükség a futtatásához
A PrizeX elfut szokásos megosztott tárhelyen vagy VPS-en — az URL-átírásra képes webszerveren túl semmilyen különleges szerverbeállítás nem kell.
* A database/migrations/ könyvtár több fájlja a csak MariaDB-ben elérhető ADD COLUMN IF NOT EXISTS kiterjesztést használja. A sima MySQL 8.0/8.4 visszautasítja — adatbázisnak fejlesztésben és éles környezetben egyaránt MariaDB-t használj.
Friss telepítés beüzemelése
Friss telepítéshez nincs varázsló — közvetlenül importálod a sémát, és beállítod a környezeti fájlt.
- Telepítsd a PHP-függőségeket:
composer install - Másold le a környezeti sablonfájlt, és töltsd ki az adatbázis hozzáférési adatait:
cp .env.example .env - Importáld a
database/production.sqlfájlt abba az adatbázisba, amelyet a.envfájlban megadtál — ez hozza létre a teljes sémát. - Cseréld le az előre felvett admin fiókot (lásd az alábbi figyelmeztetést), majd lépj be a
/admin/címen.
database/production.sql tartalmaz egy tbl_admin sort (admin@wowcodes.in), amelynek jelszóhashe minden telepítésen ugyanaz. Élesítés előtt töröld, és vedd fel a sajátodat:
php -r "echo password_hash('your-password', PASSWORD_BCRYPT), \"\n\";"DELETE FROM tbl_admin;
INSERT INTO tbl_admin (username, email, password, image, status, permission_settings)
VALUES ('yourname', 'you@example.com', '<hash from the command above>', '', 1, 1);Helyi fejlesztéshez a beépített PHP-szerver Apache nélkül is működik: php -S localhost:8000 router.php — vedd figyelembe, hogy ez a szerver teljesen figyelmen kívül hagyja a .htaccess fájlt, ezért a router.php kézzel valósítja meg ugyanazokat az útvonalszabályokat (lásd: Webszerver beállítása).
Környezeti változók
Minden környezetfüggő beállítás a .env fájlban van, amelyet a vlucas/phpdotenv tölt be. Másold a .env.example fájlt .env néven (ezt a git figyelmen kívül hagyja), és környezetenként add meg a valódi értékeket — a séma importálása előtt legalább az adatbázis hozzáférési adatait.
Az egész oldalra vonatkozó, nem környezetfüggő beállítások (alkalmazásnév, pénznem, aktív bővítmények, aktív sablon és a vertikumonkénti kapcsolók) az adatbázisban, a tbl_settings táblában vannak, és nem fájlokban, hanem az admin felületen kezeled őket.
Webszerver beállítása
Az útvonal- és biztonsági szabályokat — beszédes URL-ek, a .env/connection.php/naplófájlok közvetlen elérésének tiltása, és annak megakadályozása, hogy a feltöltött tartalom PHP-ként fusson le — a projekt egészében a .htaccess fájlok tartalmazzák. Az Apache és a LiteSpeed/OpenLiteSpeed natívan olvassa őket.
nginx alatt használd az nginx.conf.example fájlt, amely mindegyik szabályt leképezi egy nginx server{} blokkba — a server_name, a root és a PHP-FPM socket értékét igazítsd a saját környezetedhez.
.htaccess (éles), a router.php (helyi php -S fejlesztői szerver) és az nginx.conf.example (nginx) egymástól függetlenül valósítja meg ugyanazokat az útvonalszabályokat. Ha új beszédes URL-es útvonalat veszel fel, mindhármat frissítened kell.
Kérésarchitektúra
Minden áruházi oldal (index.php, item.php, …) az includes/header.php fájlon keresztül indul el, ebben a sorrendben:
A connection.php elindítja a munkamenetet, a .env hozzáférési adataival mysqli-kapcsolatot nyit, a tbl_settings tartalmát olyan konstansokba tölti be, mint az APP_NAME és a CURRENCY, majd belépteti az aktuális felhasználót, és rögzít egy eszközujjlenyomat-sort. A plugins_load() elindítja az összes aktív bővítményt, és elsüti a plugins_loaded hookot — ezen a ponton derül ki, hogy valójában mely vertikumok aktívak, ezért ellenőrzi utána a header.php a régi beállításkapcsolókat (bolt, több eladós mód, aukció, lottó) a bővítmények tényleges aktív állapotához képest.
Az admin felület nem duplikálja ezt az indítási folyamatot — az admin/includes/connection.php beállítja az adminra jellemző munkamenet- és hibakezelést, majd beemeli ugyanazt a gyökérben lévő includes/connection.php fájlt.
Bővítményrendszer
Egy bővítmény nem más, mint a plugins/<slug>/plugin.php — a fájl elején lévő megjegyzésben tárolt metaadat, amelyet a rendszer a fájl futtatása nélkül olvas ki —, plusz egy opcionális plugin.json a részletesebb katalógusadatokhoz. Az aktív bővítmények JSON-tömbként a tbl_settings.active_plugins mezőben vannak.
- A táblák tulajdonlása — minden bővítmény saját
includes/schema.phpfájlt definiál, amely aktiváláskor fut le, és az idempotensdb_delta()segédfüggvényt használja (CREATE TABLE IF NOT EXISTS+ kizárólag bővítőALTER TABLE ADD COLUMN). Egy bővítmény soha nem nyúl egy másik bővítmény tábláihoz. - A regiszterek töltődnek be előbb — az
add_admin_page, azadd_route, azadd_cron_job, azadd_api_routeés aregister_modulemind definiálva van, mielőtt bármelyik bővítmény betöltődne, így egy bővítmény legfelső szintű hívásai akkor sem okoznak végzetes hibát, ha a bővítmény végül inaktív marad. - Tiszta eltávolítás — a bővítmény törlésekor lefut az
uninstall.phpfájlja, és eltűnik a mappája; aplugins/<slug>/könyvtáron kívül semminek nem szabad kötelezően megkövetelnie a fájljait, így az oldal többi része a bővítmény nélkül is tovább működik.
Sablonrendszer
Egy sablon az assets/themes/<slug>/ könyvtárban él — manifest.php, theme.css, a sablon hookjaihoz functions.php, és opcionálisan egy components/ mappa. Az aktív sablont a tbl_settings.active_theme tárolja; ha nincs beállítva, a tartalék az editorial.
A komponensek feloldása ebben a sorrendben történik: először az aktív sablon saját components/ mappája, aztán a bővítmény register_module() hívásában megadott komponenskönyvtára, végül a közös, gyökérben lévő components/. A gyakorlatban ez azt jelenti, hogy a közös alapváltozat egyszer szerepel a components/ mappában, és bármelyik sablon — vagy aktív vertikumbővítmény — felülírhat egy adott komponensútvonalat a saját másolatával.
Adatbázis
Táblaelőtag: tbl_, nyers mysqli, többnyire prepared statementek. Az SQL-fájlok, mérvadóság szerinti sorrendben:
database/core-schema.sql— kézzel karbantartva, kizárólag a rendszermag tábláival; a vertikumok és a bővítmények tábláit szándékosan nem tartalmazza.database/production.sql— generált fájl (az alapséma + minden bővítmény saját telepítőrutinja, egy üres próbaadatbázisból kimentve). Friss telepítéskor ezt importálod.database/sandbox.sql— demó- és kezdőadatok helyi fejlesztéshez.database/migration.sql— összevont, idempotens frissítőszkript a már meglévő telepítésekhez.database/migrations/<slug>/up.sql(+down.sql, ahol visszafordítható) — migrációnként egy-egy fájl.
Modulok
Minden modul ugyanabban a telepítésben érkezik, és egymástól függetlenül kapcsolható be-ki az admin felületről.
Aukciók
Élő licitálás több eladós eladói portállal és jutalékmotorral. Alapbővítmény: plugins/auction.
Lottó
Szelvényes sorsolások állítható időzítéssel, nyereményekkel és nyertesértesítésekkel. Alapbővítmény: plugins/lottery.
Mystery box
Szabadon összeállítható nyereményalapok felfedő animációkkal — a felhasználó megvesz egy dobozt, és azonnal látja, mit nyert. Bővítmény: plugins/mystery-box.
Játékok és jutalmak
Egy játéktermi játékcsomag a games/ könyvtárban, plusz aktivitás- és keresetnövelő bővítmények:
Bolt és piactér
Több eladós webáruházréteg akciós és értékesítéstámogató eszközökkel. Alapbővítmények: plugins/shop, plugins/multivendor.
Pénztárca, érmék és befektetés
Platformszintű pénztárca, amelyen minden modul osztozik.
Ajánlások és jutalmak
Belépés, bizalom és megfelelőség
Segédeszközök
Admin felület
Az admin felület az admin/ könyvtárban él, és nem duplikálja az áruház indítási folyamatát — beállítja az adminra jellemző munkamenet- és hibakezelést, majd beemeli ugyanazt a gyökérben lévő includes/connection.php fájlt. Az oldalak az add_admin_page() függvénnyel regisztrálnak, amely gondoskodik az oldalsávi menüpontról, a jogosultság-ellenőrzésről, a CSRF-védelemről és a bejelentkezési keretről; a csak adminra érvényes JSON-műveletek az add_admin_ajax() függvénnyel regisztrálnak, és az admin/ajax.php?action=<slug> címen keresztül futnak.
Tételek, bannerek, oldalak, menük, blog.
Automatikus és manuális átjárók kezelése, manuális fizetések ellenőrzése, kifizetési exportok.
Felhasználói csoportok, szerepkörök, eladói adatok, felhasználó nevében való belépés.
Tranzakció-, rendelés- és felhasználóexportok, cron-naplók, hibakövetés, admin tevékenységnaplók.
E-mail-kampányok, sablonok, hírlevelek, push értesítések, értesítési napló.
Bővítmények és sablonok aktiválása/deaktiválása, oldalankénti SEO-beállítások, az egész oldalra vonatkozó beállítások.
Áruházi sablonok
Öt sablon érkezik az assets/themes/ könyvtárban, telepítésenként átválthatóan az admin felületről. Minden sablon a saját components/ mappájában tartja a közös komponensek saját másolatát.
Egyszerű, modern megjelenés fehér kártyákkal és lágy árnyékokkal — biztonságos, sokoldalú választás szinte bármilyen bolthoz.
Letisztult, magazinos megjelenés meleg papírtónusokkal és határozott tipográfiával, igényes és bizalomkeltő áruházhoz.
Alapértelmezett tartaléksablonMerész, luxusos sötét sablon aranyszínű kiemelésekkel — izgalmas, prémium hangulatra tervezve.
Meleg, gazdagon díszített megjelenés a hagyományos piacterek ihletésével, jobbról balra író nyelvek támogatásával.
Kísérteties, ünnepi szezonális megjelenés — mélylila háttér, izzó töknarancs kiemelésekkel.
Fizetési átjárók
A 38 automatikus átjáró bővítményekben él — mindegyiknek saját plugins/gateway-<slug>/ mappája van, és az add_payment_gateway() hívással regisztrálja magát a rendszermagban. Ha aktiválsz egyet, az egyszerűen működik; a fizetési elosztóban (payment_processor.php) semmi nincs konkrét átjáróra huzalozva.
A 3 manuális fizetési mód a rendszermagból előre felvett, gateway_type = 'manual' sor, amelyekhez nincs beállítandó init/verify kód — csak fizetési utasításokat vagy QR-kódot jelenítenek meg. A manual-gateway-builder bővítménnyel az admin további egyedi manuális fizetési módokat vehet fel anélkül, hogy a kódhoz nyúlna.
Néhány átjáró (Stripe, Razorpay, Midtrans, Venmo) egy render hookot is regisztrál azokhoz a fizetési folyamatokhoz, amelyekhez kliensoldali JS kell — például a Stripe Checkout indításához, vagy egy olyan Razorpay-/Midtrans-/Braintree-SDK-hoz, amelynek előbb szerveroldalon létrehozott rendelésazonosítóra vagy tokenre van szüksége. Az összes többi átjáró mindenféle plusz rendszermagbeli huzalozás nélkül működik.
API- és AJAX-rétegek
api/v1/— JWT-hitelesítésű REST API a mobilalkalmazásnak és a külső felhasználóknak. Azapi/v1/middleware/*.phpellenőrzi azAuthorization: Bearer <token>fejlécet. A bővítmények azadd_api_route()hívással veszik fel a saját végpontjaikat.ajax/— munkamenet-sütivel hitelesített belső AJAX az áruház saját JS-kódjának (kosár, kuponok, értesítések). Nincs tokenréteg — aconnection.phpáltal létrehozott PHP-munkamenetre támaszkodik.- A gyökérben lévő, laza
api/— vegyes, nem verziózott végpontok, például ageo_location.php, azexchange-rate.phpés azofferwall_postback.php.
Mobilalkalmazás
A mobile/ egy külön Capacitor + Ionic projekt — WebView-burok az élő oldal köré, nem önálló SPA, és nem is pusztán az api/v1 fogyasztója. A capacitor.config.ts fájljában a server.url a te domainedre mutat. Saját package.json fájlja van, és nem a projekt gyökeréből épül:
cd mobile
npm run sync
npm run open:ios
npm run open:androidFrissítés és migrációk
Készíts biztonsági mentést, mielőtt éles adatbázison lefuttatnád a database/migration.sql vagy bármelyik database/migrations/<slug>/up.sql fájlt:
mysqldump --single-transaction -u<user> -p<pass> <db> > pre-deploy-$(date +%Y%m%d-%H%M%S).sqlA legtöbb migrációhoz tartozik egy down.sql, amely pontosan az adott változtatást vonja vissza. Néhánynál, amely nem csak szerkezetet ad hozzá, hanem a meglévő adatokat alakítja át, a down.sql ehelyett csak azt dokumentálja, miért nem csinál semmit — ezeknél az élesítés előtti mentésből állítsd vissza az adatbázist, ha vissza kell lépned.
Biztonsági tudnivalók
- Az importálás után azonnal cseréld le az előre felvett admin hozzáférési adatokat (lásd: Telepítés).
- A
.env, aconnection.phpés a naplófájlok közvetlen HTTP-elérését a mellékelt.htaccess- és nginx-szabályok tiltják — ne vedd ki ezeket a szabályokat. - A feltöltött tartalmat úgy szolgáljuk ki, hogy az ne futhasson le PHP-ként; ezt a webszerver konfigurációja kényszeríti ki, nem az alkalmazás.
- A fizetési átjárók hozzáférési adatait átjárónként az admin felületen állítod be, és a szerveroldalon tároljuk — soha nem kerülnek ki az áruház felületére.
Tesztelés
Nincs PHPUnit-tesztcsomag. A composer test a bin/run-probes.php szkriptet futtatja, amely összegyűjti az includes/_probes/ könyvtárban és az egyes bővítmények saját _probes/ mappájában lévő összes probe_*.php fájlt, mindegyiket külön CLI-alfolyamatként futtatja, és ellenőrzi a kilépési kódját.
composer test # run every probe
php plugins/<slug>/_probes/probe_*.php # run a single probe directly
php bin/run-probes.php --all # also run destructive probes (skipped by default)Gyakori kérdések
Támogatás és források
Elakadtál, vagy olyasmire van szükséged, amit ez az oldal nem fed le?