PrizeX nedir
PrizeX, PHP tabanlı bir ödül, oyun ve pazar yeri platformudur: açık artırmalar, piyango, gizemli kutular, bir arcade oyun kümesi, çoklu satıcılı bir e-ticaret mağazası ve cüzdan/jeton ekonomisi — hepsi tek bir self-hosted uygulamada. Eklenti/tema mimarisiyle, bir yönetim paneliyle ve kartları, cüzdanları, kriptoyu ve bölgesel ödeme sağlayıcılarını kapsayan 38 ödeme ağ geçidi eklentisiyle birlikte gelir; buna ek olarak çekirdek tarafından eklenen 3 manuel ödeme yöntemi vardır.
SaaS bağımlılığı yok: yazılımı kendi hostinginize kurarsınız, veritabanının sahibi sizsiniz ve lisansla birlikte ömür boyu güncelleme alırsınız. Her dikey (açık artırma, piyango, gizemli kutu, oyunlar, mağaza) yönetim panelinden bağımsız olarak açılıp kapatılabilir — sıfırdan bir kurulum, tek dikeyli bir ürün olarak da tüm paket olarak da çalışabilir.
Çekirdek kod hiçbir zaman bir eklentiye zorunlu olarak bağlı değildir. Her dikey, her ödeme ağ geçidi ve her sosyal giriş, plugins/ altında duran ve sitenin geri kalanını bozmadan etkinleştirilebilen, devre dışı bırakılabilen ya da silinebilen birer eklentidir.
tbl_ tablo ön eki, ORM yok, çoğunlukla hazırlanmış ifadeler. Her eklenti kendi tablolarının sahibidir ve onları idempotent bir db_delta() yükleyicisiyle kendisi taşır.
Neyin üzerinde çalışır
PrizeX, standart paylaşımlı hostingde ya da bir VPS üzerinde çalışır — yeniden yazma (rewrite) destekleyen bir web sunucusu dışında özel bir sunucu yapılandırması gerekmez.
* database/migrations/ altındaki birkaç dosya, yalnızca MariaDB'de bulunan ADD COLUMN IF NOT EXISTS uzantısını kullanır. Düz MySQL 8.0/8.4 bunu reddeder — veritabanı olarak hem geliştirmede hem de canlıda MariaDB kullanın.
Sıfırdan bir kurulumu ayağa kaldırmak
Sıfırdan kurulum için bir kurulum sihirbazı yok — şemayı doğrudan içe aktarır ve ortam dosyasını yapılandırırsınız.
- PHP bağımlılıklarını kurun:
composer install - Ortam şablonunu kopyalayın ve veritabanı kimlik bilgilerinizi girin:
cp .env.example .env database/production.sqldosyasını.enviçinde adı geçen veritabanına içe aktarın — bu, tam şemayı oluşturur.- Hazır gelen yönetici hesabını değiştirin (aşağıdaki uyarıya bakın), ardından
/admin/adresinden giriş yapın.
database/production.sql, parola özeti her kurulumda birebir aynı olan bir tbl_admin satırıyla (admin@wowcodes.in) gelir. Yayına almadan önce bu satırı silin ve kendi hesabınızı ekleyin:
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);Yerel geliştirmede PHP'nin dahili sunucusu Apache olmadan iş görür: php -S localhost:8000 router.php — bu sunucunun .htaccess dosyasını tümüyle yok saydığını unutmayın; bu yüzden router.php aynı yönlendirme kurallarını elle yeniden uygular (bkz. Web sunucusu kurulumu).
Ortam değişkenleri
Ortama özgü tüm ayarlar .env içinde durur ve vlucas/phpdotenv ile yüklenir. .env.example dosyasını .env olarak kopyalayın (git tarafından yok sayılır) ve her ortam için gerçek değerleri girin — şema içe aktarımından önce en azından veritabanı kimlik bilgilerini.
Ortama özgü olmayan site geneli ayarlar (uygulama adı, para birimi, etkin eklentiler, etkin tema ve dikey bazlı anahtarlar) veritabanında, tbl_settings içinde durur ve dosyalardan değil yönetim panelinden yönetilir.
Web sunucusu kurulumu
Yönlendirme ve güvenlik kuralları — okunaklı URL'ler, .env/connection.php/log dosyalarına doğrudan erişimin engellenmesi ve yüklenen içeriğin PHP olarak çalıştırılmasının önlenmesi — proje genelindeki .htaccess dosyalarında tanımlıdır. Apache ve LiteSpeed/OpenLiteSpeed bunları doğrudan okur.
nginx üzerinde nginx.conf.example dosyasını kullanın; bu dosya söz konusu kuralların her birini bir nginx server{} bloğu olarak yeniden üretir — server_name, root ve PHP-FPM soketini kendi ortamınıza göre ayarlayın.
.htaccess (canlı ortam), router.php (yerel php -S geliştirme sunucusu) ve nginx.conf.example (nginx) aynı yönlendirme kurallarını birbirinden bağımsız olarak ayrı ayrı uygular. Yeni bir okunaklı URL eklemek, üçünü birden güncellemek demektir.
İstek mimarisi
Her vitrin sayfası (index.php, item.php, …) şu sırayla includes/header.php üzerinden başlatılır:
connection.php oturumu başlatır, .env kimlik bilgileriyle mysqli üzerinden bağlanır, tbl_settings içeriğini APP_NAME ve CURRENCY gibi sabitlere yükler, ardından mevcut kullanıcıyı ve bir cihaz parmak izi kaydını oturuma alır. plugins_load() etkin her eklentiyi başlatır ve plugins_loaded kancasını tetikler — etkin dikeylerin gerçek ve güncel listesi ancak bu noktada belli olur; header.php de tam bu yüzden eski ayar bayraklarını (shop, multivendor, auction, lottery) sonrasında eklentilerin gerçek etkinlik durumuna göre yeniden kontrol eder.
Yönetim paneli bu başlatma sürecini tekrarlamaz — admin/includes/connection.php yönetime özgü oturum/hata ayarlarını yapar, sonra da kök dizindeki aynı includes/connection.php dosyasını dahil eder.
Eklenti sistemi
Bir eklenti, plugins/<slug>/plugin.php dosyasıdır — dosya çalıştırılmadan okunan başlık yorumu meta verileri — artı daha zengin katalog bilgisi için isteğe bağlı bir plugin.json. Etkin eklentiler tbl_settings.active_plugins içinde bir JSON dizisi olarak saklanır.
- Tablo sahipliği — her eklenti, etkinleştirme sırasında çağrılan kendi
includes/schema.phpdosyasını tanımlar ve idempotentdb_delta()yardımcısını kullanır (CREATE TABLE IF NOT EXISTS+ yalnızca ekleme yapanALTER TABLE ADD COLUMN). Bir eklenti başka bir eklentinin tablolarına asla dokunmaz. - Kayıt defterleri önce yüklenir —
add_admin_page,add_route,add_cron_job,add_api_routeveregister_moduleherhangi bir eklenti yüklenmeden önce tanımlanır; böylece bir eklentinin üst düzey çağrıları, eklenti sonunda etkin olmasa bile asla ölümcül hata vermez. - Temiz kaldırma — bir eklentiyi silmek onun
uninstall.phpdosyasını çalıştırır ve klasörünü kaldırır;plugins/<slug>/dışındaki hiçbir yer onun dosyalarını zorunlu olarak dahil etmemelidir, böylece eklenti gittiğinde sitenin geri kalanı çalışmayı sürdürür.
Tema sistemi
Bir tema assets/themes/<slug>/ altında durur — bir manifest.php, bir theme.css, tema kancaları için bir functions.php ve isteğe bağlı bir components/ klasörü. Etkin tema tbl_settings.active_theme içinde saklanır; hiçbiri ayarlanmamışsa yedek olarak editorial devreye girer.
Bileşen çözümlemesi şu sırayla bakar: önce etkin temanın kendi components/ klasörü, sonra bir eklentinin register_module() ile bildirdiği bileşen dizini, en sonda da paylaşılan kök components/ klasörü. Pratikte bu şu demek: paylaşılan varsayılan yalnızca bir kez components/ içinde durur ve herhangi bir tema — ya da etkin bir dikey eklentisi — belirli bir bileşen yolunu kendi kopyasıyla geçersiz kılabilir.
Veritabanı
tbl_ tablo ön eki, saf mysqli, çoğunlukla hazırlanmış ifadeler. SQL dosyaları, bağlayıcılık sırasına göre:
database/core-schema.sql— elle bakımı yapılan, yalnızca çekirdek tabloları; dikey/eklenti tabloları bilinçli olarak dışarıda bırakılmıştır.database/production.sql— üretilmiş dosya (çekirdek şema + her eklentinin kendi kurulum rutini, boş bir çalışma veritabanından alınan döküm). Sıfırdan kurulumda içe aktardığınız dosya budur.database/sandbox.sql— yerel geliştirme için demo/örnek veri kümesi.database/migration.sql— mevcut kurulumlar için birleştirilmiş, idempotent yükseltme betiği.database/migrations/<slug>/up.sql(geri alınabilen yerlerde +down.sql) — her bir geçiş için tek dosya.
Modüller
Her modül aynı kurulumla birlikte gelir ve yönetim panelinden bağımsız olarak açılıp kapatılır.
Açık artırma
Çoklu satıcılı satıcı portalı ve komisyon motoruyla canlı teklif verme. Çekirdek eklenti: plugins/auction.
Piyango
Yapılandırılabilir takvimler, ödüller ve kazanan bildirimleriyle biletli çekilişler. Çekirdek eklenti: plugins/lottery.
Gizemli kutu
Açılış animasyonlu, yapılandırılabilir ödül havuzları — kullanıcılar bir kutu satın alır ve ne kazandıklarını anında görür. Eklenti: plugins/mystery-box.
Oyunlar ve ödüller
games/ altında bir arcade oyun kümesi ve buna ek olarak etkileşim/kazanç eklentileri:
Mağaza ve pazar yeri
Promosyon ve ürün sunum araçlarıyla çoklu satıcılı bir e-ticaret katmanı. Çekirdek eklentiler: plugins/shop, plugins/multivendor.
Cüzdan, jeton ve yatırım
Her modül arasında paylaşılan, platform genelinde tek bir cüzdan.
Referans ve ödüller
Kimlik doğrulama, güven ve uyumluluk
Yardımcı araçlar
Yönetim paneli
Yönetim paneli admin/ altında durur ve vitrinin başlatma sürecini tekrarlamaz — yönetime özgü oturum/hata ayarlarını yapar, sonra kök dizindeki aynı includes/connection.php dosyasını dahil eder. Sayfalar add_admin_page() üzerinden kaydolur; bu fonksiyon kenar çubuğu girişini, yetki denetimini, CSRF'yi ve oturum çerçevesini üstlenir. Yalnızca yönetime özel JSON işlemleri ise add_admin_ajax() ile kaydolur ve admin/ajax.php?action=<slug> üzerinden çağrılır.
Ürünler, bannerlar, sayfalar, menüler, blog.
Otomatik ve manuel ağ geçidi yönetimi, manuel ödeme incelemesi, ödeme dışa aktarımları.
Kullanıcı grupları, roller, satıcı bilgileri, kullanıcı kimliğine bürünme.
İşlem/sipariş/kullanıcı dışa aktarımları, cron kayıtları, hata takibi, yönetici işlem kayıtları.
E-posta kampanyaları, şablonlar, bültenler, anlık bildirimler, bildirim kaydı.
Eklenti ve temaları etkinleştirip devre dışı bırakma, sayfa bazında SEO ayarları, site geneli ayarlar.
Vitrin temaları
assets/themes/ altında beş tema gelir; kurulum bazında yönetim panelinden değiştirilebilir. Her tema, paylaşılan bileşenlerin kendi kopyasını kendi components/ klasöründe tutar.
Beyaz kartlar ve yumuşak gölgelerle sade, modern bir görünüm — hemen her tür mağaza için güvenli ve çok yönlü bir seçim.
Sıcak kağıt tonları ve net tipografiyle temiz, dergi tarzı bir görünüm; cilalı ve güven veren bir vitrin için.
Varsayılan yedek temaAltın vurgulu, iddialı ve lüks bir koyu tema — heyecanlı ve üst segment hissettirmek üzere tasarlandı.
Geleneksel çarşılardan esinlenen, sıcak ve zengin süslemeli bir görünüm; sağdan sola dil desteğiyle.
Ürpertici, şenlikli bir sezon görünümü — koyu mor zeminler ve parlayan balkabağı turuncusu vurgular.
Ödeme ağ geçitleri
38 otomatik ağ geçidinin her biri bir eklentiye aittir — her biri kendi plugins/gateway-<slug>/ klasöründe durur ve add_payment_gateway() ile kendini çekirdeğe kaydeder. Birini etkinleştirmek yeterlidir; ödeme akışını dağıtan dosyada (payment_processor.php) belirli bir ağ geçidine gömülü hiçbir şey yoktur.
3 manuel yöntem, çekirdek tarafından eklenen ve yapılandırılacak init/verify kodu bulunmayan gateway_type = 'manual' satırlarıdır — yalnızca ödeme talimatlarını ya da bir QR kodu gösterirler. manual-gateway-builder eklentisi, bir yöneticinin kod yazmadan başka özel manuel ödeme yöntemleri eklemesini sağlar.
Bazı ağ geçitleri (Stripe, Razorpay, Midtrans, Venmo) istemci tarafı JS gerektiren ödeme akışları için ayrıca bir render kancası kaydeder — bir Stripe Checkout başlatıcısı ya da önce sunucu tarafında üretilmiş bir sipariş kimliğine veya token'a ihtiyaç duyan bir Razorpay/Midtrans/Braintree SDK'sı. Diğer bütün ağ geçitleri, çekirdekte hiçbir ek bağlantı olmadan çalışır.
API ve AJAX katmanları
api/v1/— mobil uygulama ve dış tüketiciler için JWT ile kimlik doğrulanan REST API.api/v1/middleware/*.php,Authorization: Bearer <token>başlığını doğrular. Eklentiler kendi uç noktalarınıadd_api_route()ile ekler.ajax/— vitrinin kendi JS kodu için (sepet, kuponlar, bildirimler) oturum çerezi ile kimlik doğrulanan dahili AJAX. Token katmanı yok —connection.phptarafından kurulan PHP oturumuna dayanır.- Üst düzeydeki serbest
api/—geo_location.php,exchange-rate.phpveofferwall_postback.phpgibi sürümlenmemiş çeşitli uç noktalar.
Mobil uygulama
mobile/ ayrı bir Capacitor + Ionic projesidir — canlı sitenin etrafına sarılmış bir WebView; ne bağımsız bir SPA ne de yalnızca api/v1 tüketen bir istemci. capacitor.config.ts dosyasında server.url sizin alan adınızı gösterir. Kendi package.json dosyası vardır ve proje kökünden derlenmez:
cd mobile
npm run sync
npm run open:ios
npm run open:androidGüncelleme ve geçişler
Canlı bir veritabanında database/migration.sql ya da herhangi bir database/migrations/<slug>/up.sql çalıştırmadan önce anlık yedek alın:
mysqldump --single-transaction -u<user> -p<pass> <db> > pre-deploy-$(date +%Y%m%d-%H%M%S).sqlÇoğu geçiş, yalnızca o tek değişikliği geri alan eşleşen bir down.sql ile gelir. Yapıya ekleme yapmak yerine mevcut veriyi dönüştüren birkaç tanesinde ise down.sql, neden hiçbir şey yapmadığını açıklamakla yetinir — geri dönmeniz gerekirse bunlarda yayın öncesi aldığınız dökümden geri yükleyin.
Güvenlik notları
- İçe aktarımdan hemen sonra hazır gelen yönetici kimlik bilgilerini değiştirin (bkz. Kurulum).
.env,connection.phpve log dosyaları, ürünle gelen.htaccess/ nginx kurallarıyla doğrudan HTTP erişimine kapalıdır — bu kuralları kaldırmayın.- Yüklenen içerik, PHP olarak çalıştırılamayacak biçimde sunulur; bu kural uygulama düzeyinde değil, web sunucusu yapılandırması düzeyinde uygulanır.
- Ödeme ağ geçidi kimlik bilgileri yönetim panelinden ağ geçidi bazında yapılandırılır ve sunucu tarafında saklanır — vitrine asla açılmaz.
Test
PHPUnit test paketi yok. composer test, bin/run-probes.php dosyasını çalıştırır; bu betik includes/_probes/ altındaki ve her eklentinin kendi _probes/ klasöründeki tüm probe_*.php dosyalarını toplar, her birini bir CLI alt süreci olarak çalıştırır ve çıkış kodunu denetler.
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)Sık sorulan sorular
Destek ve kaynaklar
Hâlâ takıldınız mı, yoksa bu sayfanın kapsamadığı bir şey mi lazım?