- Katılım
- 26 Mar 2024
- Mesajlar
- 2,809
- Tepkime puanı
- 141
- Puanları
- 63
- İlişki Durumunuz
- Sizene
- Burcunuz
- Balık
- Takım
- Fenerbahçe
- Konu Yazar
- #1
SMF Paketlerin Manuel Kurulumu
A. Modların yükleme / kaldırma / çalışma prensipleri
B. Neden modlar her temaya olmaz?
C. Modlar istenilen temaya nasıl uygulanır? Nasıl manuel kurulur?
C.1- Mod paketlerinin içeriği
C.1.1- package-info.xml ve içerdiği komutların anlamları
Genel komutlar
C.1.1.1- require-dir ve require-file komutları
C.1.1.2- code komutu
C.1.1.3- remove-dir ve remove file komutları
C.1.1.4- move-dir ve move-file komutları
C.1.1.5- create-dir ve create-file komutları
C.1.2- .mod veya .xml uzantılı dosyalar ve içerdikleri komutların anlamları
C.2- Uygulama
C.2.1- .mod uzantılı dosyalara sahip paketlerle uygulama
C.2.1.1 <edit file> </edit file>
C.2.1.2 <search for> </search for>
C.2.1.3 <add after> </add after>
C.2.1.4 <add before> </add before>
C.2.1.5 <replace> </replace>
C.2.1.6 <append> </append>
C.2.2- .xml uzantılı dosyalara sahip paketlerle uygulama
C.2.2.1 <file> komutu
C.2.2.2 <operation> komutu
C.2.2.3 <search> komutu
C.2.2.4 <add> komutu
D. Bir adet de örnek verelim
Bu rehberi nasıl kullanmalıyız?
Başlamadan önce bu yazıyı okumanız ve kendinize uygun olan seçenekleri seçmenizi tavsiye ederim.
Öncelikle bilmeniz gereken, bu rehberi kullanmak için İngilizce bilmenize, PHP kodlayabilmenize vs.. gerek yok.
Bu rehberde, bir modu otomatik kurulum (paket yöneticisi) ile kuramıyorsanız manuel kurmayı nasıl yapabileceğinizi öğreneceksiniz. Ya da modu otomatik kurduysanız ama başka tema kullanıyorsanız, kendi temanıza nasıl uygulayabiliceğinizi, yani kendi temanızda çalıştırmayı sağlamayı öğreneceksiniz. Kısacası, modun kurulum paketi içindeki ifadelerin ne demek olduğunu öğreneceksiniz.
Peki bu rehber nasıl kullanılmalı?
1- SMF’e ve içindeki dosyalara aşina değilim, bu işlerde tamamıyla yeniyim: İşe ana başlıkları, yani A ve B’yi okuyarak başlayın. Daha sonra C’ye geçin ve C bittikten sonra etkileşimli olarak D ile C’yi kıyaslayın. (D örnek bir mod kurulumudur) Genel Komutlar isimli bölümü, C.1.1.x ’i okumayın.
2- SMF ve dosyalarına az çok aşinayım: Ana başlıkları okumanıza pek gerek yok. Yine de A’yı okumanızı tavsiye ederim, B’yi geçin. Eğer aşinalık yanında İngilizce de biliyorsanız, D’yi de geçin. (Eğer İngilizce bilmiyorsanız ve dosyalara da aşina değilseniz, sakın Genel Komutlar isimli bölümü okumayın, kafanızı çok karıştıracaktır.)
Az çok aşina olduğunuz için sadece C.2.x ’i okumanız yeterli.
3- Dosyalara çok aşinayım ve az çok İngilizce de biliyorum: Mod paketindeki .xml ve .mod dosyalarını açın, okumaya başlayın ve yönergeleri takip edin. Zevk olsun diye buradaki ana başlıkları (A. B. ve D.) okuyabilirsiniz.
4- İngilizce biliyorum ama dosyalara aşina değilim. : O zaman ana başlıklardan önce A ve B’yi okumanızı, daha sonra da C.2.x ’i okuyarak modu kurmanızı, takılırsanız D’deki örneğe bakarak kıyaslama yapmanızı tavsiye ederim.
5- Burada anlatılanlardan hiç ama hiç bir şey anlamıyorum.. : O zaman buradaki yazıları okumayın. Sizin yapmanız gereken, indirmiş olduğunuz mod paketindeki .xml ve varsa .mod uzantılı dosyaları açmak ve içinde karşılaştığınız tagleri ( tag demek, <> işaretleri arasında kalan komut demek) burada arayıp (CTRL + F) ne işe yaradığını öğrenmektir.
6- Yukarıdaki 5 kategoriden hiç birine girmiyorum: O zaman kendi durumunuzu belirtip soru sormaktan çekinmeyin. Ama yerinizde olsam ilk önce rehberi baştan sona okurdum
A. Modların yükleme / kaldırma / çalışma prensipleri
Modlar, içinde sadece ve sadece kod parçaları olan paketlerdir. Ek olarak resim de içerebilirler. Bu kodlar, pakete eklenen belli komutlarla, paketi yazan tarafından belirlenen yerlere yerleşirler, veya belirlenen yerden bir kodu değiştirirler, veya da belirlenen yerden bir kısım kodu çıkartırlar. Böylece, mod dediğimiz, forumun kaynak koduna entegre olur. Dolayasıyla, işletim sisteminize bir program kurmaktan çok başka bir olaydır foruma mod yüklemek. Doğrudan forumun kaynak koduyla oynandığı için, modların çakışma olasılığı, forumun bozulma olasılı, modun çalışmama olasılığı veya bozuk çalışma olasılığı her zaman vardır. Yükleme ve çalışma prensibi bundan ibaret, en kısa açıklamayla. Kaldırma işlemi ise, eğer pakette tanımlanmış ise (ki artık herkes tanımlıyor) önceden yapılan işlemin geri alınması, yine tanımlanmış ise, sonradan eklenen dosyaların geri silinmesidir.
B. Neden modlar her temaya olmaz?
Hepiniz karşılaşıyorsunuz bu meseleyle, bir mod kuruyorsunuz ama çalışmıyor.. Neden? Çünkü modlar varsayılan veya varsayılan artı klasik tema için yazılıyor.
Peki bunun sebebi nedir? Bunun sebebi;
B.1- Temaların, (diğer bir ifadeyle skinlerin) sonradan yazılıp eklenilmiş olmasıdır. Yani, herkesin sitesinde varsayılan tema vardır, ama herkesin sitesinde sonradan yapılan / eklenen temalar yoktur.
B.2- Temalar da birbirlerinden az veya çok farklı dosyalar içerirler. Yukarıda da modların kurulum prensibini anlattık; doğrudan kaynak koduyla oynandığı için, birbirlerinden farklı olan temalar, aynı kodlara da sahip olmadıklarından dolayı aynı kurulumu gerçekleştiremeyebilirler. Mesela bir mod, foruma falanca dosyada filanca kodu bul ve onu değiştir komutunu gönderir, ama sizin sonradan eklediğiniz temada o filanca kod olmayabilir. İşte sorunlar başlıyor.
Sonuç olarak, özellikle bir temada çalışmak üzere yazılmamış modlar ancak varsayılan temada çalışır. Eğer modun yazarı diğer temalara göre de paket hazırlarsa, elbette o zaman paket yükleme yöntemiyle, diğer temada da çalışır. Ancak bu uzun iştir. Çünkü diğer temayı da incelemesi lazımdır ve ona göre değişik kodlar yazmalıdır.
C. Modlar istenilen temaya nasıl uygulanır? Manuel nasıl kurulur?
Diyeceksiniz ki, madem ki kaynak koduyla oynuyoruz ve madem ki her tema değişik dosyalara sahip olabiliyor, o zaman biz nasıl varsayılan tema için yazılmış olan modu başka temaya uygulayacağız? Bu, hemen hemen her zaman kolay bir iştir. Çünkü temalar farklı kodlara sahip olabilirler ama farklı temele sahip değiller; hepsinin üzerine bina edildiği yapı aynıdır. Çünkü tema yapanlar, oturup en başından kod yazmıyorlar. Varsayılan temanın dosyaları üzerinde değişiklikler yaparak kendi temalarını oluşturuyorlar. Değişiklik dediysem, sadece renkleri ve resimleri değiştirmek değil elbet; gerekince büyük miktarda kod değişimleri yapılır, bazı fonksiyonların işleyişi değişebilir veya bazı yeni özellikler eklebilir bazı eskileri ise atılabilir.
C.1- Paketlerin içeriC.1.1-package-info.xml, modumuz hakkında bilgi içerir ve bizim için paketten çıkarılacak dosyaların nereye çıkartılacaklarını söyler.
Genel Komutlar
<readme> </readme> – Bu komut, mod hakkında bilgi içeren yazıları kapsar. Manuel kurulum için anlam ifade etmez aslında. <readme type=”inline”> veya <readme type=”file”> şeklinde olabilir. Inline denilmişse, bilgiler package-info.xml dosyasındadır. Eğer file denilmişse şöyle bir yapıdadır: <readme type=”file”>okubeni.txt</readme> Bu da demektir ki mod paketinde okubeni.txt isimli bir dosya var ve mod hakkında yazardan bilgiler içeriyor..
<install> </install> – Modu manuel kuruyoruz değil mi? O zaman bu komutlar arasında kalan şeyler bizi ilgilendiriyor. <install for=”SMF 1.0.5″> şeklindeki ifadeler, bu modun, ancak orada yazılı forum sürümlerine uygulanabileceğini ifade eder.
<modification> </modification> – Modu kurmaya başladık, bu komut onun ifadesidir. <modification type=”file”> ifadesi, yapacağımız değişikliklerin package-info.xml dışında bir dosyada saklandığını ifade eder. Bu dosyanın kim olduğunu, <modification format=”boardmod”> .mod uzantılı dosyalar, <modification format=”xml”> .xml uzantılı dosyalar olarak ifade eder. <modification reverse=”true”> ise, modu manuel kaldırmak istersek, burada yaptığımız işlemlerin tam tersini yapmamız gerektiğini ifade eder. Ör: <modification type=”file” reverse=”false” format=”boardmod”>deneme_mod.mod</modification> Burada kod türü dosya (file) olarak ifade edilmiş ve bu dosya (yani kurulum bilgileri) deneme_mod.mod isimli dosyada saklanıyor denmiştir.
<uninstall> </uninstall> – Modu manuel kaldırmak istiyorsak bu komutlar arasında kalan şeyler bizi ilgilendiriyor. <uninstall for=”SMF 1.0.5″> şeklindeki ifadeler, bu modun, ancak orada yazılı forum sürümden bu şekilde kaldırılabileceğini ifade eder.
<upgrade> </upgrade> – Modun bir önceki sürümünden yeni sürümüne yükseltme yapılacağını ifade eder. Örneğin modun 1.2 versiyonunu kurmuşsunuz ve 1.3 versiyonu çıkmış. Modu kaldırmayıp, manuel olarak 1.3 versiyonuna güncellemek istiyoruz. Çünkü karşımızda şöyle bir komut var: <upgrade from=”1.2″ for=”SMF 1.0.5″> Burada, modun 1.2 ’den yükseltileceği ve bu işlemin SMF 1.0.5 sürümü için geçerli olduğu ifade edilmiş.
C.1.1.1- require-dir ve de require-file komutları
Ör:
Kod: <require-dir name=”resimler” destination=”$imagesdir” />
<require-file name=”resim.jpg” destination=”$imagesdir/resimler” />
Bu örneğin birinci komutunda mod, paketin içinden resimler isimli klasörü çıkardı ve /Themes/default/images içerisine attı ve ikinci komutunda o resimler klasörüne resim.jpg isimli dosyayı attı.
C.1.1.2- code komutu. Bu komut içinde kalan kalan dosyanın çalıştırılacağı anlamına gelir.
Ör:
<code>deneme.php</code>
Burada, deneme.php dosyası önce forum klasörüne atılır, daha sonra tarayıcıdan bu dosya açılmış gibi çalıştırılır. (mod kurulurken) Ama biz şu anda modu manuel kurmayı anlattığımız için kendimiz çalıştıracağız. Yani, deneme.php dosyasını paketten çıkarıp foruma atacağız, sonra da bir defaya mahsus olmak üzere bu dosyayı tarayıcıdan çalıştıracağız. Ör:
Ziyaretçiler için gizlenmiş link,görmek için
Giriş yap veya üye ol.
C.1.1.3- remove-dir ve remove-file komutlarC.1.1.4- move-file ve move-dir komutlar
Kod: <move-dir name=”oyunlar” from=”$boarddir” destination=”$boarddir/Packages” />
<move-file name=”oyun1.exe” from=”$boarddir” destination=”$boarddir/Packages/oyunlar” />
Burada forum klasöründe oyunlar isimli bir klasör ve oyun1.exe isimli bir dosya varmış. Komutlar bize diyor ki; oyunlar isimli klasörü $boarddir (yani forum ana klasörü)nden al, /Packages klasörüne at.
Şimdi /Packages/oyunlar diye bir klasörümüz oldu. oyun1.exe isimli dosyayı da forum klasöründen al, /Packages/oyunlar klasörüne koy..
C.1.1.5-create-dir ve create-file komutları Bu komutlar, dosya (file) ve klasör (dir) yaratmamız gerektiğini ifade eder.
Ör: <create-dir name=”oyunlar” destination=”$boarddir” /> burada yapılacak olan, forum ana klasöründe oyunlar isimli bir klasör oluşturmak.
C.1.2- .mod veya .xml uzantılı diğer dosya, değişikliklerin yapılacağı komutları içrerir, aşağıda inceliyoruz.
C.2- Uygulama
C.2.1- .mod uzantılı dosyalara sahip paketlerle uygulama
Şimdi ilk iş, paketin içinden .mod uzantılı dosyayı çıkarıp bir text editörü ile düzenliyoruz. Herhangi bir editör olabilir; notepad, word, wordpad gibi.. Ancak kodların kodlama diline göre renklendirilmesi açısından gelişmiş bir kodlayıcı kullanmanızı tavsiye ederim. ConTEXT gibi.
C.2.1.1<edit file> </edit file> dosya düzenle demek tir ve düzenleneyeceğimiz dosyayı burada öğreniriz.
Arasına gelebilecek ifadeler şunları içerecek,
$themedir => bu bizim varsayılan tema klasörümüz. Yani /Themes/default
$boarddir => bu bizim forumumuzun ana klasörü. Yani /
$sourcedir => bu bizim kaynak klasörümüz. Yani /Sources
$languagedir => bu bizim dil dosyalarımızın olduğu klasördür. Yani /Themes/default/languages
$imagesdir => bu bizim temamızıa ait tüm resimler / ikonlarımızın bulunduğu klasörümüzdür. Yani /Themes/images
Ör:
Kod: $themedir/index.template.php demek, /Themes/default/index.template.php demek.
$boarddir/classic/index.template.php demek /Themes/classic/index.template.php demek
C.2.1.2<search for> </search for> “ara” demektir ve değiştirilecek / silinecek / önüne – sonuna kod eklenecek kodları arar.
C.2.1.3<add after> </add after> “bulunan kodun sonuna ekle” demektir ve <search for> komutu ile aranılıp bulunan kodlardan sonra <add after> </add after> işaretleri arasında bulunan kodlar eklenir. (Dosyaya eklenir.)
C.2.1.4<add before> </add before> “öncesine ekle” demektir ve bir üstteki komutla aynı işi yapar fakat bu defa <search> komutu ile bulunan kodların hemen üstüne ekleme yapar.
C.2.1.5<replace> </replace> “değiştir” demektir. Bu komutlar arasındaki kod alınır ve <search for> komutuyla bulunan kodun yerine koyar. (Yani aranıp bulunan kodu kaldırır onun yerine replace komutu içindeki kodları koyar)
C.2.1.6 <append> </append> dosyanın sonuna ekle demektir. Bu ifadeler arasında kalan kodlar, dosyanın sonuna, ?> işaretlerinden önce eklenir.
C.2.2 .xml uzantılı dosyalara sahip paketlerle uygulama
.xml dosyası içinde olaylar biraz daha karışık ama zor değil, ben modlarımı xml ile yazmaya çalışıyorum
C.2.2.1 <file name= ile başlayan satırlar, düzenlenecek dosyaları belirtir.
Ör: <file name=”$themedir/Display.template.php”> şu dosyayı düzenle demek, /Themes/default/Display.template.php
C.2.2.2 <operation> bir dosyanın düzenlenmeye başlandığını gösterir es geçiyoruz. Başka bir <file… ibaresi gelene kadar her <operation> o aynı dosya içinde yapılacak diğer değişiklikleri kasteder.
C.2.2.3 <search position=””> aranacak kodları ifade eder.
Ör:
Kod: <search position=”before”><![CDATA[global $context;]]></search>Bu örnekte dosyamızın içinde “global $context” ibarelerini arayacak ve sonuna da eklememiz gereken kodları ekleyecekmişiz. <![CDATA[ ]]> ifadeleri kodu içeren kalıplardır onları bir yerde aramıyor, bir yere de eklemiyoruz. (Evet, orada before yazıyor ama sonuna ekleyeceğiz..) Ne ekleyeceğiz? Devam edelim…
C.2.2.4 <add> bu ifade de işte bir üstte bulduğumuz kodun sonuna (veya <search position=”after”> olarak tanımlansaydı başına, <search position=”replace”> olarak tanımlansaydı yerine) ekleyeceğimiz kodları barındırıyor. Not: Eğer arama, <search position=”end”> olarak tanımlanmışsa, o zaman <add> </add> komutları arasında kalan kod, ilgili dosyanın sonuna, ?> işaretlerinden önce eklenir. Genellikle dil dosyaları için <search position=”end”> kullanılır.
Ör:
Kod:
<add>
<![CDATA[
echo ’
<script language=”JavaScript” type=”text/javascript”>]]>
</add>
Demek ki yeni düzenimiz şöyle olacak:
Kod:
global $context
echo ’
<script language=”JavaScript” type=”text/javascript”>
Kaldırdığım sembollere dikkat!
İşte modların hikayesi bu kadar. Karmaşık olmadı umarım, en basit şekliyle, gereksiz yerleri atlayarak anlatmaya çalıştım, sorunuz olursa sormaktan çekinmeyin.
D. Bir adet de örnek verelim
Ör:
Kod: <edit file>
$themedir/MessageIndex.template.php
</edit file>
Demek ki /Themes/default klasöründeki MessageIndex.template.php dosyasıymış değiştireceğimiz.
Hemen o dosyayı sitemizden bilgisayarımıza indiriyoruz. Sonra neresini değiştirmemiz gerektiğine bakıyoruz. Bu defaki ifade, <search for> olacak.
Ör:
Kod: <search for>
$result = db_query
</search for>
Demek ki, dosyamız içinde bu ifadeyi arayacağız (search). Peki sonra ne yapacağız? Yapmamız gereken işlemi yine bize bir komut anlatacak: <add after>
Demek ki, yukarıda arayıp bulduğumuz koddan sonra buradaki kodu ekleyeceğiz (add ekle demek)
Ör:
Kod: <add after>
if ($context[‘user’][‘is_logged’])
</add after>
Demek ki, bu işlemi yaptığımızda yeni dosyamızda kodlar şu şekilde olacak:
Kod:
$result = db_query
if ($context[‘user’][‘is_logged’])
Atıyorum eğer mod başka bir işlem yapmıyorsa, şimdi bu bilgisayarımızdaki dosyayı sunucumuza geri yüklüyoruz ve modu kurmuş oluyoruz. Mod böylece, varsayılan temaya yüklenmiş oldu. Yani paketten kurmakla aynı işlemi yaptık. Dikkat ederseniz, varsayılan tema içindeki dosyayı düzenledik. Şimdi de hangi temaya modu uygulamak istiyorsak, o temanın aynı isimli dosyasında aynı işlemleri yapmalıyız.