Korkusuz portal php modu. PHP'de modüler programlama veya küçük bir portalın nasıl yazılacağı

  • 03.11.2019

Eklenti kullanabilen siteler yazmaya nasıl yaklaştığımı burada açıklamaya çalışacağım. Buna bir örnek, ünlü PHPNuke betiğidir. Onu ne kadar azarlarlarsa azarlasınlar, içinde benimsenen yaklaşım modüler programlama için çok uygundur. Ancak ortak kodun beceriksizliği nedeniyle, böyle bir komut dosyasının çok sayıda ziyaretçiye sahip ciddi sitelerde veya daha doğrusu portallarda kullanılması önerilmez. Neden? Niye? Komut dosyası yavaş çalışıyor, veritabanında çok büyük bir yük var. Tarif edilecek daha çok şey var, ancak bu başka bir makale için malzeme. İlgilenen varsa, İnternet bu motorun açıklamalarıyla doludur. PHPNuke'de kendimi ikna ettim. Ana NVIDIA BIOS Koleksiyonu projem başlangıçta PHPNuke'ye dayanıyordu, ancak sürekli barındırma sorunları beni portal sistemimi sıfırdan geliştirmeye başlamaya zorladı. PHPNuke'den sadece modüllerin özünü alıyorum, geri kalan her şeyi kendim yaptım. Ve böylece başlamak için. Öncelikle katalog sistemi üzerinden neyin nerede yatacağını düşünmek gerekiyor. İşte bir örnek.

/mods/ - modülleri depolamak için dizin
/img/ - resimler
/include/ - yardımcı dosyalar dizini
Şu anda ihtiyacımız olan şey bu. Henüz blokları ve görünümleri kullanmayacağız. Portalımda başka dizinler de vardı

/bloklar/ - Ayrıca bir tür modüller, ancak bilgileri kendileri görüntülemezler, ancak doldurulmuş bir değişken döndürürler.
/js/ - Java betikleri için dizin
/theme/ - tema seçim dizini veya kabaca söylemek gerekirse, site için bir dizi dış görünüm.
/files/ - indirilecek dosyalar
yanı sıra diğer dizinler.

Kök dizinde yalnızca bir index.php dosyası saklanır ve tüm işler bu dosya üzerinden yapılır. Şimdi sitenin kendisinin nasıl görüneceğine karar vermemiz gerekiyor. Örneğimiz için en basit tasarım seçeneği uygundur, sitenin üst kısmı, sitenin altı ve ortasındaki modüllerden bilgilerimiz. Bunu yapmak için, include dizininde, sırasıyla tasarımın üst kısmı ve tasarımın alt kısmı olacak olan top.php ve bottom.php adlı iki dosya oluşturacağız.

Eko"< html> < head> < meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> < title>$PAGE_TITLE< /title> < /head> < body> < table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1"> < tr> < td width="100%" colspan="2" bgcolor="#DDFFFF"> < p align="center">başlık burada gösteriliyor< /td> < /tr> < tr> < td width="17%" align="left" valign="top" bgcolor="#FFDFFF"> < b>site menüsü< /b>< p> < b>- < /b>< a href="index.php?mod=mod1">Modül1< /a> < br> - < a href="index.php?mod=mod2">Modül 2< /a>< /td> < td width="83%" align="left" valign="top">";

Neden HTML kodunu ayrı ayrı değil, php'yi ayrı ayrı neden çıkaracağımı söyleyecekleri yorumları öngörüyorum. Kendimi %100 PHP kodu yazmaya alıştırdım, bir yandan çok hoş görünmeyebilir ama benim için daha uygun. Birisi farklı yazmak isterse, o zaman burada danışman değilim. top.php'deki $PAGE_TITLE değişkenine dikkat edin. Benim uygulamamda, modüller hakkındaki tüm bilgiler veritabanında saklanır, burada modül dosya adına ek olarak adı da saklanır ve bu daha sonra tarayıcı kafalarında görüntülemek için $PAGE_TITLE içine konur.

Eko"< /td> < /tr> < tr> < td width="100%" align="left" valign="top" colspan="2" bgcolor="#DDFFFF"> < /td> < /tr> < /table> < /body> < /html>";

Ayrıca bir config.php yapılandırma dosyası oluşturacağız ve bunu include dizinine koyacağız.

#Varsayılan modül $sys_def_mod="mod1";

İşte index.php'nin nasıl çalıştığına dair örnek bir şema

include("inc/config.php"); if (!isset($mod) || ($mod=="") || (!file_exists ("mods/$mod.php"))) ( $mod=$sys_def_mod; #$mod değişkeninin var olup olmadığını kontrol edin, ve böyle bir modülün varlığı # eğer koşul yanlışsa, ona modülün varsayılan değerini atayın ) $PAGE_TITLE="(!LANG:Module $mod"; include("inc/top.php"); include("inc/$mod.php"); include("inc/bottom.php"); !}

Şimdi mod1.php ve mod2.php olmak üzere iki dosya oluşturalım ve bunları mods dizinine koyalım.

If (!eregi("index.php", $PHP_SELF)) ( die ("Erişim reddedildi"); ) echo "Bu, 1 numaralı modül!< br>"; yankı "A< a href="index.php?mod=mod2">burada< /a>2 numaralı modüle bakabilirsiniz";

If (!eregi("index.php", $PHP_SELF)) ( die ("Erişim reddedildi"); ) echo "Bu, 2 numaralı modül!< br>"; yankı "A< a href="index.php?mod=mod1">burada< /a>1 numaralı modüle bakabilirsiniz";

Bu satırı biraz açıklayayım.

If (!eregi("index.php", $PHP_SELF)) ( die ("Erişim reddedildi"); )

Modül dosyasının index.php'nin dışında çağrılmasını önlemek için her modüle böyle bir kontrol eklenmesi arzu edilir. Portalımın örneğinde, modülü çağırmadan önce veritabanında bir bağlantım var, bazı genel değişkenleri okuyorum ve onlar olmadan hiçbir modül kendi başına çalışamaz. Bu nedenle, modülün doğrudan çağrılmasını önlemek en iyisidir. Bu durumda modüllerin çağrılması, index.php?mod=modül adı biçimindeki bir satır aracılığıyla yapılır, ancak burada CNC sistemini de kullanabilirsiniz. Ardından URL, index.php/modül adı/ gibi görünecektir.

Burada, prensip olarak, modüllerin uygulanması için çok kaba bir şema var. Herhangi bir modülü basitçe mods/ dizinine koyarak ve genel çalışma konseptine bağlı kalarak ekleyebilirsiniz, çok karmaşık bir site oluşturun. İşin kolaylıkları nelerdir? Aslında, tasarımın üzerine kodu çekmek gibi asıl kaygıyı kendinizden uzaklaştırıyorsunuz. Bunu index.php'de bir kez yapar. Modülün kendisi yalnızca çalışmalı ve faydalı olmalıdır. Bir veri tabanından veya yapılandırma dosyasından, genel site değişkenlerinden, kullanıcı bilgilerinden vb. temel bilgileri toplamanın merkezileştirilmesi. Öte yandan, dezavantajlar da vardır (belirli bir bakış açısından dezavantaj gibi görünmese de), örneğin, yanlışlıkla üzerine yazmamak için modülden önce hangi değişken adlarının kullanıldığını dikkatlice izlemek gerekir. modülün içinde. Bir kere bu benim başıma geldi. Böyle bir durumdan sonra, sistem değişkenlerini $sys_variable name biçiminde adlandırmayı bir kural haline getirdim. Diğer bir bariz dezavantaj, farklı modüller için farklı tasarım seçeneklerini uygulamanın zorluğudur. Fakat! Bir çıkış yolu da var.

Kural olarak, her modülün sitenin üstbilgisini ve altını kendisi görüntülemekle yükümlü olduğunu kabul edersek, o zaman size zaten neyin ve nasıl görüntüleneceğini seçme özgürlüğü verilir.

Örneğin basit modüllerimiz bu şekilde değiştirilebilir.

If (!eregi("index.php", $PHP_SELF)) ( die ("Erişim reddedildi"); ) $PAGE_TITLE="(!LANG:Benim, modül numarası 1!!!"; include("inc/top.php"); echo "Это модуль номер 1!!}< br>"; yankı "A< a href="index.php?mod=mod2">burada< /a>2 numaralı modüle bakabilirsiniz"; include("inc/bottom.php");

Hey Millet! Uzun zamandır görüşmüyoruz değil mi? Pekala, bir süredir meşguldüm, ama hadi bunu yoldan çekelim.

Greenlight neredeyse sona ererken, kendimize onun bizim için ne kadar harika şeyler yaptığını hatırlatalım.İnsanların modları oynamasının tek yolu, bir indirme sayfasına gidip onu manuel olarak steam'e yüklemekti (btw harika bir sistem, kendine ait bir sistemi vardı) steamapps'deki klasör). Bu çoğunlukla kulağa kolay gelse de, orada sizin henüz sizi tanımayan insanların aslında buhara modlar yükleyebilecekleri yerlerde, her şeyi bozan buhar borusu güncellemesinden bahsetmiyorum bile.

Ve sonra yeşil ışık geldi. Pek çok korkunç oyun, tartışma ve aylık steam drama festivali için evet bir kapı olmasına rağmen, aslında pek çok işe yaradı. Pek çok bağımsız geliştirici, sonunda oyunlarını herhangi bir PC oyuncusu için pazar yerine koyma şansı buldu. Ve modlar bundan faydalandı. Modların varlığından bile haberdar olmayan, onları nasıl kuracaklarını bilmeyen veya bozuk bir modu nasıl düzelteceklerini bilemeyen insanlar, sonunda en sevdikleri oyunları daha fazla oynama şansı buldular. Bu BÜYÜKtü, birçok youtuber modları oynayalım ve sonunda onları oynamanın kolay bir yolunu yaptı. 2015 Oyun Ödülleri'nde ödül kazanan PS: Mel olayı bile vardı.

Birçok mod da bundan faydalandı. Temel oyunun kurulu olmasına gerek kalmadan, insanların herhangi bir hata konusunda endişelenmesine gerek yoktu çünkü Valve, modun gerçek bir oyun (steam için) olarak kabul edilmesine yardımcı oldu ve atölye uygulaması ve başarılar gibi şeylere izin verdi.

Peki yeşil ışığın bitmesi bizim için ne anlama geliyor?

Steam Direct, 100 $ ve Valve'ın onayı karşılığında herhangi bir oyunu Steam'e koymanıza izin veren tamamen yeni bir sistemdir. 100 $'lık ücret, sizin ve ekibinizin modunuz üzerinde yapabileceğiniz onca işten sonra hiçbir şey değildir ve ücret bölünebilir. neyse, ama mesele ücret değil, yeni sistem aslında yeni oyunlar ve modlar için daha iyi bir ağ geçidi anlamına gelecek.

Ancak bir ton harika modun gelmesiyle birlikte, yeni modlar için yeni bir kaynak bulmanız gerekecek. Modlar artık yeşil ışık yakmayacağından bu koleksiyon artık güncellenmeyecek. Yine de kontrol edebileceğiniz birkaç web sitem var.

Hatırlayabildiğim kadarıyla en uzun süredir devam eden Portal 1 & 2 topluluğu. Sadece en yetenekli insanlara sahip değiller, aynı zamanda topluluktan tüm insanlara da sahipler. Serideki her iki oyun için BÜYÜK harita veritabanından bahsetmiyorum bile, her yerde tek haritaları indirmek için en iyi kaynak. Ayrıca iyi eğlenceler! Onlar harika insanlar.

http://www.moddb.com/ - sadece portal hayranları için değil, benim için moddb herhangi bir Valve oyunu modu için gidilecek yoldu. Herhangi bir düzenlemeleri yoktur, ancak geniş bir listedeki tüm modları özgürce keşfedebilirsiniz ve birkaç filtre ile zaten yararlanabileceğiniz çok büyük bir indirme listeniz olur.Modb'de ayrıca insanların sahip olmadığı birkaç mod vardır. bunları kendi başıma keşfetmeyi ve oynamayı sevdiğimi duyun. Portalın telefon kullanmanıza izin veren bir Çince modu olduğunu biliyor muydunuz? Bu arada harika.

Evet arkadaşlar sanırım bu kadar. Her yerde görüşürüz ama bunun portal topluluğu için bir şey ifade ettiğini düşünmeyin. Aslında bu pek bir şeyi değiştirmeyecek! İnsanlar modlar yapmaya devam edecek ve siz de bunlardan keyif almaya devam edeceksiniz. Daha iyi bir yöntemle! Görüşürüz,

DÜZENLEME: Portallar forumu ile düşünen insanlarla konuşmak isterseniz, onların uyumsuzluklarını da kontrol edin.

3.6K

Eklenti kullanabilen siteler yazmaya nasıl yaklaştığımı burada açıklamaya çalışacağım. Buna bir örnek, ünlü PHPNuke betiğidir. Onu ne kadar azarlarlarsa azarlasınlar, içinde benimsenen yaklaşım modüler programlama için çok uygundur. Ancak ortak kodun beceriksizliği nedeniyle, böyle bir komut dosyasının çok sayıda ziyaretçiye sahip ciddi sitelerde veya daha doğrusu portallarda kullanılması önerilmez. Neden? Niye? Komut dosyası yavaş çalışıyor, veritabanında çok büyük bir yük var. Tarif edilecek daha çok şey var, ancak bu başka bir makale için malzeme. İlgilenen varsa, İnternet bu motorun açıklamalarıyla doludur. AT<неудобоваримости>PHPNuke kendimden emin oldum. Ana NVIDIA BIOS Koleksiyonu projem başlangıçta PHPNuke'ye dayanıyordu, ancak sürekli barındırma sorunları beni portal sistemimi sıfırdan geliştirmeye başlamaya zorladı. PHPNuke'den sadece modüllerin özünü alıyorum, geri kalan her şeyi kendim yaptım. Ve böylece başlamak için. Öncelikle katalog sistemi üzerinden neyin nerede yatacağını düşünmek gerekiyor. İşte bir örnek.

* /mods/ - modülleri depolamak için dizin
* /img/ - resimler
* /include/ - yardımcı dosyalar dizini

Şu anda ihtiyacımız olan şey bu. Henüz blokları ve görünümleri kullanmayacağız. Portalımda başka dizinler de vardı

* / bloklar / - Ayrıca bir tür modüller, ancak bilgileri kendileri görüntülemezler, ancak doldurulmuş bir değişken döndürürler.
* /js/ - Java betikleri için dizin
* /theme/ - temaları seçmek için dizin veya kabaca konuşursak, site için bir dizi dış görünüm.
* /files/ - indirilecek dosyalar

yanı sıra diğer dizinler.

Kök dizinde yalnızca bir index.php dosyası saklanır ve tüm işler bu dosya üzerinden yapılır. Şimdi sitenin kendisinin nasıl görüneceğine karar vermemiz gerekiyor. Örneğimiz için en basit tasarım seçeneği uygundur, sitenin üst kısmı, sitenin altı ve ortasındaki modüllerden bilgilerimiz. Bunu yapmak için, include dizininde, sırasıyla tasarımın üst kısmı ve tasarımın alt kısmı olacak olan top.php ve bottom.php adlı iki dosya oluşturacağız.

$PAGE_TITLE

başlık burada gösteriliyor

site menüsü

- Modül1
- Modül 2

"; ?>

Neden HTML kodunu ayrı ayrı değil, php'yi ayrı ayrı neden çıkaracağımı söyleyecekleri yorumları öngörüyorum. Kendimi %100 PHP kodu yazmaya alıştırdım, bir yandan çok hoş görünmeyebilir ama benim için daha uygun. Birisi farklı yazmak isterse, o zaman burada danışman değilim. top.php'deki $PAGE_TITLE değişkenine dikkat edin. Benim uygulamamda, modüller hakkındaki tüm bilgiler veritabanında saklanır, burada modül dosya adına ek olarak adı da saklanır ve bu daha sonra tarayıcı kafalarında görüntülemek için $PAGE_TITLE içine konur.



"; ?>

Ayrıca bir config.php yapılandırma dosyası oluşturacağız ve bunu include dizinine koyacağız.

İşte index.php'nin nasıl çalıştığına dair örnek bir şema

Şimdi mod1.php ve mod2.php olmak üzere iki dosya oluşturalım ve bunları mods dizinine koyalım.

"; echo "Burada 2 numaralı modüle bakabilirsiniz"; ?> mod2.php"; echo "Burada 1 numaralı modüle bakabilirsiniz"; ?>

Bu satırı biraz açıklayayım.

if (!eregi("index.php", $PHP_SELF)) ( die ("Erişim engellendi"); )

Modül dosyasının index.php'nin dışında çağrılmasını önlemek için her modüle böyle bir kontrol eklenmesi arzu edilir. Portalımın örneğinde, modülü çağırmadan önce veritabanında bir bağlantım var, bazı genel değişkenleri okuyorum ve onlar olmadan hiçbir modül kendi başına çalışamaz. Bu nedenle, modülün doğrudan çağrılmasını önlemek en iyisidir. Bu durumda modüllerin çağrılması, index.php?mod=modül adı biçimindeki bir satır aracılığıyla yapılır, ancak burada CNC sistemini de kullanabilirsiniz. Ardından URL, index.php/modül adı/ gibi görünecektir.

Burada, prensip olarak, modüllerin uygulanması için çok kaba bir şema var. Herhangi bir modülü basitçe mods/ dizinine koyarak ve genel çalışma konseptine bağlı kalarak ekleyebilirsiniz, çok karmaşık bir site oluşturun. İşin kolaylıkları nelerdir? Aslında, tasarımın üzerine kodu çekmek gibi asıl kaygıyı kendinizden uzaklaştırıyorsunuz. Bunu index.php'de bir kez yapar. Modülün kendisi yalnızca çalışmalı ve faydalı olmalıdır. Bir veri tabanından veya yapılandırma dosyasından, genel site değişkenlerinden, kullanıcı bilgilerinden vb. temel bilgileri toplamanın merkezileştirilmesi. Öte yandan, dezavantajlar da vardır (belirli bir bakış açısından dezavantaj gibi görünmese de), örneğin, yanlışlıkla üzerine yazmamak için modülden önce hangi değişken adlarının kullanıldığını dikkatlice izlemek gerekir. modülün içinde. Bir kere bu benim başıma geldi. Böyle bir durumdan sonra, sistem değişkenlerini $sys_variable name biçiminde adlandırmayı bir kural haline getirdim. Diğer bir bariz dezavantaj, farklı modüller için farklı tasarım seçeneklerini uygulamanın zorluğudur. Fakat! Bir çıkış yolu da var.