MyBBDepo - Türkiyenin MyBB Deposu Forumuna Hoşgeldiniz
Eğer sitemize yaptığınız ilk ziyaretiniz ise, lütfen öncelikle Forum Kurallarını okuyunuz. Forumumuzda bilgi alışverişinde bulunabilmeniz için Kayıt olmalısınız. Üye olmayanlar forumumuzdan yararlanamazlar.
Eğer zaten kayıtlı kullanıcı iseniz, lütfen kullanıcı adınız ve şifreniz ile, Giriş yapınız. (Sitemize üyelik ücretsizdir).
007combatant avatar
Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5

Derecelendirme: 5/5 - 1 oy

MyBB Plugin (eklenti) Yapımı [Detaylı Anatım]


Sponsor Reklam
media venus

Çevrimdışı 007combatant
 Tarih: 16-03-2013, Saat:15:00
(Son Düzenleme: 20-03-2013, Saat:12:01, Düzenleyen: 007combatant.)
#1
MyBB için plugin (eklenti) yapımı - Detaylı + yazılı anlatım konusu

resim

Selamün Aleyküm arkadaşlar. Bugün biraz pluginlerle uğraştım çalışma sistemini inceledim. Öğrenmeye çalıştım. Biraz öğrendim. Şİmdi sizlere öğrendiklerimi anlarmak istiyorum. Plugin yapmayı bilen arkadaşlar bu konu altında bildiklerini paylaşırsa çok sevinirim. Birde şunu söyleyeyim burda anlattıkalrımı kendim deneme yanılmalarla öğrendim yani eğer yanlış anlattığım bir yer olursa kusuruma bakmayın.

Hemen başlayalım.
Öncelikle şu linkten Notepad++ ı indirin.
Kod:
http://notepad-plus-plus.org/download/
Kodları o program ile yazacağız. Bir tane php dosyası açın (programı açın bi kaç harf yazın dosya>Kaydet isim olarak bişey yazın sonuna .php ekleyin örneğin deneme.php) kaydedin. Sonra içine yazdıklarınızı silin. Kodları yazmaya başladan önce plugin utf8 olması için programın üst kısmındaki kodlama'dan UTF-8 (BOM'suz) olarak kodla'yı seçin. Aşağıda yazdığım her kodu programa kopyalayarak orda deneyin çok faydasını görürsünüz.
ÖNEMLİ NOT: Arkadaşlar foruma php taglarıyla eklediğim kodlarda değişiklik olduğunu gördüm onun için code taglarıyla eklemeye karar verdim. Ama yinede siz ekteki dosyalardan kodları alın.
Ekteki dosyaları indirin anlatımı onlarla bereber taki edin.
Not: indirdiğiniz dosyada deneme pluginleri mevcuttur. admin panelinde gözükmeleri için isimlerini deneme.php olarak değiştirmelisiniz.
Arkadaşlar bir kere şunu bilelim mybb php tabanlı bir sistemdir. Tabiki bunun eklentileride php oluyor burada yazdığımız tüm kodlar php kodudur. Onun için pluginimiz şu taglar arasında olacak:

Kod:
<?php
// pluginin kodları
?>
Evet dikkat ederseni // pluginin kodları yazdım yani başını // koyarak. Neden mi? çünkü phpde satırın başına // koyarsanız o satırdaki kodlar geçersiz olur. ve php ye hiçbir etkisi olmaz. Bunun gibi birkaç kod daha var bunlardan bazıları:

Kod:
/**
    @buraya yazılanlar etkisizdir.
    @buraya yazılanlar etkisizdir.
    @buraya yazılanlar etkisizdir.
**/


Kod:
#################################
# buraya yazılanlar etkisizdir.    #
# buraya yazılanlar etkisizdir.    #
# buraya yazılanlar etkisizdir.    #
# buraya yazılanlar etkisizdir.    #
#################################

Şimdi pluginimiz içeriğinden pahsedelim.
öncelikle yukarıdaki etkisiz kodları kullanarak plugin hakkında bilgi verelim.

Kod:
<?php
/**
    @بسم الله الرحمن الرحيم
    @Plugin: deneme plugini 1.0
    @Author: LoDoS
    @Website: Mybb.Com.TR    
**/

?>

Şimdi her eklentide aşağıdaki kod var bunu ekliyoruz.

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

Bu kodun amacı, dosyanın mybb dışında çalışmasını engellemek içindir. Örneğin siteadi.com/inc/plugins/eklenti.php olarak çalıştırmaya çalışırsanız, çıktısı bu olacaktır:
Kod:
Direct initialization of this file is not allowed.

Please make sure IN_MYBB is defined.

ve çalışması engellenecektir. İsterseniz yukarıdaki yazıyı değiştirip başka bir yazı yazabilirsiniz.

Tüm Sistemlerde Mevcuttur. Örnek olarak CI:

PHP Framework Codeigniter'da Güvenlik için tüm dosyaların başina eklenir:
Kod:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Pluginlerde function komutları vardır. Bunlar plugin bilgileri, plugini aktifleştirme, plugini pasifleştirme gibi işlere yarar. Şimdi Plugin bilgileri function komutunu (function deneme_info) kullanacağız.(deneme yazan yeri kendinize göre düzeltin.yanlız bütün functionlara yazdığınız aynı olsun) Bu komut sayesinde Admin panelinde eklentiler kısmında pluginin bilgileri gözükecek.

Not: Yaptığınız plugin'in dosya adı bu function a yazdığınız isim olmalı aksi halde plugin admin panelinde gözükmez.

Kod:
function deneme_info()
{
    return array(
        "name"          => "Buraya pluginin adını yazıyoruz",
        "title"         => "Buraya adını tekrar yazın ama türkçe karekter kullanmayın. burası zaten çoğu pluginlerde yok. isterseniz silin.",
        "description"   => "Buraya plugin açıklaması yazın",
        "website"       => "Eklentinin üstüne tıklayınca açılacak site. Site adresinizi veya forumdaki konunun adresini yazın",
        "author"        => "Buraya Plugin yapımcısı",
        "authorsite"    => "Plugin yapımcısına tıklanınca açılacak site",
        "version"       => "Plugin versiyonu,"
        "guid"          => "Burayı boş bırakın bende anlamadım. ama bazı eklentilerde boş bırakılmış sorun çıkmıyor.",
        "compatibility" => "MyBBnin hangi versiyonuna uyumlu ise onu yazın"
    );
}

//Örnek:

function deneme_info()
{
    return array(
        "name"          => "Deneme plugini",
        "description"   => "Bu eklenti deneme amaçlıdır",
        "website"       => "Http://mybb.com.tr",
        "author"        => "LoDoS",
        "authorsite"    => "Http://mybb.com.tr",
        "version"       => "1.0",
        "guid"          => "",
        "compatibility" => "14*,16*"
    );
}

şimdi pluginimiz şöyle oldu:

Kod:
<?php
/**
    @بسم الله الرحمن الرحيم
    @Plugin: deneme plugini 1.0
    @Author: LoDoS
    @Website: Mybb.Com.TR    
**/

if(!defined("IN_MYBB"))
{
    die("Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
}
//Plugin bilgileri
function deneme_info()
{
    return array(
        "name"          => "Deneme plugini",
        "description"   => "Bu eklenti deneme amaçlıdır",
        "website"       => "Http://mybb.com.tr",
        "author"        => "LoDoS",
        "authorsite"    => "Http://mybb.com.tr",
        "version"       => "1.0",
        "guid"          => "",
        "compatibility" => "14*,16*"
    );
}

?>

Diğer işlemlere geçmeden önce hook olarak kullanılan koddan bahsedeyim. Bu kod kanca kodudur. Bu kod ile MyBBden istediğiniz yerden ayar çekersiniz. Kullanım şekli şöyledir. İlgili fonksiyon kodundan önce aşağıdaki gibi kullanılır:
Kod:
$plugins->add_hook("global_start", "ilgili_fonksiyon");
Hangi bölüm için hangi hook kullanılır görmek için aşağıdaki sayfayı inceleyin.
Kod:
http://docs.mybb.com/MyBB_Plugin_Hooks.html

Şimdi de plugini aktifleştirme kodunu kullanacağız. Bu kodu kullanınca Plugin aktifleşince kodun içindeki işlemler yapılıyor. Kodumuz şu:

Kod:
function deneme_activate()
{
global $db, $mybb;
//Buraya plugin aktifleşince yapılmasını istediğimiz işlemlerin komutlarını yazacağız..
}
deneme kısmını kendinize göre değiştirin.

Not: Yukarıdaki kodda global $db, $mybb; kodu ile mybbden çeşitli bilgiler çağırıyoruz. bunlardan bazıları:
$db :Veri tabanı ile ilgili işlemleri çağırmak için
$lang Açık Ağızlı Gülümsemeil dosyası eklediysek dil dosyasından yazı çağırmak için
$mybb :MyBB genel
$templates :Şablonlar ile ilgili bilgi çağırmak için
Bunun gibi daha bir çok çağırma objeleri var. Ayrıca kendinizde obje oluşturabilirsiniz. Bunu daha ilerlerde anlayacaksınız.
Yapacağınız işleme ait objeleri kullanmazsanız işlem gerçekleşmez. Bu objeleri yapılmış pluginlere bakarak öğrenebilirsiniz.

Şimdi plugini pasifleştirme kodunu gösterelim. Bu kodu kullanınca Plugin pasifleşince kodun içindeki işlemler yapılıyor. Kodumuz şu:

Kod:
function deneme_deactivate()
{
global $db, $mybb;
//Buraya plugin pasifleşince yapılmasını istediğimiz işlemlerin komutlarını yazacağız.
}
deneme kısmını kendinize göre değiştirin.

Şimdi Plugin aktifleşince yapabileceğimiz birkaç şey gösterelim.
Örneğin şablonlara birşey ekleyebilir veya komple değiştirebilirsiniz. Şimdi şablonlara birşey ekleme mantığı şöyledir.
Önce şablondan belirlediğiniz bir kod bulunur sonra o kod sizin yazdığınız kodla değişir ancak siz yerine gelecek olan kodun başına değiştirilen koduda yazınca hiçbirşey silinmeden yeni kod eklenmiş oluyor uzatmadan kodu vereyim inceleyin.
Bu yöntemde ' lardan önce \ kullanıyoruz. Yani \ kullanmak ne demek derseniz şu:
Değiştirilecek şablona eklediğiniz tüm kodlarda; kodların neresinde ' bu kod geçerse onun başına \ eklemelisiniz mesela içerikte şöyle bir kod var:
Kod:
    var fitonpage_on = "{$mybb->settings['cartcurt']}";
{$lang->cartcurt}

Bu kodu şu şekilde değiştiriyoruz.
Kod:
    var fitonpage_on = "{$mybb->settings[\'cartcurt\']}";
{\$lang->cartcurt}

Şimdi diyeceksiniz ki iyi güzelde kodun içerisinde bir sürü " ' $ var hepsini nasıl değiştireceğim onun için ben şöyle bir yöntem kullanıyorum.
Ekleyeceğim kodu (dikkat edin sadece ekleyeceğim kodu) kopyalıyorum Notepad++ da yeni belge açıyorum ona kopyalıyorum ctrl+f kombinasyonuyla arama penceresini açıyorum üstten değiştir sekmesine geliyorum. Aranan kısmına artık değiştirmek istediğim neyse onu yazıyorum mesela " olsun
Aranan: "
Bununla değiştir: \"
yazıyorum tümünü değiştir diyorum ekleyeceğim koddaki tüm " işaretlerinin başına \ ekleniyor.diğerlerinide böyle yapıyorum.
Kodumuz şu:
Kod:
    // şablon düzenleme. Eklentiyi hem aktiflerştirirken hemde pasifleştirken aynı işlemi kullanıyoruz.
    require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

    find_replace_templatesets('varsayılan temada düzenlenecek şablon', '#'.preg_quote('şablonda bulunacak kod').'#', 'şablonda bulunacak kod'."\n".'altına eklenecek kod');

    //    örnek:
    require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

    find_replace_templatesets('index_boardstats', '#'.preg_quote('{$birthdays}').'#', '{$birthdays}'."\n".'{$viewgroups}');
    // Şablon düzenleme tamam
    // Yanlız yukarıdaki işlemi aynı yöntemle eski haline getirmek biraz farklı oda şöyle:
    require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

    find_replace_templatesets('varsayılan temada düzenlenecek şablon', '#'.preg_quote("\n".'altına eklenenmiş olan kaldırılacak kod').'#', '');
    // şablon düzenleme tamam.
    // Örnek:
    require_once MYBB_ROOT.'inc/adminfunctions_templates.php';

    find_replace_templatesets('index_boardstats', '#'.preg_quote("\n".'{$viewgroups}').'#', '');
    // şablon düzenleme tamam.

şimdi örnekte yaptığımız işlem şu: index_boardstats şablonunda {$birthdays} kodunu bulduk altına bunu ekledik.
Şimdi bu şablon değiştirme kodunun alternatifi de var. Alttaki daha iyi sanırım üsttekini şablona bir şey eklerken kullanırsınız alttakini de şablondan bir şeyi değiştirken veya komple değiştirirken kullanırsınız.
Bu yöntemde " lardan önce \ kullanıyoruz. Yani \ kullanmak ne demek derseniz şu:
Değiştirilecek şablona eklediğiniz tüm kodlarda; kodların neresinde " $ bu kodlar geçerse onların başına \ eklemelisiniz mesela içerikte şöyle bir kod var:
Kod:
<input type="hidden" name="modtype" value="cartcurt" />
{$lang->cartcurt}

Bu kodu şu şekilde değiştiriyoruz.
Kod:
<input type=\"hidden\" name=\"modtype\" value=\"cartcurt\" />
{\$lang->cartcurt}

Kodumuz şu:
Kod:
    // Şablon düzenleme en iyisi bu sanırım. Dikkat edin bunlarda \ var mesela {\$header} normal de {$header} böyleydi eğer bu \ ı koymazsanız veya yanlış koyarsanız çalışmaz.
    include MYBB_ROOT."/inc/adminfunctions_templates.php";

    find_replace_templatesets("varsayılan temada düzenlenecek şablon (slash \ koymayı unutmayın)", "#".preg_quote("şablonda bulunacak kod (slash \ koymayı unutmayın)")."#i", "şablonda bulunacak kod (slash \ koymayı unutmayın)")\r\naltına eklenecek kod slash \ koymayı unutmayın");
    //aslında ikinci bulunacak kodu ve altına eklenecek kodu yazdığımız yer komle değişiyor sadece arada satır atlatma kodu var.
    
    //Örnek
    include MYBB_ROOT."/inc/adminfunctions_templates.php";

    find_replace_templatesets("index", "#".preg_quote("{\$header}")."#i", "{\$header}\r\n{\$sablona_git1}");
    // Şablon düzenleme tamam
örnekte yaptığımız işlem şu:
index şablonunundan {$header} kodunu bulduk (bu arada php de bu tür alıntı kodlarına / ekliyor normalde {$header} iken phpde {/$header} buna dikkat edin.)
{$header}\r\n{$sablona_git1} ile değiştirdik (yani {$header} in altına {$sablona_git1} ekledik).

Şablon değiştirmede bir alternatif daha var ancak şuan onda hatalar alıyorum. onun için onu burda vermiyorum.

Şimdi genenl şablonlarda yeni şablon açmayı gösterelim. Bu işlemi benim bildiğim kadarı ile üç şekilde yapabiliyoruz.
Birincisi şu. Aşağıda üç tane genel şablonlara açılan şablon var. Bu şekilde çoğaltılabilir..
Bu her türlü özellik eklemede kulanabileceğimiz yöntem. Şablon eklerken, ayar eklerken,mykod eklerken gibi. Ben her zaman bu yötemi kullanmanızı tavsiye ediyorum şimdilik.
Bu yöntemle şablon içerisine kodları eklerken \ kullanıyoruz. Yani \ kullanmak ne demek derseniz şu:
Şablon içeriğine eklediğiniz tüm kodlarda; kodların neresinde " ' $ bu kodlar geçerse onların başına \ eklemelisiniz. Bunu yapmamısın sebebi "template" => "Şablon içeriği" bakın burda kodun başında ve sonunda " var bunlarla karışmasın diye.
Mesela içerikte şöyle bir kod var:
Kod:
<input type="hidden" name="modtype" value="cartcurt" />
{$lang->cartcurt}
Bu kodu şu şekilde değiştiriyoruz.
Kod:
<input type=\"hidden\" name=\"modtype\" value=\"cartcurt\" />
{\$lang->cartcurt}
Ayar uzantısı eklerken de şu şekilde kullanıyoruz: {\$mybb->settings[\'deneme\']}
Burda ne demek istedğimi ayar ekleme kısmını okuduktan sonra ve ekteki deneme plugin 1.1'i inceledikten sonra daha iyi anlarsınız.
Kod:
//üç tane genel şablonlara açılan şablon var. Bu şekilde çoğaltılabilir..
    //1. şablon
    $sablon0 = array(
        "title" => "Şablon başlığı",
        "template" => "Şablon içeriği",
        "sid" => -1
    );
    $db->insert_query("templates", $sablon0);
    //2. şablon
    $sablon1 = array(
        "title" => "Şablon başlığı",
        "template" => "Şablon içeriği",
        "sid" => -1
    );
    $db->insert_query("templates", $sablon2);
    //3. şablon
    $sablon1 = array(
        "title" => "Şablon başlığı",
        "template" => "Şablon içeriği",
        "sid" => -1
    );
    $db->insert_query("templates", $sablon2);


Bu da ikinci yöntem: kodları iyice inceleyin. anlamanız için elimden geldiğince türkçe kod kullandım.
Bu yöntemde de şablonun içerisine kodları eklerken kodun içerisinde nerede ' geçerse ondan önce / ekliyoruz baştaki ile çakışmasın diye. Ayar uzantısı eklerken şöyle ekliyoruz. {$mybb->settings[\'deneme\']}
Burda ne demek istedğimi ayar ekleme kısmını okuduktan sonra ve ekteki deneme plugin 1.1'i inceledikten sonra daha iyi anlarsınız.
Kod:
    //birinci şablon
    $sablon0 = array(
    // Bu olmayabilir
        "tid" => "NULL",
    // devam
        "title" => "birinci şablon başlığı",
        "template" => $db->escape_string('
birinci şablon içeriği yani şablonun içindeki kodlar'),
        "sid" => "-1",
    );
    $db->insert_query("templates", $sablon0);
    //ikinci şablon
    $sablon1 = array(
        "tid" => "NULL",
        "title" => "ikinci şablon başlığı",
        "template" => $db->escape_string('
ikinci şablon içeriği yani şablonun içindeki kodlar'),
        "sid" => "-1",
    );
    $db->insert_query("templates", $sablon1);
    //üçüncü şablon
    $sablon2 = array(
        "tid" => "NULL",
        "title" => "üçünkü şablon başlığı",
        "template" => $db->escape_string('
üçüncü şablon içeriği yani şablonun içindeki kodlar'),
        "sid" => "-1",
    );
    $db->insert_query("templates", $sablon2);

Buda üçüncü yöntem
Bu yöntemle şablonun içerisine kod eklerken kodlara \ koymuyoruz. sadece ayarların uzantısını eklerken şu şekilde \ koyarak ekliyoruz: {\$mybb->settings['deneme']}
Burda ne demek istedğimi ayar ekleme kısmını okuduktan sonra ve ekteki deneme plugin 1.1'i inceledikten sonra daha iyi anlarsınız.
Kod:
    //birinci şablon
    $sablon0['şablonbaşlığı'] = <<<EOT
birinci şablonun içindeki kodlar
EOT;
    
    foreach($sablon0 as $baslik0 => $sablon_ici_0)
    {
        $sablon0_yukle = array(
            'title'        => $baslik0,
            'template'    => $db->escape_string($sablon_ici_0),
            'sid'        => '-1',
            'version'    => '140',
            'dateline'    => TIME_NOW
        );
        $db->insert_query("templates", $sablon0_yukle);
    }

    //ikinci şablon
$sablon1['şablonbaşlığı'] = <<<EOT
ikinci şablonun içindeki kodlar
EOT;
    
    foreach($sablon1 as $baslik1 => $sablon_ici_1)
    {
        $sablon1_yukle = array(
            'title'        => $baslik1,
            'template'    => $db->escape_string($sablon_ici_1),
            'sid'        => '-1',
            'version'    => '140',
            'dateline'    => TIME_NOW
        );
        $db->insert_query("templates", $sablon1_yukle);
    }

    //üçüncü şablon
$sablon2['şablonbaşlığı'] = <<<EOT
birinci şablonun içindeki kodlar
EOT;
    
    foreach($sablon2 as $baslik2 => $sablon_ici_2)
    {
        $sablon2_yukle = array(
            'title'        => $baslik2,
            'template'    => $db->escape_string($sablon_ici_2),
            'sid'        => '-1',
            'version'    => '140',
            'dateline'    => TIME_NOW
        );
        $db->insert_query("templates", $sablon2_yukle);
    }

Yeni açılan şablonu diğer şablonlarda bütün olarak kullanmak için ayarlamak (mesela yeni bir şablon açtık içine bi duyuru tablosu yaptık peki bu ne işe yarayacak. İşte bunu {$duyuru} şeklinde diğer şablonlarda kulanabilmemiz için aşağıdakileri yapacağız.

Kod:
    //İlk olarak şu kodu infodan sonra ekliyoruz:
$plugins->add_hook("global_start", "soblon_yonlendir");

    //üstteki kodun yerine şunu da ekleyebilirsiniz:
$plugins->add_hook("index_start", "soblon_yonlendir");

    //Bunlarıda phpyi kapatmadan önce sonlara bi yere ekliyoruz.(en sona olabilir dikkat phpyi kapatmadan ekleyin)
function soblon_yonlendir()
{
    global $templates, $sablona_git1, $mybb;
    eval("\$sablona_git1 .= \"".$templates->get("eklenecek şablon başlığı")."\";");
}

    //Şimdi  başlığını eklediğimiz şablonu diğer şablonlarda {$sablona_git1} olarak kullanabiliriz.
    
    //Örnek: üç tane bağlantı var..
function soblon_yonlendir()
{
    global $templates, $sablona_git1, $mybb;
    eval("\$sablona_git1 .= \"".$templates->get("deneme_sablonu1")."\";");
    
    global $templates, $sablona_git2, $mybb;
    eval("\$sablona_git2 .= \"".$templates->get("deneme_sablonu2")."\";");
    
    global $templates, $sablona_git3, $mybb;
    eval("\$sablona_git3 .= \"".$templates->get("deneme_sablonu3")."\";");
    
}
    //yukarıdaki kodu kısaltarak şu şekildede kullanabiliriz (Bu yöntemi denemedim ama çalışması gerekir) Siz benim yazdığım kodlara takılmayın mantığı kavramaya çalışın.
function soblon_yonlendir()
{
    global $templates, $mybb, $sablona_git1, $sablona_git2, $sablona_git3;
    eval("\$sablona_git1 .= \"".$templates->get("deneme_sablonu1")."\";");
    
    eval("\$sablona_git2 .= \"".$templates->get("deneme_sablonu2")."\";");
    
    eval("\$sablona_git3 .= \"".$templates->get("deneme_sablonu3")."\";");
    
}
    //Yani objeleri tek komutla bildirdik.

Şİmdi oluşturulan şablonları silmeyi kullanalım (eklentiyi pasifleştirmede kullanılır)

Kod:
    // Şimdi bu açılan şablonları silelim. En kısave en iyi yöntem. Ve her özelliği silmede kullanılabirir (mykod, ayar vs.)
    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='birinci şablon başlığı'");
    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='ikinci şablon başlığı'");
    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='üçüncü şablon başlığı'");
    // silme tamam

    // Veya şöyle de silebiliriz.
    $db->delete_query('templates', 'title IN ( \'birinci şablon başlığı\',\'ikinci şablon başlığı\',\'üçünkü şablon başlığı\')');
    // silme tamam
    

    // Veya şöyle de silebiliriz.
    $silinecek_sablonlar = array(
        "birinci şablon başlığı",
        "ikinci şablon başlığı",
        "üçünkü şablon başlığı",
    );
    $sablon_sil = implode("','", $silinecek_sablonlar);

    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title in ('{$sablon_sil}');");
    // silme tamam
    
    
    
    // Veya şöyle de silebiliriz.Aslında en iyisi birincisi kısa olduğu için ama bunlarıda öğrenmek iyidir. Diğer işlemlerde daha çok bilgimiz olur.
$silinecek_sablonlar = array(
        "birinci şablon başlığı",
        "ikinci şablon başlığı",
        "üçünkü şablon başlığı",
    );
foreach($silinecek_sablonlar as $sablon_sil)
{
    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='".$sablon_sil."'");
}
    // silme tamam

Şimdi ekteki Deneme plugin 1.0'ı inceleyin.

Şimdi Mykod eklemeyi gösterelim.
Aşağıdaki kodu inceleyin.
Kod:
    //Mykod ekleme En iyisi bu her özelliği eklemede kullandığımız yöntem.
    $mykod2 = array(
    "title"           => "mykod başlığı",
    "description"     => "mykod açıklaması",
    "regex"           => "düzenli ifade",
    "replacement"     => "yerine Gösterilicek İfade",
    "active"           => "1",
    "parseorder"           => "",
    );
    $db->insert_query("mycode", $mykod2);
    //Mykod ekleme tamam

    //Örnek:
    $mykod2 = array(
    "title"           => "youtube_deneme1",
    "description"     => "youtube_deneme1",
    "regex"           => "\[yt\](.*?)\[/yt\]",
    "replacement"     => "<object width=<\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><embed src=\"http://www.youtube.com/v/$1&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object></object>",
    "active"           => "1",
    "parseorder"           => "",
    );
    $db->insert_query("mycode", $mykod2);
    //Mykod ekleme tamam
    
    //Mykod ekleme farklı yöntem
    $mykod1 = array_map(array($db, 'escape_string'), array(
    "title"           => "Mykod başlığı",
    "description"     => "Mykod açıklaması",
    "regex"           => "düzenli ifade",
    "replacement"     => "Yerine Gösterilicek İfade",
    "active"           => "1",
    "parseorder"           => "",
    ));
    $db->insert_query("mycode", $mykod1);
    $cid = $db->insert_id();
    //Mykod ekleme tamam
    
    //Örnek Mykod ekle farklı yöntem
    $mykod1 = array_map(array($db, 'escape_string'), array(
    "title"           => "youtube_deneme",
    "description"     => "youtube_deneme",
    "regex"           => "\[yt\](.*?)\[/yt\]",
    "replacement"     => "<object width=<\"425\" height=\"344\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1&hl=en&fs=1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><embed src=\"http://www.youtube.com/v/$1&hl=en&fs=1\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" width=\"425\" height=\"344\"></embed></object></object>",
    "active"           => "1",
    "parseorder"           => "",
    ));
    $db->insert_query("mycode", $mykod1);
    $cid = $db->insert_id();
    //Mykod ekleme tamam

Bir tane daha mykod ekleme yöntemi var ama onda şuan sorun yaşıyorum hala çözümü bulamadım onu burda eklemiyorum.
şimdi eklediğimiz Mykodları silmeyi öğrenelim. Aslında her özelliği silerken kullandığımız yöntem.
Ağağıdaki kodları inceleyin:
Kod:
    //Mykod sil. Her özelliği silerken kullandığımız yöntem.
        $db->query("DELETE FROM ".TABLE_PREFIX."mycode WHERE title='Mykod başlığı'");
    //Mykod silme tamam
    
    //Örnek  Mykod sil
        $db->query("DELETE FROM ".TABLE_PREFIX."mycode WHERE title='youtube_deneme'");
    //Mykod silme tamam

Şimdi Admin paneline ayar grubu ve ayar eklemeyi öğrenelim.
Aşağıdaki kodları inceleyin:
Kod:
//Ayar grubu ekle. Bu yöntem her özelliği eklerken kullandığımız yöntem. dikkat edin diğer özelliklerle(şablon, mykod) kıyaslayın anlayacaksınız.
    $ayar_group = array(
        'name'         => 'ayarı silerken ve temada kullanmak gibi diğer işlerde kullanırken yazacağımız isim',
        'title'        => 'Admin panelinde gözüken ayar grubu başlığı',
        'description'  => 'ayar grubu açıklaması',
        'disporder'    => '1',
    );
    $db->insert_query('settinggroups', $ayar_group);
    $ayar_grup_id = $db->insert_id();
//Ayar grubu ekle tamam

//şimdi ayar ekleyelim
    $ayar1 = array(
        'name'         => 'ayarı silerken ve temada kullanmak gibi diğer işlerde kullanırken yazacağımız isim',
        'title'        => 'Admin panelinde gözüken ayar başlığı',
        'description'  => 'ayar açıklaması',
        'optionscode'  => 'ayar türü (yazı alanı, seçim alanı vs.)',
        'value'        => 'varsayılan ayar',
        'disporder'    => '1',
        'gid'          => intval( $ayar_grup_id )
    );
//şimdi gödüğünüz gibi yukarıda ayar grubuna ayar1 diye bir isim verdik burada da ayar1 i işleme koyduk.
    $db->insert_query("settings", $ayar1);
    
    $ayar2 = array(
    // bu olmaya da bilir
        'sid'          => 'NULL',
    //devam
        'name'         => 'ayarı silerken ve temada kullanmak gibi diğer işlerde kullanırken yazacağımız isim',
        'title'        => 'Admin panelinde gözüken ayar başlığı',
        'description'  => 'ayar açıklaması',
        'optionscode'  => 'ayar türü (yazı alanı, seçim alanı vs.)',
        'value'        => 'varsayılan ayar',
        'disporder'    => '2',
        'gid'          => intval( $ayar_grup_id )
//ayar_grup_id  yazan yer ayar grubunun kimlik numarası aşağıdaki ayarları bu ayar grubuna katmak için bu kimlik numarasını girmeliyiz. burayı kendinize göre düzeltebilirsiniz. türkçe karekter kullanmayın.
    );
    
    $db->insert_query("settings", $ayar2);
//şimdi gödüğünüz gibi yukarıda ayara ayar2 diye bir (id)isim verdik burada da ayar2 yi işleme koyduk.
    rebuild_settings();
//Ayar ekleme tamam iki ayar ekledik..
    
//şimdi faklı yöntemle ayar ekleyelim    
    $ayar3[] = array(
    // bu olmaya da bilir
        'sid'          => 'NULL',
    //devam
        'name'         => 'ayarı silerken ve temada kullanmak gibi diğer işlerde kullanırken yazacağımız isim',
        'title'        => 'Admin panelinde gözüken ayar başlığı',
        'description'  => 'ayar açıklaması',
        'optionscode'  => 'ayar türü (yazı alanı, seçim alanı vs.)',
        'value'        => 'varsayılan ayar',
        'disporder'    => '3',
        'gid'          => intval( $ayar_grup_id )
    );

    $ayar3[] = array(
    // bu olmaya da bilir
        'sid'          => 'NULL',
    //devam
        'name'         => 'ayarı silerken ve temada kullanmak gibi diğer işlerde kullanırken yazacağımız isim',
        'title'        => 'Admin panelinde gözüken ayar başlığı',
        'description'  => 'ayar açıklaması',
        'optionscode'  => 'ayar türü (yazı alanı, seçim alanı vs.)',
        'value'        => 'varsayılan ayar',
        'disporder'    => '4',
        'gid'          => intval( $ayar_grup_id )
    );
//evet gördüğünüz gibi yukarıda iki ayarada id olarak ayar3 dedik şimdi aşağıdaki kodla bu iki ayarı birleştireceğiz.
    foreach ($ayar3 as $hepsi)
//evet birleştirdik şimdi ikisine hepsi diye id verdik şimdi aşağıda hepsi yi işleme koyduğumuzda bu iki ayarda aktif olacak.
    {
        $db->insert_query("settings", $hepsi);
    }
//evet hepsi ile iki ayarıda aktifleştirdik.
    rebuild_settings();
//faklı yöntemle ayar ekleme tamam


//şimdi örnek verelim:
//Ayar grubu ekle
    $ayar_group = array(
        'name'         => 'deneme_ayargrup',
        'title'        => 'Deneme Plugin ayarları',
        'description'  => 'Deneme pluginin ayarlarını değiştirmeyi saylar.',
        'disporder'    => '1',
    );
    $db->insert_query('settinggroups', $ayar_group);
    $ayar_grup_id = $db->insert_id();
//Ayar grubu ekle tamam

//şimdi ayar ekleyelim
    $ayar1 = array(
        'name'         => 'Baslik',
        'title'        => 'Duyuru Başlığı',
        'description'  => 'Duyuru için bir başlık yazın.',
        'optionscode'  => 'text',
        'value'        => 'Mybb.Com.TR',
        'disporder'    => '1',
        'gid'          => intval( $ayar_grup_id )
    );
    $db->insert_query("settings", $ayar1);
    
    $ayar2 = array(
        'sid'          => 'NULL',
        'name'         => 'duyuru',
        'title'        => 'duyuru',
        'description'  => 'duyuruda gösterilmesini istediğiniz duyuruyu yazın (Html destekler).',
        'optionscode'  => 'textarea',
        'value'        => '
                    <div> <a href=\"mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\" style=\"color: red;\"><b>Link test</b></a></div>

            <div> <a href=\"http://mybb.com.tr\" style="color: green;"><b>Link test</b></a></div>
            <div> <a href=\"http://mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\" style="color: green;"><b><blink>Link test.</blink></b></a></div>
            <div> <a href=\"http://mybb.com.tr\"><font style=\"color:orange;\" size=\"4\"><b>Link test</b></font></a></div>',
        'disporder'    => '2',
        'gid'          => intval( $ayar_grup_id )
    );
    
    $db->insert_query("settings", $ayar2);
    rebuild_settings();
//Ayar ekleme tamam iki ayar ekledik..
    
//şimdi faklı yöntemle ayar ekleyelim    
    $ayar3[] = array(
        'sid'          => 'NULL',
        'name'         => 'baslik2',
        'title'        => 'İkinci Duyuru Başlığı',
        'description'  => 'İkinci duyuru için bir başlık yazın.',
        'optionscode'  => 'text',
        'value'        => 'Mybb.Com.TR 2',
        'disporder'    => '3',
        'gid'          => intval( $ayar_grup_id )
    );

    $ayar3[] = array(
        'sid'          => 'NULL',
        'name'         => 'duyuru2',
        'title'        => 'duyuru 2',
        'description'  => 'İkinci duyuruda gösterilmesini istediğiniz duyuruyu yazın (Html destekler).',
        'optionscode'  => 'textarea',
        'value'        => '
                    <div> <a href=\"mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\" style=\"color: red;\"><b>Link test 2</b></a></div>

            <div> <a href=\"http://mybb.com.tr\" style="color: green;"><b>Link test 2</b></a></div>
            <div> <a href=\"http://mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\">Link test</a></div>
            <div> <a href=\"http://mybb.com.tr\" style="color: green;"><b><blink>Link test 2.</blink></b></a></div>
            <div> <a href=\"http://mybb.com.tr\"><font style=\"color:orange;\" size=\"4\"><b>Link test 2</b></font></a></div>',
        'disporder'    => '4',
        'gid'          => intval( $ayar_grup_id )
    );
    foreach ($ayar3 as $hepsi)
    {
        $db->insert_query("settings", $hepsi);
    }
    rebuild_settings();
//faklı yöntemle ayar ekleme tamam
Şİmdi burada oluşturduğumuz ayarları temalarda kullanmak için şu kodu kullanıyoruz {\$mybb->settings[\'deneme\']} tabi bu sizin tema oluşturma kodunuza göre değişiyor.
her tema oluşturma kodu için olan ayar yönlendirme kodunu tema oluşturma kodunun üstünde belirmiştim.


Şimdi eklediğimiz ayarları silelim:
Kod:
    // Ayar grubu silme
    $db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE name='silinecek ayar grubu adı'");
    // Ayar grubu silme tamam
    // Ayar silme
    $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE name='Silinecek ayar adı'");
    $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE name='Silinecek ayar adı'");
    // Ayar silme tamam

Şimdi arkadaşlar buraya kadar anlattıklarımızda dikkat ederseniz çoğu özellik ekleme ve silme işlemi aynı

Kod:
//Arkadaşlar sonuçta aşağıdaki şekillerde gördüğünüz gibi bir çok fonksiyonun eklenme şekli aynı.

//şablon ekleme
    $sablon0 = array(
        "title" => "Şablon başlığı",
        "template" => "Şablon içeriği",
        "sid" => -1
    );
    $db->insert_query("templates", $sablon0);

//mykod ekleme
    $mykod2 = array(
    "title"           => "mykod başlığı",
    "description"     => "mykod açıklama",
    "regex"           => "düzenli ifade",
    "replacement"     => "yerine geçecek ifade",
    "active"           => "1",
    "parseorder"           => "",
    );
    $db->insert_query("mycode", $mykod2);

//Ayar grubu ekleme
    $ayar_group = array(
        'name'         => 'Silerken ve diğer işlerde kullanılacak ad kısaca bu ayarın kimliği',
        'title'        => 'Ayar grubu başlığı',
        'description'  => 'Ayar grubu açıklaması.',
        'disporder'    => '1',
    );
    $db->insert_query('settinggroups', $ayar_group);
    $ayar_grup_id = $db->insert_id();

//Ayar ekleme
    $ayar1 = array(
        'name'         => 'Silerken ve diğer işlerde kullanılacak ad kısaca bu ayarın kimliği',
        'title'        => 'ayar başlığı Başlığı',
        'description'  => 'Ayar açıklaması.',
        'optionscode'  => 'ayar türü',
        'value'        => 'varsayılan',
        'disporder'    => '1',
        'gid'          => intval( $ayar_grup_id )
    );
    $db->insert_query("settings", $ayar1);

//Evet gördüğünüz gibi  bir çok özelliği eklemek aynı yani:
    $ornek = array(  eklenecek özelliğin bilgileri   );
    $db->insert_query("eklenecek özellik ayar vs.", $ornek);
//Kodları şeklinde oluyor. Biraz daha açacak olursak üstteki kod yani şu kod eklenecek özelliği hazırlıyor:
    $ornek = array(  eklenecek özelliğin bilgileri   );
//Bu kodda özelliği ekliyor:
    $db->insert_query("eklenecek özellik ayar vs.", $ornek);
//(Şu an bu insert kodunu çoklu olarak kullanmayı öğrenmeye çalışıyorum. yani bütün özellikleri hazırlayacağım hepsini birden insert kodu ile ekleyeceğim varsa tabi :D )
    
    
//Ve bu fonksiyonları silmekte aynı:
//Ayar grubu silme
    $db->query("DELETE FROM ".TABLE_PREFIX."settinggroups WHERE name='ayar grubu başlığı'");
    
//Ayar silme
    $db->query("DELETE FROM ".TABLE_PREFIX."settings WHERE name='ayar başlığı'");
    
//mykod silme
    $db->query("DELETE FROM ".TABLE_PREFIX."mycode WHERE title='mykod başlığı'");
    
//şablon silme
    $db->query("DELETE FROM ".TABLE_PREFIX."templates WHERE title='Şablon başlığı'");
ekteki dosyaları inceleyin.. Özellikle deneme_plugin.1.1.php yi.

Güncellendi:16.04.2011-14:15:
Yeni şablon eklemeye 1 yöntem ilave edildi
Şablon değiştirmedeki hatalar düzeltildi. Hatalı olan kaldırıldı. Bir yöntem daha ilave edildi.
Deneme plugin 1.0 yayınlandı.

Güncellendi:17.04.2011-22:13:
Yeni şablon ekleme düzenlendi.bazı ilave anlatımlar yapıldı.
Mykod ekleme anlatıldı.
Ayar grubu ve ayar ekleme anlatıldı.
Anlatıma yeni ilave anlatımlar eklendi.
deneme_plugin.1.1.php, yeni_sablon_ekleme.php, sablon değistirme.php, mykod_ekleme.php, Ayar_ekleme.php, sonucta.php ekte yayınlandı.

Güncellendi:18.04.2011-11:49:
\ ekleme hakkında detaylı bilgi ilave edildi.
sablon değistirme.php güncellendi.

Güncellendi:09.05.2011-19:24:
Bazı çok önemli notlar ilave edildi.

Güncellendi:20.03.2013-10:58:
Yeni bilgiler eklendi.

Konu güncellenecektir.


Ek Dosyalar
.rar   Plugin_ders.rar (Dosya Boyutu: 10.78 KB / İndirme Sayısı: 32)
Cevapla
Sponsor Reklam
sponsor reklam sponsor reklam

İzinli Breezep
 Tarih: 16-03-2013, Saat:15:46
#2
Teşekkürler Abdullah abi Gülümseme
Yakında plugin yazmayı deneyeceğim Gülümseme
Cevapla
Bunu Beğenenler:

Sapan
 Tarih: 16-03-2013, Saat:16:36
#3
Gayet yararlı bir çalışma olmuş tebrikler!
Cevapla
Bunu Beğenenler:

Çevrimdışı alemburda
 Tarih: 16-03-2013, Saat:16:56
#4
ben eklenti yazmaktan ziyade sevdiğim bi eklentiyi geliştirmek üstüne birşeyler katmayı daha fazla seviyorum Göz kırpma
Cevapla
Bunu Beğenenler:

Çevrimdışı Gorkew
 Tarih: 16-03-2013, Saat:17:18
#5
Pluginlere karşı merakım var, yakında yazmayı denemek istiyorum. Teşekkürler. Gülümseme
Cevapla
Bunu Beğenenler:

İzinli BlackCat
 Tarih: 16-03-2013, Saat:20:52
(Son Düzenleme: 16-03-2013, Saat:22:14, Düzenleyen: BlackCat.)
#6
Ellerine sağlık Abdullah, eskiden açılmıs bir konuydu. Burada açılmamış şaşırdım bende. Konuyu okudum tekrar

Bir kod var, henüz neden yazıldıgını bilmediğimiz.
Konuda şöyle geçiyor

***
Şimdi her eklentide aşağıdaki kod var ne işe yaradığını bilmiyorum. Ama önemli olduğu kesin bizde ekliyoruz Açık

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

***

Bunun sebebi plugin yüklendiğinde eklentinin admin panelinde olması ve direk tanımlı olmamasıdır. Yani eklentiyi aktifleştir&pasifleştir olayı. Direk link verildiğinde de çalışmaz.
Cevapla
Bunu Beğenenler: Smyrna35 , Remzi0068 , S.G

Çevrimdışı Remzi0068
 Tarih: 16-03-2013, Saat:22:00
(Son Düzenleme: 20-03-2013, Saat:12:00, Düzenleyen: 007combatant.)
#7
Eline saglik kardesim, su kodun aciklamasini yapalim, cünkü güvenlik konusunda büyük önemi vardir:

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


Bu kodun amaci, dosyanin mybb disinda calismasini engellemek icindir. Örnegin siteadi.com/inc/plugins/eklenti.php olarak calistirmaya calisirsaniz, ciktisi bu olacaktir:
Kod:
Direct initialization of this file is not allowed.

Please make sure IN_MYBB is defined.

ve calismasi engellenecektir.

Tüm Sistemlerde Mevcuttur. Örnek olarak CI:

PHP Framework Codeigniter'da Güvenlik icin tüm dosyalarin basina eklenir:
PHP Kod:
if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 
Cevapla
Bunu Beğenenler: S.G , xpserkan , BlackCat , 007combatant

Çevrimdışı #Poseidon
 Tarih: 17-05-2013, Saat:11:26
#8
Saolun İşime Çok Yaradı...
Cevapla
Bunu Beğenenler:

 


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  MyBB - Forumunuza Sağda Açılan Facebook Beğen Kutusu Eklemek BlackCat 10 5,877 28-09-2016, Saat:14:04
Son Yorum: rojinam
  [MCTR - 1.6] Mybb Alıntı,Kod Arka Plan Rengi Değiştirmek EmreKarakaya 9 6,188 05-07-2016, Saat:11:57
Son Yorum: 1907fb
Bigi Düzgün bir Mybb Sitesi Açmak için Neler Yapılmalıdır? MeleDiYe 2 337 01-07-2016, Saat:01:14
Son Yorum: MeleDiYe
  Mybb Kategori Ve forum İsmi Neon Işık Efekti Keskin 1 1,757 19-05-2016, Saat:15:51
Son Yorum: Dumpces1
  MyBB Google SEO - 404 Not Found Hatası ve Çözümleri BlackCat 10 5,384 15-02-2016, Saat:15:34
Son Yorum: pashaernn



Konuyu Okuyanlar: 1 Ziyaretçi