Özellik Bileşenini programlı olarak geri alma


21

Bir Kurulum Profili kullanılarak kurulmuş bir Özelliğe sahibim. Ancak her zaman belirli bir Bileşeni geri almak zorundayım, böylece artık Geçersiz Kılınmayacak (örneğin, Özelliğin Blokları görünecek şekilde). Kurulum Adımında kodu kullanarak programatik olarak bu adımı atıp atmayabileceğimi bilmek istedim.

Aşağıdaki ekran görüntüsünde, programlı olarak geri döndürülmesi gereken bileşeni gösterdim (ekran görüntüsünde, zaten geri alınmış, bu nedenle onay kutusu kullanılamaz).

Ekran görüntüsü


Sorunuza bir cevabım yok, ancak bahse girmeye istekliyim ki, eğer sırada sırada biraz zaman geçirirseniz, neden geri döndüğü gibi başladığını öğreneceksiniz . Uygun bir yama yoksa, en azından soruna nerede saldırman gerektiğini anlamaya daha yakın olacaksın.
Letharion

@Letharion - Ama bunların hepsi geliştirilen özel blok ve görüşler.
Hacker

Bu tanım gereği, dışa aktardığınız her şey "özel" olacaktır, bu yüzden bu bana mantıklı gelmiyor.
Letharion

Yanıtlar:


20

İşte özelliklerinizi programsal olarak veya eklenti yükleme komut dosyaları olarak sıfırlamakla ilgili birkaç düşünce.

Özelliği sıfırlamak için Drush kullanabilirsiniz :

drush features-revert [feature name]

Başka bir düşünce yükleme işlemi sırasında features_revert () kullanmak olacaktır :

features_revert(array('module' => array('component')));

Strongarm kuyuya olarak modül yararlı olabilir zorlamak için Özelliğini Bence onun varsayılan durumunu korumak için.

OP'nize yaptığı yorumunda @Letharion ile aynı fikirdeyim. Yükleme işlemi sırasında diğer önemli şeylerin yanlışlıkla değiştirilmediğini bilmek isterdim.


16

Özellikteki TÜM bileşenleri geri al

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));

4
Bence features_revert_module ('my_module'); Tüm bu adımları yapar.
Elijah Lynn

15

Features_revert_module () ile tek bir özellik modülünü geri alabilirsiniz .

features_revert_module('my_feature');

5
features_revert(array('module' => array('component')));

'Modül' belirli özellikler modülünün adı ise (yani özelliği indirirken oluşturulan modül) ve 'bileşen' bu özelliklerin bileşenleridir. Bu nedenle, yalnızca özellikte tanımlanan alanları geri almak istiyorsanız, bileşen için 'field' komutunu kullanabilirsiniz.


4

Bu sorunu fe_block_settings_features_revert('basic_site')fe_block_settings'in hook olduğu hook işlevini kullanarak çözebilirim, yani buradaki bileşen ve basic_site, özellik / modül adıdır.


3
Biraz daha açıklayabilir misin? bu işlevi .profile veya .install'da nasıl kullanıyorsunuz?
kLezer

4

Kullanım features_revert()Geri döndürme belirli bileşenlerine sözdizimi sadece burada:

features_revert(array($module => $components));

Örneğin:

features_revert(array('module_name' => array('taxonomy', 'node')));

Tüm modülü (tüm bileşenleri ile birlikte) geri almak için, features_revert_module()bunun yerine, örneğin kullanın :

features_revert_module('module_name');

kurallar

Kurallar için bu yöntem daha hızlıdır (tek bir kuralı geri döndürmek için):

$rule_name = 'my_custom_rule';
if ($rule = rules_config_load($rule_name)) {
  $rule->delete();
}

Tüm kuralları geri almak için:

if ($rules = rules_config_load_multiple(FALSE)) {
  foreach($rules as $rule) {
    if ($rule->hasStatus(ENTITY_OVERRIDDEN) && !$rule->hasStatus(ENTITY_FIXED)) {
      $rule->delete();
    }
  }
}

Bakınız: Sarhoş kurallar ekle; geri dön [# 2474577] | Drupal.org


2

Kurulum Profilinizdeki tüm Özelliklerin geçersiz kılınmış bileşenlerini geri almak için, .profile dosyanızın hook_profile_tasks () öğesine aşağıdakileri ekleyin:

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();

0
    /**
     * Reverts all components of a feature.
     */
    function YOURMODULE_helpers_install_features_revert($module, $component = NULL) {
      module_load_include('inc', 'features', 'features.export');
      features_include();
      if (($feature = feature_load($module, TRUE)) && module_exists($module)) {
        $components = array();
        if (is_null($component)) {
          // Forcefully revert all components of a feature.
          foreach (array_keys($feature->info['features']) as $component) {
            if (features_hook($component, 'features_revert')) {
              $components[] = $component;
            }
          }
        }
        else {
          // Use the $component argument of this function.
          $components[] = $component;
        }
        foreach ($components as $component) {
          features_revert(array($module => array($component)));
        }

        drush_print(format_string('Reverted "!module" feature components !components.', array(
          '!module' => $module,
          '!components' => implode(', ', $components),
        )));
      }
      else {
        drush_print(format_string('Unable to revert "!module" feature.', array('!module' => $module)));
      }
    }
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.