Modül Yapılandırması
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.
| Anahtar | Kim okur | Ne taşır |
|---|---|---|
meta.name | Modül listesi | Dil dosyasında ad yoksa kullanılan görünen ad |
meta.version | Siz ve güncelleme düzeneği | Kendi sürüm dizeniz |
meta.logo | Logo çözümlemesi | Modül dizinindeki bir dosya adı ya da mutlak bir adres |
settings | Kodunuz ve ayar kaydetme yolu | Operatörün yanıtları; bildirilen her alan kendi anahtarıyla buraya iner |
status | Duruma göre süzülen yüklemelerde kayıt defteri | Modülün etkin olup olmadığı; bunu burada tutan dört tip için |
fields | Sunucu modülleri, ürün ve hizmet ekranlarında | Ürün yapılandırma formunda görünen alan tanımları |
access_ps | Eklenti ayarları ekranı | Ayarlarla birlikte kaydedilen yetki seçimi |
show_on_adminArea, show_on_clientArea | Eklenti sayfa yönlendiricisi | Eklentinin panel sayfası mı, müşteri sayfası mı, ikisi mi açacağı |
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.
| Tip | Bildirdiğiniz metot | Ekranın geçtiği şey | Saklanan değerin kaynağı |
|---|---|---|---|
| Registrars | config_fields($settings = []) | Geçerli yapılandırmanın settings bloğu | Argüman |
| Payment | config_fields() | Hiçbir şey | $this->config['settings'] |
| Addons | fields() | Hiçbir şey | $this->config['settings'] |
// 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
config.phpdosyasını birmetave birsettingsbloğu döndürecek şekilde oluşturun.- Kodunuzun okuduğu her anahtarı, boş ya da zararsız bir varsayılanla
settingsiçine koyun. Oraya asla gerçek kimlik bilgisi yazmayın. - Modül listesini yenileyin; ayar ekranının artık gösterecek bir şeyi vardır.
Formu Bildirin
- Sınıfınıza
config_fields($data = []), eklentidefields()ekleyin. - Ayar başına bir tanım döndürün, ayar adıyla anahtarlayın ve mevcut değeri tipinizin sunduğu kaynaktan okuyun.
- 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.
- Bir değer değiştirip kaydedin. Yanıtlar tek istek anahtarında,
fieldsiçinde, alan adlarınızla gelir.
Geri Yazın
- 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.
- Sırları girerken şifreleyin ve alan maskeli ya da boş geldiğinde saklanan değeri koruyun.
- Derlenmiş kopyayı geçersiz kılan dosya yöneticisi üzerinden yazın.
- Sayfayı yenileyin. Eski değeri geri okuyorsanız yazma gerçekleşmiş ama derlenmiş kopya yenilenmemiştir.
Referans
Dosyayı Yazma
// 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ı
text (varsayılan), password, textarea, dropdown, radio, switch, approval, file, output ve javascript. Bir output alanı serbest işaretleme gösterir, kaydedilmez.
checked ile taşır.
değer => etiket haritası. Virgülle ayrılmış bir dize, anahtarı etiketine eşit bir haritaya açılır.
'L' ile etiketin yanında. is_tooltip ile bir soru işareti simgesine büzülür.
hide, disable ya da collapse; radyo ebeveynde parentValue hangi seçeneklerin onu açtığını sayar. Ebeveyn çocuktan önce bildirilmelidir.
Ö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.
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")];
}
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:
// 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
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.
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.
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.
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 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.
İlgili Makaleler
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.