Hoàn nguyên thành phần tính năng theo chương trình


21

Tôi có một Tính năng được cài đặt bằng Hồ sơ cài đặt. Nhưng tôi luôn phải đi và Hoàn nguyên một Thành phần cụ thể để nó không còn bị Ghi đè nữa (ví dụ như vậy, các Khối của Tính năng xuất hiện). Tôi chỉ muốn biết liệu tôi có thể thực hiện bước này bằng lập trình bằng cách sử dụng mã trong Hồ sơ cài đặt hay không.

Trong ảnh chụp màn hình bên dưới, tôi đã hiển thị thành phần phải được hoàn nguyên theo chương trình (trong ảnh chụp màn hình, nó đã được hoàn nguyên lại để hộp kiểm không khả dụng).

Ảnh chụp màn hình


Tôi không có câu trả lời cho câu hỏi của bạn, nhưng tôi sẵn sàng đặt cược rằng nếu bạn dành một chút thời gian trong hàng đợi vấn đề, bạn sẽ tìm hiểu lý do tại sao nó bắt đầu như được hoàn nguyên. Nếu không có bản vá có sẵn, ít nhất bạn sẽ hiểu rõ hơn về nơi bạn cần tấn công vấn đề.
Letharion

@Letharion - Nhưng đây đều là các khối và chế độ xem tùy chỉnh được phát triển.
Hacker

Theo định nghĩa đó, mọi thứ bạn xuất sẽ là "tùy chỉnh", vì vậy điều đó không có ý nghĩa với tôi.
Letharion

Câu trả lời:


20

Dưới đây là một vài suy nghĩ về việc đặt lại các tính năng của bạn theo chương trình hoặc dưới dạng tập lệnh cài đặt bổ trợ.

Bạn có thể sử dụng Drush để đặt lại Tính năng :

drush features-revert [feature name]

Một suy nghĩ khác sẽ là sử dụng tính năng numvert () trong quá trình cài đặt:

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

Các StrongARM mô-đun có thể hữu ích cũng như để buộc bạn Tính năng duy trì trạng thái mặc định của nó tôi nghĩ.

Tôi phải đồng ý với @Letharion trong nhận xét của anh ấy về OP của bạn. Tôi muốn biết rằng những điều quan trọng khác không bị sửa đổi sai trong quá trình cài đặt.


16

Hoàn nguyên TẤT CẢ các thành phần trong tính năng

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

4
Tôi nghĩ các tính năng numvert_module ('my_module'); thực hiện tất cả các bước này
Elijah Lynn


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

Trong đó 'mô-đun' là tên của mô-đun tính năng cụ thể (nghĩa là mô-đun được tạo khi bạn tải xuống tính năng) và 'thành phần' là các thành phần của các tính năng đó. Vì vậy, nếu bạn chỉ muốn hoàn nguyên các trường được xác định trong tính năng, bạn có thể sử dụng 'trường' cho thành phần.


4

Tôi có thể giải quyết vấn đề bằng cách sử dụng hàm hook fe_block_settings_features_revert('basic_site')trong đó fe_block_sinstall là hook tức là thành phần ở đây và basic_site là tên tính năng / mô-đun.


3
Bạn có thể giải thích thêm một chút? Làm thế nào để bạn sử dụng chức năng này trong .profile hoặc .install?
kLezer

4

Sử dụng features_revert()để hoàn nguyên các thành phần cụ thể chỉ khi cú pháp là:

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

ví dụ:

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

Để hoàn nguyên toàn bộ mô-đun (với tất cả các thành phần của nó), sau đó sử dụng features_revert_module()thay thế, ví dụ:

features_revert_module('module_name');

Quy tắc

Đối với quy tắc, phương pháp này nhanh hơn nhiều (để hoàn nguyên quy tắc đơn):

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

Để hoàn nguyên tất cả các quy tắc, đó là:

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

Xem: Thêm quy tắc hoàn nguyên drush [# 2474577] | Drupal.org


2

Để hoàn nguyên tất cả các thành phần bị ghi đè của tất cả các Tính năng trong Hồ sơ cài đặt của bạn, hãy thêm phần sau vào tệp hook_profile_t Nhiệm () của tệp .profile của bạn

/**
 * 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)));
      }
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.