Modül Yapılandırması

1.7k görüntülenme Markdown

Operatörün değiştirebileceği ayarlar: modülle gelen dizi, forma dönüşen alan tanımları ve yanıtları kaydeden yazma.

Genel Bakış

Bir modülün yapılandırması, bir dizi döndüren tek bir PHP dosyasıdır. Hem varsayılanları hem operatörün yanıtlarını tutar, çünkü kaydetmek aynı dosyayı yeniden yazar. Ayar tablosu da göç adımı da yoktur: durum dosyanın kendisidir.

Buradaki hataların çoğu dosyanın iki özelliğinden doğar: derlenir ve okunabilir kaynaktır.

Ön Koşullar

  • Zaten yüklenen bir modül. Yoksa İlk Modülünüz ile başlayın.
  • Web sunucusu kullanıcısının modül dizininde yazma izni; bu olmadan her kayıt dosya katmanında sessizce düşer.
  • Bir form alanının adı nasıl istek anahtarına dönüşür; Admin Form Oluşturucu.

Yapı

Dosyanın Biçimi

Üst düzey, platformun okuduğu bir avuç anahtar dışında sizindir; o anahtarlar birebir yazılmak zorundadır.

AnahtarKim okurNe taşır
meta.nameModül listesiDil dosyasında ad yoksa kullanılan görünen ad
meta.versionSiz ve güncelleme düzeneğiKendi sürüm dizeniz
meta.logoLogo çözümlemesiModül dizinindeki bir dosya adı ya da mutlak bir adres
settingsKodunuz ve ayar kaydetme yoluOperatörün yanıtları; bildirilen her alan kendi anahtarıyla buraya iner
statusDuruma göre süzülen yüklemelerde kayıt defteriModülün etkin olup olmadığı; bunu burada tutan dört tip için
fieldsSunucu modülleri, ürün ve hizmet ekranlarındaÜrün yapılandırma formunda görünen alan tanımları
access_psEklenti ayarları ekranıAyarlarla birlikte kaydedilen yetki seçimi
show_on_adminArea, show_on_clientAreaEklenti sayfa yönlendiricisiEklentinin panel sayfası mı, müşteri sayfası mı, ikisi mi açacağı
config.php, gönderildiği hali
return [
    'meta' => [
        'name'    => 'AcmeDomains',
        'version' => '1.0',
        'logo'    => 'logo.png',
    ],

    // Kodunuzun okuduğu her anahtarı güvenli bir varsayılanla gönderin. Yalnız ilk kayıttan
    // sonra beliren bir anahtar, kodunuzun her okumada korumak zorunda olduğu anahtardır.
    'settings' => [
        'username'      => '',
        'apiKey'        => '',
        'test-mode'     => 0,
        'nameservers'   => ['ns1.example.com', 'ns2.example.com'],
        'cost-currency' => 4,
    ],
];

Ayar Alanlarını Bildirme

Formu siz yazmazsınız: bir tanım dizisi döndürürsünüz, admin form oluşturucu onu forma çevirir. Dizi anahtarı alan adı, içindeki name ise etikettir — en sık ters karıştırılan çift budur.

Hangi metodu bildireceğiniz ve size bir şey geçilip geçilmeyeceği tipe bağlıdır.

TipBildirdiğiniz metotEkranın geçtiği şeySaklanan değerin kaynağı
Registrarsconfig_fields($settings = [])Geçerli yapılandırmanın settings bloğuArgüman
Paymentconfig_fields()Hiçbir şey$this->config['settings']
Addonsfields()Hiçbir şey$this->config['settings']
tanım dizisi
// Servis sağlayıcı formu. Ekran bunu saklanan ayar bloğuyla çağırır, yani
// $data doludur. Ödeme geçidinde ya da eklentide aynı metot ARGÜMANSIZ çağrılır
// ve $data sessizce boş kalır: orada özelliği okuyun.
public function config_fields($data = []): array
{
    return [
        // ANAHTAR alan adıdır. 'name' ise ETİKETTİR.
        'username' => [
            'name'        => $this->lang['username'] ?? 'Username',
            'description' => $this->lang['username-desc'] ?? '',
            'type'        => 'text',
            'value'       => $data['username'] ?? '',
            'placeholder' => 'api-user',
        ],

        'apiKey' => [
            'name'  => $this->lang['api-key'] ?? 'API Key',
            'type'  => 'password',
            'value' => $data['apiKey'] ?? '',
        ],

        // Onay kutusu. 'checked' mevcut durumdur, gönderilen değer değil.
        'test-mode' => [
            'name'    => $this->lang['test-mode'] ?? 'Test Mode',
            'type'    => 'approval',
            'checked' => (bool) ($data['test-mode'] ?? false),
        ],

        // Yalnız yukarıdaki kutu işaretliyken gösterilir.
        'test-endpoint' => [
            'name'         => $this->lang['test-endpoint'] ?? 'Test Endpoint',
            'type'         => 'text',
            'value'        => $data['test-endpoint'] ?? '',
            'parent'       => 'test-mode',
            'parentEffect' => 'hide',
        ],

        'mode' => [
            'name'    => $this->lang['mode'] ?? 'Mode',
            'type'    => 'dropdown',
            'value'   => $data['mode'] ?? 'live',
            'options' => ['live' => 'Live', 'sandbox' => 'Sandbox'],
        ],
    ];
}

Adım Adım

Varsayılanları Gönderin

  1. config.php dosyasını bir meta ve bir settings bloğu döndürecek şekilde oluşturun.
  2. Kodunuzun okuduğu her anahtarı, boş ya da zararsız bir varsayılanla settings içine koyun. Oraya asla gerçek kimlik bilgisi yazmayın.
  3. Modül listesini yenileyin; ayar ekranının artık gösterecek bir şeyi vardır.

Formu Bildirin

  1. Sınıfınıza config_fields($data = []), eklentide fields() ekleyin.
  2. Ayar başına bir tanım döndürün, ayar adıyla anahtarlayın ve mevcut değeri tipinizin sunduğu kaynaktan okuyun.
  3. Modülün ayar sayfasını açın. Genel şablon metodunuzu bulur ve formu oluşturur; gönder butonu ile eylem adresi zaten bağlıdır.
  4. Bir değer değiştirip kaydedin. Yanıtlar tek istek anahtarında, fields içinde, alan adlarınızla gelir.

Geri Yazın

  1. Gönderilen değerleri yüklü diziyle birleştirin, yerine koymayın: yazma tam dosya yazmasıdır, düşürdüğünüz her şey gider.
  2. Sırları girerken şifreleyin ve alan maskeli ya da boş geldiğinde saklanan değeri koruyun.
  3. Derlenmiş kopyayı geçersiz kılan dosya yöneticisi üzerinden yazın.
  4. Sayfayı yenileyin. Eski değeri geri okuyorsanız yazma gerçekleşmiş ama derlenmiş kopya yenilenmemiştir.

Referans

Dosyayı Yazma

imzalar
// Ortak trait; sunucu, servis sağlayıcı, ürün ve sosyal giriş modüllerinin kullandığı.
// $auto_status = true, dizi boş olmayan bir ayar bloğu taşıdığında modülü açar.
protected function save_config($data = [], $auto_status = true);

// Sunucu modülleri bunu daraltır: otomatik durum bayrağı yok, dönüş kesin boolean.
public function save_config($data = []): bool;

// Eklentiler de aynı şekilde daraltır ve ayrıca diziyi $this->config değerine atar.
public function save_config($data = []): bool;

// Hepsinin altta çağırdığı şey. Hedef .php ise derlenmiş kopyayı geçersiz kılar.
public static function file_write($file, $data = null, $mode = 'w', $flags = 0);

// Diziden kaynak koda. ['pwith' => true] onu eksiksiz bir PHP dosyası olarak sarar.
public static function array_export($array = [], $options = []);

// Platform yapılandırması, modül yapılandırması değil. Yapılandırma dizinindeki
// dosyalara eğik çizgili yollarla erişilir.
public static function get($arg = null);
public static function set($key, $values, $merge = false): array|false;
public static function save($name = '', $data = []): bool;

// Veritabanında tutulan ayarlar, ada göre anahtarlanmış. Modülün admin alanı
// kendi dosyası yerine bunları kullanır.
public static function getd($name = '');
public static function setd($name = '', $content = '');

Alan Tanımı Anahtarları

type Şunlardan biri: text (varsayılan), password, textarea, dropdown, radio, switch, approval, file, output ve javascript. Bir output alanı serbest işaretleme gösterir, kaydedilmez.
name Alanın yanında gösterilen etiket. Alan adı değildir: o, dizi anahtarıdır.
value Metin benzeri ve açılır alanlarda mevcut değer, anahtarda (switch) gönderilen değer. Onay kutuları durumu checked ile taşır.
options Açılır liste ya da radyo grubu için değer => etiket haritası. Virgülle ayrılmış bir dize, anahtarı etiketine eşit bir haritaya açılır.
description · description_pos · is_tooltip Yardım metni; varsayılan olarak sağda, 'L' ile etiketin yanında. is_tooltip ile bir soru işareti simgesine büzülür.
parent · parentEffect · parentValue Bu alanı bir başkasına göre göster ya da devre dışı bırak. Etki hide, disable ya da collapse; radyo ebeveynde parentValue hangi seçeneklerin onu açtığını sayar. Ebeveyn çocuktan önce bildirilmelidir.
width · wrap_width Girdinin kendisi ve satırı için yüzdeler. Yüz olan bir satır genişliği tanımsız sayılır.
advanced_selector · multiple · rows · disabled Aranabilir açılır liste, çok değerli alan, metin kutusunun yüksekliği ve değiştirilemez alan. Aranabilir açılır liste, seçeneklerini sizin metotlarınızdan yükleyebilir.
fieldOptions · rowOptions O alan ve satırı için doğrudan form oluşturucuya geçer; tanımın karşılığı olmayan öznitelikler için kaçış kapısı.

Örnek

Turun tamamı: gelen, yazılan ve geri okunan. Kaydetme yarısı, birleştirme görünsün diye ayar controller'ını geçersiz kılar.

kaydetme; birleştirme ve sır ele alınmış halde
public function controller_settings($extraFields = []): array
{
    // Formun gönderdiği her şey, tek anahtar altında, sizin tanım anahtarlarınızın adıyla.
    $fields = \Filter::POST("fields") ?: [];

    // Diskte zaten duranla başlayın: aşağıdaki yazma dosyanın tamamını değiştirir.
    $config = $this->config;

    $config['settings']['username']  = \Filter::html_clear((string) ($fields['username'] ?? ''));
    $config['settings']['mode']      = in_array($fields['mode'] ?? '', ['live', 'sandbox'], true)
        ? $fields['mode'] : 'live';

    // İşaretsiz bir kutu gönderide HİÇ YOKTUR, yani yokluk "kapalı" değeridir.
    $config['settings']['test-mode'] = (int) ($fields['test-mode'] ?? 0) === 1 ? 1 : 0;

    // Sırlar: girerken şifreleyin ve alan maskeli ya da boş geldiğinde saklanan değeri
    // koruyun; ekran değişmemiş bir sır için tam olarak bunu gönderir.
    $posted = (string) ($fields['apiKey'] ?? '');
    if ($posted !== '' && !str_starts_with($posted, '*'))
        $config['settings']['apiKey'] = $this->encode_str($posted);

    // Tam dosya yazması; derlenmiş kopyayı geçersiz kılan yönetici üzerinden.
    \FileManager::file_write($this->dir . 'config.php', \Utility::array_export($config, ['pwith' => true]));

    return ['status' => "successful", 'message' => \Language::gc("admin/ac-settings/successful1")];
}
modülün herhangi bir yerinden geri okuma
private function credentials(): array
{
    $settings = $this->config['settings'] ?? [];

    return [
        // Her okumada null güvenli: modülünüzün eski bir sürümünden yükseltilmiş
        // bir sistemde anahtar eksik olabilir.
        'username' => (string) ($settings['username'] ?? ''),
        'apiKey'   => $this->decode_str((string) ($settings['apiKey'] ?? '')),
        'sandbox'  => (int) ($settings['test-mode'] ?? 0) === 1,
    ];
}

Ve aynı değerlerin modülü hiç kurmadan okunması; bir listeleme ekranının ya da bir kancanın yaptığı şey budur:

modülün dışından
// Config() yalnız statik önbelleği okur, bu yüzden önce yükleme yapılmalıdır.
// Üçüncü argüman sınıf dosyasını işin dışında tutar.
$record = Modules::Load("Registrars", "AcmeDomains", true);

$mode = $record["config"]["settings"]["mode"] ?? 'live';

// Sır buradan okunamaz: çözme, örnek üzerindeki bir metottur.
// Açık değere ihtiyacınız varsa modülü kurun ve ona sorun.

Tuzaklar

Yapılandırma dosyası derlenmiş PHP'dir

Geri okuması bir include iledir; derlenmiş kopya geçersiz kılınana kadar servis edilir. Dosya yöneticisi bunu yapar, ham yazma ya da yeniden adlandırma yapmaz. Operatör kaydeder, yeniler, eski değeri görür; hiçbir kayıt açıklamaz.

Kaydetmek dosyanın tamamını değiştirir

Yeni diziyi yüklü olandan kurun, kendi anahtarlarınızı değiştirin, gerisine dokunmayın. Yalnız ayar bloğunu geçmek künyeyi, durumu ve her şeyi tek kayıtta siler.

Gönderilmemiş bir alan false olarak yazılabilir

Eklenti ayar yolu bildirdiğiniz alanları gezer ve gönderide olmayan her biri için false saklar. İşaretsiz bir kutu hiçbir şey göndermez: bu, onay kutuları için doğru, koşullu gösterilen her şey için yanlıştır. Bildirdiğiniz alanları elle yazılmış listeden değil, okuduğunuz kaynaktan türetin.

Sırları şifreleyin ve asla elle yapıştırmayın

Bir API anahtarı diziye modülün kendi yardımcısıyla şifreli girmelidir; böylece bu sisteme bağlı alt anahtar kullanılır. Doğrudan dosyaya yazılan değer çözülemez ve çöp okunur; onu ayar ekranından girin.

Modül yapılandırması ile platform yapılandırması ayrı şeylerdir

Modül dosyası sizindir ve modülle taşınır. Platform dosyaları sistem geneli ayarları tutar; tek seçimli her tipin etkin modülü de oradadır. Bir modül yalnız kendi dosyasına yazar, platform dosyalarını okur.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.