Bir alanı silmeyle ilgili iş akışı sorunu


14

Bir içerik türü olduğunu varsayalım Personalanlarla: Name, Age,Email

Bu içerik türü, testkaynağını kontrol edip canlı siteye gönderebilmem için adlandırılan bir Özellik tarafından kontrol edilir .

İş akışım şöyle:

  • Ben yeni bir alan eklemek PersondenilenPhone
  • yerel olarak yaparım: drush fu test -y
  • Ben düzenleme test.infosürüm sayısını artırmak için
  • Depomdaki değişiklikleri taahhüt ederim
  • Özelliği canlı siteye aktarıyorum (özellik dosyalarını kopyala)
  • canlı sitede yapıyorum: drush fr test -y
  • canlı sitede yapıyorum: drush cc all

Ardından yeni alan canlı sitenin üzerinde görünür Person.

İlk adımda kaldırırsam alanın bir alanı Personcanlı siteden silinmeyecektir. Bunu nasıl çözerim? Canlı sitedeki kullanıcı arayüzünden manuel olarak silmek istemiyorum.
Bu iş akışı doğru mu?


1
Sürüm numarasını otomatik olarak artırmak için drush fu test -y --version-increment kullanın
Mike

Yanıtlar:


9

Bu iki ucu keskin bir kılıç, her zaman iyi bir şey olan veri silmeyi önlemek böyle . Gerçekten çözecek bir şey yok, bu beklenen bir davranış.

Kullandığımız ve bir yıldan uzun süredir yaptığımız iş akışı ve gerçekten iyi çalışıyor. Doğru olduğunu söyleyebilirim ama bu çok öznel bir cevap.


Ve eğer gerçekten alanı silmek istersem? Güncelleme kancalarına bakmalı mıyım? (Ben bir D7 acemi oldum).
cherouvim

3
Güncelleme kancaları ideal olabilir veya manuel olarak kaldırabilirsiniz.
dijital

2
Tamam, ben de yapabilirimdrush field-delete field
cherouvim

@cherouvim Yani bir özelliği her yeniden oluşturduğunuzda bunu yapmanız gerekir mi?
AlxVallejo

Özelliğin .install dosyasındaki hook_update_N () işe yarayacaktır.
Mike

10

Özellikler tarafından oluşturulan içeriği kaldırmanın doğru yolu hook_update_N (dosyaya uygulanması gereken) yöntemidiryour_module.install .


Özellikler ile ana fikir yapılandırmayı kodla yönetmektir. Kullanma hook_update_Nalan delesyon (sürüm kontrolü ile kontrol edilebilir olan) kodda olduğu, ile tutarlıdır - eşdeğer komut ise drush field-delete fieldyönetilen kod çağrılan değildir; gerçekleştirmeniz gereken (ve gerçekleştirmeyi hatırladığınız) ayrı bir komut satırı adımıdır.


Neden? Olmaz drush field-delete fieldiyi çalışmaz?
cherouvim

5
Elbette, bu işe yarayacak ve daha basit bir çözüm olabilir. Ancak Özellikler ile ana fikir yapılandırmayı kodla yönetmektir. Kullanma hook_update()alan delesyon (sürüm kontrolü ile kontrol edilebilir olan) kodda olduğu, ile tutarlıdır - drush komut yönetilen kod denir değil ise; gerçekleştirmeniz gereken (ve gerçekleştirmeyi hatırladığınız) ayrı bir komut satırı adımıdır.
smokris

Bir özelliğin hangi dosyasında hook_update () kullanacağım? hook_update () parametre olarak bir düğüm nesnesini alır, bu nedenle özelliği etkinleştirirken ona bir düğüm nesnesi sağlamak mümkün değildir.
subhojit777

@ subhojit777: Hata! Yanlış kanca dokümantasyon sayfasına bağlandım. Sadece bağlantı düzeltildi; lütfen için dokümanlara bakın hook_update_N.
smokris

@smokris :) Cevabımda o kancadan bahsetmiştim
subhojit777


0

field_phoneBaşka alanlarda kullanıyorsanız , bunu yalnızca Kişi içerik türünüzden kaldırmak isteyebilirsiniz, ancak sitenizden tamamen silmek istemeyebilirsiniz. YOUR_FEATURE_NAME.installÖzelliğinizin klasöründe aşağıdaki gibi manuel olarak bir dosya oluşturun :

/**
 * Implements hook_update_N().
 *
 * Removes field_phone from Person content type.
 */
function YOUR_FEATURE_NAME_update_7001() {
  if ($instance = field_info_instance('node', 'field_phone', 'person')) {
    field_delete_instance($instance);
  }
  field_purge_batch(500);
  features_revert_module('YOUR_FEATURE_NAME');
}

Bunu Kişi İçerik Türü yerine Kişi Paragrafından siliyorsanız, ilk koşullu ifadeyi aşağıdaki gibi değiştirebilirsiniz:

if ($instance = field_info_instance('paragraphs_item', 'field_phone', 'person')) {
  ...
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.