10TL.NET

Orjinalini görmek için tıklayınız: MyBB Eklenti Kodlama - 2
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Bir önceki derste, temel olarak bir mybb eklentisi nasıl olur, nasıl görünür onu vermiştim. 
Ancak, verilen eklenti, birşey yapmıyordu. (http://destek.10tl.net/showthread.php?tid=86985)

Şimdi de, hafif birşeyler yapacağız. Zamanla da, yapılabilecek şeyleri geliştireceğiz. 
Öncelikle, temel php bilgisi gerekiyor. yani az çok php bilmeniz lazım, bilmiyorsanız. biraz öğrenmeniz lazım.

Bu derste, eklenti aktifleştirildiğinde çalışan ornek_activate() fonksiyonu içine birşeyler yazalım, birşeyler yapsın. 

Bu fonksiyon içinde, hemen herşeyi yapabiliriz, ama önemli olan, anlamlı bir şeyler yapmak. 
Genellikle bu fonksiyonda, eklentinin ihtiyaç duyduğu ilk işlemler yapılır. Bu da genellikle verideposu işlemleri ve tema editleme işlemleridir. 

Verideposuna birşeyler tanımlamayı daha sonra görelim. Bu derste, sadece basitçe, temadan bir şeyi değiştirmeyi göstereceğim. 

Mesela, temaya, header'dan sonrasına basit bir yazı yazdıralım, bunun kodu şu şekildedir:
PHP Kod:
function ornek_activate()
{
global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
 
find_replace_templatesets("index""#".preg_quote("{\$header}")."#i""{\$header} <br><br>Header Sonrası<br>");

Bu kodu yazdıp mybb ye yükleyince, admip kp'den aktifleştirince, yukarıdaki find_replace_templatesets komutu, tema/şablonlardaki tüm {$header}yazan yerlerin sonuna

Header sonrası yazısı ekleyecektir. 
Buna göre, örnek kodumuzun tamamı şöyle olur:
PHP Kod:
<?php

if(!defined("IN_MYBB"))
{
 die(
"Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

$plugins->add_hook("index_start""ornek_islem");

function 
ornek_info()
{
 return array(
 
'name' => '10tr.net Örnek Eklentisi',
 
'description' => 'Örnektir',
 
'website' => 'http://10tr.net',
 
'author' => '10tr',
 
'authorsite' => 'http://10tr.net',
 
'version' => '1.0' 
 
);
}

function 
ornek_activate()
{
global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
 
find_replace_templatesets("index""#".preg_quote("{\$header}")."#i""{\$header} <br><br>Header Sonrası<br>");
}

function 
ornek_deactivate()
{
 global 
$mybb$db;
 
# Şu anda burası boş, hiçbirşey yapmıyor, ama birçok şey yapabilir..

}


function 
ornek_islem($pluginargs)
{
 global 
$db$mybb$lang$user;
# Şu anda burası boş, hiçbirşey yapmıyor, ama birçok şey yapabilir.. 

}

?>

Bu kodda, eklenti kapanınca onu geri silme kodu yok, onu da yapmamız gerekiyor ki, kullanıcı eklentiyi kaldırınca herşey eski haline dönsün. O da öncekinin tam tersi olacak, şu şekilde:
PHP Kod:
function ornek_deactivate()
{
 global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
 
find_replace_templatesets("index""#".preg_quote("{\$header} <br><br>Header Sonrası<br>")."#i""{\$header}"); 


Burada biz temaya sabit bir yazı yazdık. Aslında çoğunlukla sabit yazı böyle direk yazılmaz, oraya bir değişken yazılır, yani bir şablonun adı yazılır, böylece kullanıcı şablonu kendisi rahatça değiştirebilir. Bu durumda, şablonun da verideposuna eklenmesi gerekir. Bunu yapan ornek_activate kodu şöyledir:
PHP Kod:
function ornek_activate()
{
 global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
$ornek_sablon=array(
 
"title" => "ornek_sablon",
 
"template" => '<br><br>Header Sonrası<br>',
 
"sid" => -1,
 
"dateline" => TIME_NOW 
 
);

 
$db->insert_query("templates"$sohbetpanelivar); # şablonun verideposuna eklenmesi.
 
 
find_replace_templatesets("index""#".preg_quote("{\$header}")."#i""{\$header} {\$ornek_sablon}");

Bu kodda yaptıklarımız şu:
  1. Bir şablon tanımlıyoruz,
  2. Şablonu verideposuna kaydediyoruz,
  3. Şablonun değişken adını tema/şablonlarda header dan sonraya yazıyoruz
Aynı şekilde, şablonu ve değişkenini geri silecek ornek_deactivate kodunun da yazılması gerekiyor ki, o da şöyle:

PHP Kod:
function ornek_deactivate()
{
 global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
 
find_replace_templatesets("index""#".preg_quote(" {\$ornek_sablon}")."#i"""0);

 
$db->delete_query("templates""title = 'ornek_sablon'");




Bunları bir arada yazarsak, sadece şablona birşey ekleyen eklentinin tüm kodu şöyle olur:

PHP Kod:
<?php

if(!defined("IN_MYBB"))
{
 die(
"Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}

$plugins->add_hook("index_start""ornek_islem");

function 
ornek_info()
{
 return array(
 
'name' => '10tr.net Örnek Eklentisi',
 
'description' => 'Örnektir',
 
'website' => 'http://10tr.net',
 
'author' => '10tr',
 
'authorsite' => 'http://10tr.net',
 
'version' => '1.0' 
 
);
}

function 
ornek_activate()
{
 global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
$ornek_sablon=array(
 
"title" => "ornek_sablon",
 
"template" => '<br><br>Header Sonrası<br>',
 
"sid" => -1,
 
"dateline" => TIME_NOW 
 
);

 
$db->insert_query("templates"$sohbetpanelivar); # şablonun verideposuna eklenmesi.
 
 
find_replace_templatesets("index""#".preg_quote("{\$header}")."#i""{\$header} {\$ornek_sablon}");
}

function 
ornek_deactivate()
{
 global 
$mybb$db;

 include 
MYBB_ROOT."/inc/adminfunctions_templates.php";
 
 
find_replace_templatesets("index""#".preg_quote(" {\$ornek_sablon}")."#i"""0);

 
$db->delete_query("templates""title = 'ornek_sablon'");

}


function 
ornek_islem($pluginargs)
{
 global 
$db$mybb$lang$user;
# Şu anda burası boş, hiçbirşey yapmıyor, ama birçok şey yapabilir.. 

}

?>


Bu ikinci yöntemde, eklenti aktifleştirilince, şablonlarda ornek_sablon isminde bir şablonun oluştuğunu göreceksiniz.

10tl.net te kullandığımız sohbet_paneli eklentisi aynen bu şekilde çalışmakta, sadece şablona bir sohbet paneli eklemektedir. 

Burada anlatılan eklenti/kod, şablonu değiştirmekten başka bir şey yapmıyor. İlerde, başka şeyler yapan kodlar da göstereceğiz. 

Siz, şablonun içine, kendi değişkenlerinizi tanımlayıp, daha sonra onların içini de doldurabilirsiniz ki, on da sonra göstereceğim. Öncelikle bunu anlarsanız iyi olur. 

Böylece, eklenti yapımında biraz daha ilerledik. Umarım sizler faydalı/güzel eklentiler yaparsınız ileride. Kendisi mybb kuramayan/kurulu olmayanlar, yazdıkları eklentileri bize gönderirlerse, onları kontrol edip sisteme yükleyebiliriz, denemek için bile yapabilirsiniz. Zaten çok yoğunluk yok şu sıralar. 

Görüşmek üzere.
Teşekkürler hocam, +REP :D
Teşekkürler hocam.
sizden beklemeyen bir şey oldu emeğinize sağlık.
(17-08-2016 Saat: 00:18)kaRanLık-61 Nickli Kullanıcıdan Alıntı: [ -> ]sizden beklemeyen bir şey oldu emeğinize sağlık.

Niye beklenmiyormuş :) az çok kod, pardon mürekkep yalamışlığımız var..
(17-08-2016 Saat: 17:38)admin Nickli Kullanıcıdan Alıntı: [ -> ]
(17-08-2016 Saat: 00:18)kaRanLık-61 Nickli Kullanıcıdan Alıntı: [ -> ]sizden beklemeyen bir şey oldu emeğinize sağlık.

Niye beklenmiyormuş :) az çok kod, pardon mürekkep yalamışlığımız var..

bizi de geçersiniz o konuda :) ondan şüphem yok.
genelde konularınız sizde bakarsanız destek ilgilidir.bir şeyleri anlatımı falan ben burada ortalama 6 yıl oluyor görmedim ilk kez oldu :) İnşallah sizi daha fazla sahalarda görürüz :)
#Güncel :)