MyBB Dizayn - MyBB, Webmaster, E-Ticaret Forumu MyBB Dünyası MyBB Eklentiler MyBB Eklenti Nasıl Yapılır ? Temel Bilgiler
01-02-2020 Saat: 15:15

MyBB Eklenti Nasıl Yapılır ? Temel Bilgiler

İlk olarak, eklenti dosyanızı adlandırmak ve bazı eklenti işlevi adlarınızda kullanmak için kısa bir küçük harf dizesi seçmelisiniz. Bu dize benzersiz olmalı ve eklentinizle alakalı olmalıdır. Bu örnekte “myplugin” kullanacağız.

Eklentiniz için bir PHP dosyası oluşturun
 inc/plugins 
ve örneğin yukarıdaki gibi adlandırın 
 inc/plugins/myplugin.php 
.

Eklenti dosyanıza aşağıdaki kodu koyarak başlayın: 
PHP Kod:
<?php

// Güvenlik nedeniyle bu dosyaya doğrudan erişime izin verme
if(!defined("IN_MYBB"))
{
    die(
"Direct initialization of this file is not allowed.");
}


function 
myplugin_info()
{
    return array(
        
"name"            => "",
        
"description"    => "",
        
"website"        => "",
        
"author"        => "",
        
"authorsite"    => "",
        
"version"        => "1.0",
        
"guid"             => "",
        
"codename"        => "",
        
"compatibility" => "*"
    
);
}

function 
myplugin_install()
{

}

function 
myplugin_is_installed()
{

}

function 
myplugin_uninstall()
{

}

function 
myplugin_activate()
{

}

function 
myplugin_deactivate()
{



Yukarıda listelenen işlevlere eklenti dosyasının adı eklenmelidir . Bu nedenle 
myplugin
, eklenti dosyanızın adıyla değiştirmelisiniz ,örneğin eklenti dosyanızın
myplugin_info
adı 
foobar_info
varsa çağrılmalıdır  
foobar.php
.

_info()
İşlevi yalnızca gerekli işlevidir. Ancak, yükleme veya etkinleştirme ile yapılan değişikliklerin kaldırma veya devre dışı bırakma işlemlerinde sırasıyla tersine çevrildiğinden emin olmalısınız. Örneğin, _install () öğesinde bir tablo oluşturursanız, bu tabloyu _uninstall () öğesinden kaldırmanız gerekir.

Eklenti dosyanızdaki işlevlerin gövdesini gerektiği gibi tamamlayın:

_info()

Eklenti hakkında bir dizi bilgi döndürür:
  • name: Eklentinin adı
  • description: Eklentinin ne yaptığının açıklaması
  • web sitesi: Eklentinin korunduğu web sitesi (İsteğe bağlı)
  • yazar: Eklentinin yazarının adı
  • authorsite: Yazarın web sitesinin URL'si (İsteğe bağlı)
  • sürüm: Eklentinin sürüm numarası
  • guid: Sürüm kontrolü için MyBB Extend sitesi tarafından verilen benzersiz kimlik (Eski, kod adını tercih et)
  • kodadı: mods bölümündeki eklentinin benzersiz kod adı
  • uyumluluk: Desteklenen MyBB sürümlerinin bir CSV listesi. Örn, “121,123”, “12 *”. Joker karakterler desteklenir.
NB
Kod adı işlevlerini ön bağlantısı eklenti adıyla aynıdır. Buna sahip olmanın iyi bir yolu aşağıdaki kodu kullanmaktır:
PHP Kod:
$codename str_replace('.php'''basename(__FILE__)) 


_install()
Bir eklenti yüklendiğinde eklenti yöneticisinde “Yükle” düğmesine tıklayarak çağrılır.
Yükleme yordamı yoksa, yükleme düğmesi Yönetici CP'sinde gösterilmez ve _activate () yordamında herhangi bir işin gerçekleştirileceği varsayılır.
Bu işlevde gerekli tabloları, alanları ve ayarları oluşturmak yaygındır.

_is_installed()
Bir eklentinin zaten yüklü olup olmadığını belirlemek için eklenti yönetimi sayfasında çağrılır.
Eklenti yüklüyse (tabloları, alanları vb. Denetleyerek) TRUE veya eklenti yüklü değilse FALSE değerini döndürmelidir.

_install()
Eklentinin yüklü olup olmadığını belirlemek için işlevde oluşturulan bir tablonun veya ayarın kullanılması yaygındır . Aşağıda, adlı bir tablonun 
my_plugin()
 oluşturulduğu varsayılarak ortak bir uygulama yer almaktadır :

PHP Kod:
function myplugin_is_installed()
{
    global $db;
    if($db->table_exists("my_plugin"))
    {
        return true;
    }
    return false;


_uninstall()

Bir eklentinin kaldırılması gerektiğinde çağrılır. Bu, eklentinin TÜM izlerini kurulumdan kaldırmalıdır (tablolar vb.). Yoksa, kaldırma düğmesi Yönetici CP'sinde gösterilmez.

_activate()

Yönetici CP üzerinden bir eklenti her etkinleştirildiğinde çağrılır. Bu, esas olarak şablonlar, dil değişiklikleri vb. Ekleyerek / değiştirerek bir eklentiyi “görünür” yapmalıdır.

_deactivate

Bir eklenti devre dışı bırakıldığında çağrılır. Bu aslında eklentileri şablonlar / şablon değişiklikleri vb. Kaldırarak görünümden “gizlemelidir”. Ancak, tablolar, alanlar vb. Gibi bilgileri kaldırmamalıdır; bu bir
_uninstall
yordamı tarafından işlenmelidir. Bir eklenti kaldırıldığında, eklenti etkinse bu rutin _uninstall () öğesinden önce de çağrılır.

Eklenti Kancaları
Eklentinizin gerçekten çalışması için kodunuzu MyBB'ye “bağlamanız” gerekir. Bu, MyBB kodu boyunca birçok yerde yapılabilir.
Burada kancaların bir listesini bulabilirsiniz . Alternatif olarak, MyBB dizinindeki * nix sisteminde aşağıdaki komutu çalıştırabilirsiniz:

Temel Kullanım
İlk 
_info()
olarak, eklenti dosyanızın üst kısmına yakın olan işlevin üzerine aşağıdaki kodu koyarak kancayı ekleyin :

PHP Kod:
$plugins->add_hook('<hook name>''<function name>'); 
Kullanmak  
<hook name>
 
istediğiniz kancanın adı nerede ve  
<function name>
 
bu kanca her çağrıldığında çalıştırılacak olan eklentinizdeki bir fonksiyonun adıdır. Not, bu bir işlev adı olmalıdır, aslında işlevi burada çağırmamalısınız. 
index_start
 
Kancayı kullanan ve  
do_something()
 
işlevi çağıran bir örnek :

PHP Kod:
$plugins->add_hook('index_start''do_something'); 
Şimdi belirttiğiniz işlevi uygulayabilirsiniz. Bu işlev eklenti dosyanızda olmalı veya eklentiniz tarafından dahil edilmelidir.
Örneğin, bu eklenti dosyasında aşağıdaki işlevi tanımladıysanız, her  
index_start
 
çağrıldığında çağrılır:

PHP Kod:
function do_something()
{
    // Burada ne istersen yap

En şeyleri başarmak için, MyBB küresel değişkenler gibi etkileşimde gerekir 
$mybb
,
$user
$db
vb 
Örneğin, mevcut kullanıcının Yönetici olup olmadığını test eder:

PHP Kod:
function do_something()
{
    global $mybb;
    if($mybb->usergroup['cancp'] == 1)
    {
        // Yalnızca yönetici
    }
    else
    {
        // Diğer herkes
    }


Bağımsız Değişkenli Kancalar
Bazı kancalar, çağrıldığı konumla ilgili bir değer de iletir. Bu kancalar, eklenti işlevinize bir bağımsız değişken eklemeniz dışında, aynı şekilde eklenir. Bazı durumlarda, bu değeri (eklentinizin değiştirmiş olabileceği) döndürmeniz de gerekir.
İşte iki kancaya bir örnek:
PHP Kod:
$plugins->add_hook("pre_output_page""hello_world");
$plugins->add_hook("postbit""hello_world_postbit"); 

Ve ilişkili iki eklenti işlevi, birincisi içeriğini değiştirir
$content
ve döndürür, ikincisi referansla geçirilen bir değeri değiştirir.
PHP Kod:
function hello_world($page)
{
    
// Bu, Hello World'u sayfaların üstüne ekleyecektir
    
$page str_replace(
        '<div id="content">',
        '<div id="content"><p>Hello World!</p>',
        $page
    
);
    return 
$page;
}

function 
hello_world_postbit(&$post)
{
    
// Bu, Hello World'u tüm yayınların üstüne ekleyecek
    
$post['message'] = '<strong>Hello world!</strong><br />' $post['message'];


Argümanı geri döndürmenin gerekli olup olmadığını veya referans olarak değiştirilip değiştirilmeyeceğini belirlemek için çağrının çağrıldığı bağlamı kontrol etmeniz gerekir.

Diğer Kanca Seçenekleri
Aktarılabilecek iki isteğe bağlı bağımsız değişken daha vardır
$plugins->add_hook()
: öncelik ve dosya.
Örneğin:
PHP Kod:
$plugins->add_hook('<hook name>''<function name>''<priority>''<file>');

// Değerlerle
$plugins->add_hook('index_start''do_something'5'anotherfile.php'); 

<priority>
nBir kanca ile ilişkili iki veya daha fazla fonksiyon varsa dikkate alır. Öncelik parametresinde daha düşük bir değer, işlevin daha yüksek değer önceliğine sahip diğer işlevlerden önce yürütüleceği anlamına gelir (örneğin, bir öncelik 
0
 daha önce yürütülecektir  
10
 Varsayılan öncelik şudur  
10
. Bir kancada birbiriyle çakışan iki eklentiniz yoksa genellikle bu parametreyi kullanmanız gerekmez.

<file>
Kanca çalıştırıldığında, işlev yürütülmeden önce parametredeki dosya adı “bir kez dahil edilir”.

Eklenti Ayarları
Eklentiler, ACP'nin “Yapılandırma” sekmesi ile entegre olan ayarlar oluşturabilir. Eklentiler arasında tutarlılığı sağlamak için bu yöntem kullanılarak genel eklenti seçenekleri uygulanmalıdır.
Ayarlar genellikle 
_install()
ve 
_uninstall()
yöntemlerine eklenir ve kaldırılır , böylece eklenti ayarları kaybetmeden devre dışı bırakılabilir.

Ayar Ekleme
Ayarları oluşturmak için önce bir ayar grubu oluşturmanız ve kimliğini almanız gerekir:
PHP Kod:
global $db$mybb;

$setting_group = array(
    'name' => 'mysettinggroup',
    'title' => 'Eklenti Ayarlarım',
    'description' => 'Bu benim eklentim ve bazı şeyler yapıyor',
    'disporder' => 5// Ayar grubunuzun görüntüleneceği sipariş
    'isdefault' => 0
);

$gid $db->insert_query("settinggroups"$setting_group); 

Şimdi gruba bazı ayarlar ekleyebilirsiniz:
PHP Kod:
$setting_array = array(
    // A text setting
    'fav_colour' => array(
        'title' => 'Favori Renk',
        'description' => 'En sevdiğiniz rengi girin:',
        'optionscode' => 'text',
        'value' => 'Blue'// Default
        'disporder' => 1
    
),
    // Bir seçme kutusu
    'green_good' => array(
        'title' => 'Yeşil iyi mi?',
        'description' => 'Yeşilin iyi olup olmadığı konusunda fikrinizi seçin:',
        'optionscode' => "select\n0=Yes\n1=Maybe\n2=No",
        'value' => 2,
        'disporder' => 2
    
),
    // Evet / Hayır Boole kutusu
    'enable_lasers' => array(
        'title' => 'Lazerleri etkinleştir?',
        'description' => 'Lazerlerin açılmasını ister misin?',
        'optionscode' => 'yesno',
        'value' => 1,
        'disporder' => 3
    
),
);

foreach(
$setting_array as $name => $setting)
{
    $setting['name'] = $name;
    $setting['gid'] = $gid;

    $db->insert_query('settings'$setting);
}

// Bunu unutma!
rebuild_settings(); 

Aşağıdaki ayar alanı türü (aka. Seçenekler kodu) değerleri desteklenir:
  • metin: Normal bir metin kutusu
  • sayısal: Sayısal alan
  • textarea: Daha büyük bir metin kutusu
  • yesno: Bir boole evet / hayır kontrolü
  • onoff: Bir boole açma / kapama kontrolü
  • select: Bir seçim kutusu (seçiminde format ve ardından = yeni satır başına bir tane ile)
  • forumselect: Forum seçmek için yerleşik bir radyo + seçme kutusu
  • forumselectsingle: Yalnızca bir forum seçmek için yerleşik bir seçim kutusu
  • groupselect: Grupları seçmek için yerleşik bir radyo + seçme kutusu
  • groupselectsingle: Yalnızca bir kullanıcı grubu seçmek için yerleşik bir seçim kutusu
  • radyo: Bir dizi radyo düğmesi (önce seçiminde ardından = yeni satır başına bir tane ile)
  • onay kutusu: Bir boole onay kutusu alanı
  • dil: Bir dil seçim kutusu
  • adminlanguage: Bir ACP dil seçimi
  • cpstyle: Bir tema seçici
  • php: Bir php kodu
Eklentiyi yükleyecekseniz, artık yeni ayar grubunuzu ve ayarlarını ACP'nin “Yapılandırma” sekmesinde görürsünüz.

Bu değerlere 
$mybb->settings['<setting name>']
 
örneğin üzerinden erişebilirsiniz  
$mybb->settings['enable_lasers']
.

Ayarları kaldırma 
_install()
  
İşlevinize ayarlar eklerseniz, işlevleri işlevinizden de kaldırmanız gerekir 
_uninstall()
. Yukarıdaki ayarların kaldırılmasına bir örnek:
PHP Kod:
global $db;

$db->delete_query('settings'"name IN ('fav_colour','green_good','enable_lasers')");
$db->delete_query('settinggroups'"name = 'mysettinggroup'");

// Bunu unutma!
rebuild_settings(); 

İçin Ayarları Kullanma 
_is_installed()
 

_is_installed()
 
İşlevi uygulamak için ayarlarınızdan birini kullanmak isteyebilirsiniz ; işte bir örnek:
PHP Kod:
global $mybb;
if(isset(
$mybb->settings['green_good']))
{
    return true;
}
return 
false
Beğenenler:

Görüntüleyenler: 1 Ziyaretçi
Discord
E-mail Gönderin
Bizi Arayın
Whatsapp Mesaj Gönder