Modülüm için sahip olduğum tüm güncellemeleri çalıştırmak için hook_install () 'i nasıl edinebilirim? İçinde mymod.install dosyası var.
Denedim
function mymod_install() { mymod_update_6001(); }
ama hiçbir şey yapmıyor gibi görünüyor. Bir mymod_update_6002 () varsa, yine de 6001 (), 6002 () veya ikisini de 6001 (), 6002 () sırasıyla çağırırdım.
Varsayılan olarak bir modül yüklediğinizde tüm güncellemeleri çalıştırmanın sağduyu olacağını düşündüm.
Güncellemeleri çalıştırmak için yükleme kancanızı almamalısınız. Bir modül ilk kez takıldığında güncelleme gerekmez.
Güncellemeler, modül zaten kurulu olduğunda kullanılır (veritabanı veya değişkenler oluşturulmuştur). Bu durumda, tüm verileri sileceği için modülü yeniden yüklemek istemezsiniz, bunun yerine update_N kancaları yaratırsınız. Drupal hangi güncellemelerin gerekli olduğunu tespit edecek ve bunlar
update.php. Drupal 6 içinde hangi güncellemelerin yapılacağını otomatik olarak seçecektir, ancak bunu değiştirebilirsiniz, ancak bu Drupal 7] 'de mümkün değildir.
Drupal, son çalıştırılan güncelleme sayısını kaydederek hangi güncellemelerin gerekli olduğunu algılar. Bu, veritabanındaki değişiklikler olabilir ve bu da Drupal 7) Güncellemeleri yeniden çalıştırmanıza izin verir. Güncellemeleri yeniden çalıştırmak genellikle kötü bir fikirdir ve çoğu zaman hatalara neden olur ve bazı durumlarda verilerinizi bozabilir.
Güncellemeleri çalıştırmadan önce her zaman veritabanınızı yedeklemeyi unutmayın.
Kancaların amacı farklıdır.
Hem modül takıldığında hem de modül güncellendiğinde yapılması gereken bazı görevler varsa, kodun her iki kancada da bulunması gerekir. Yükleme sırasında tüm güncelleme kancalarını çağıran bir modül yoktur ve özellikle güncelleme işlevleri modülden kullanılan veritabanı tablolarının şemasını güncellediğinde yanlış olur; hook_schema () her zaman güncellenen şemayı döndürmelidir ve şemayı güncelleme işlevleriyle de güncellemek yanlış olur.
Yazdığınız kod çalışmaz, çünkü güncelleme işlevlerinden birini çağırmak diğer tüm güncelleme işlevlerini otomatik olarak yürütmez.
Güncelleme işlevlerini
hook_install() uygulamasından çağırmak yanlıştır, çünkü başka bir işlevden güncelleme işlevini çağırmak yanlıştır; iki veya daha fazla güncelleme işlevinden yürütülmesi gereken bazı kodlar varsa, bu kod güncelleme işlevlerinden ve gerekirse
hook_install() öğesinden çağrılan bir işleve yerleştirilmelidir.
Kurulum kancası sadece modül yeni takıldığında çağrılır, bu nedenle herhangi bir güncellemeye gerek yoktur. Güncellemeler yalnızca modül zaten kurulu olduğunda yürütülür, böylece ek değişiklikler uygulanabilir.
Güncelleme işlevlerini yükleme sırasında çalışmaya zorlamak için şema sürümünüzü değiştirmeniz gerekir, örneğin:
function mymod_install() { // Reset the schema version, so our update hooks can be processed during the installation. drupal_set_installed_schema_version('mymod', '7000'); // Then run the updates as usual. mymod_update_7001(); }
Veya bunu acele ile çalıştırın:
drush -y updb.
hook_install
mymod.module dosyasında çalışmaz.
Ayrı bir dosyaya
hook_install Ve
hook_uninstall Yerleştirmelisiniz
mymod.install
Sanırım
hook_update_N() de
mymod.install
Soru güncellendikten sonra cevap verin:
link 'den alıntı yapılıyor, lütfen bilgi dosyasındaki sürüm numaranızı kontrol edin.
Özel olarak geliştirdiğimden ve katkı için olmadığımdan, modülümü güncellediğimde modülümün .info dosyasındaki 'VERSION' alanım boş veya değişmemiş. Aslında Eclipse PDT için Subversive kullanıyorum ve bu nedenle bilgi dosyaları sürüm numaraları asla güncellenmez. Böylece, hook_update_6001 benim update.php tarafından çağrılmadı.