Şu anda temelde tek bir PHP sınıfı olan bir üçüncü taraf PHP kütüphanesi gerektiren bir modül üzerinde çalışıyorum. Normalde, bunu bir include / alt dizinine yerleştirir ve
files[] = includes/Foo.php
.info dosyama ve Drupal 7 sınıfı otomatik yükleyicinin bir şeyi yaptığımda yapmasına izin verin $foo = new Foo().
Yine de, bu modülü halka yayınlama iznim var ve modülün bulunduğu kütüphaneyi içermez. Lisanslama ile ilgili komplikasyonların farkındayım, ancak bu soru uğruna bunu göz ardı etmek istiyorum.
Benzer bir soru var, nasıl bir PHP kütüphanesi eklerim? , ama bunun benim dilime cevap verdiğini sanmıyorum.
Bu sorunun cevabı esas olarak Kütüphaneler API'sini kullandığını söyler , ancak bunu kullanan bulduğum her bir modül sadece libraries_get_path()taban yolunu almak için (ve kullanılabilir olmadığında geri dönüş yolunu içerir) ve sonra bir requireveya includebazılarıyla hata denetimi (veya değil). Hepsi şöyle bir şey yapar:
if (!class_exists('Foo')) {
$path = function_exists('libraries_get_path') ?
libraries_get_path('foo') : 'sites/all/libraries/foo';
if (!include($path . '/Foo.php')) {
// handle this error
}
}
Bu durumda, Kütüphaneler API'sı gerçekten hiçbir şey yapmaz. Kullanıcıların bir kopyasını indirmelerini ve modül klasörünün içine yerleştirmelerini istemenin eski yönteminde bunu kullanmanın avantajını görmüyorum. Modül geliştiricisinin hala / ile yükü manuel olarak yapması gereken bir sorun var . Örneğin, Facebook modülü kütüphaneyi a'ya yükler ve HTML Arıtma modülünün her kütüphaneye ihtiyaç duyulduğunda kontrol etmek ve yüklemek için dahili bir işlevi vardır.includerequirehook_init
Bu yaygın bir uygulama olabilir, ancak en iyi uygulama gibi görünmüyor .
Modülüm inisiyatif almalı ve hook_libraries_infokullanabilmem için bir ilan etmeli libraries_load('foo')mi? Bu da tuhaf görünüyor.
if (libraries_load($name)) {..}kütüphanenin mevcut olmaması durumunda WSOD'den kaçınmaktır.