คืนองค์ประกอบองค์ประกอบโดยทางโปรแกรม


21

ฉันติดตั้งฟีเจอร์โดยใช้โปรไฟล์การติดตั้ง แต่ฉันจะต้องกลับไปและเปลี่ยนองค์ประกอบเฉพาะเพื่อไม่ให้ถูกแทนที่อีกต่อไป (เช่นบล็อกของคุณลักษณะปรากฏขึ้น) ฉันแค่อยากรู้ว่าฉันสามารถทำตามขั้นตอนนี้แบบเป็นโปรแกรมโดยใช้รหัสตัวเองในโปรไฟล์การติดตั้งหรือไม่

ในภาพหน้าจอด้านล่างฉันได้แสดงส่วนประกอบที่ต้องย้อนกลับทางโปรแกรม (ในภาพหน้าจอมันถูกเปลี่ยนกลับไปแล้วดังนั้นกล่องกาเครื่องหมายไม่พร้อมใช้งาน)

ภาพหน้าจอ


ฉันไม่มีคำตอบสำหรับคำถามของคุณ แต่ฉันยินดีที่จะเดิมพันว่าถ้าคุณใช้เวลาในคิวของปัญหาคุณจะพบว่าทำไมมันถึงเริ่มเปลี่ยนกลับ หากไม่มีโปรแกรมปะแก้คุณจะเข้าใจวิธีการโจมตีปัญหาได้ไม่ยาก
Letharion

@Letharion - แต่ทั้งหมดนี้เป็นบล็อกที่กำหนดเองและมุมมองที่ได้รับการพัฒนา
Hacker

ตามคำนิยามนั้นทุกสิ่งที่คุณส่งออกจะเป็น "กำหนดเอง" ดังนั้นจึงไม่สมเหตุสมผลสำหรับฉัน
Letharion

คำตอบ:


20

ต่อไปนี้เป็นความคิดเล็กน้อยในการรีเซ็ตคุณลักษณะของคุณโดยทางโปรแกรมหรือเป็นสคริปต์การติดตั้งเพิ่มเติม

คุณสามารถใช้ Drush เพื่อรีเซ็ตคุณสมบัติ :

drush features-revert [feature name]

ความคิดอื่นจะใช้features_revert () ในระหว่างกระบวนการติดตั้ง:

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

StrongArmโมดูลอาจจะมีประโยชน์เช่นกันที่จะบังคับให้คุณคุณสมบัติที่จะรักษาสถานะเริ่มต้นของผมคิดว่า

ฉันต้องเห็นด้วยกับ @Letharion ในความคิดเห็นของเขาที่มีต่อ OP ของคุณ ฉันต้องการทราบว่าสิ่งสำคัญอื่น ๆ ไม่ได้ถูกแก้ไขอย่างผิดพลาดระหว่างกระบวนการติดตั้ง


16

เปลี่ยนองค์ประกอบทั้งหมดในฟีเจอร์

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

4
ฉันคิดว่า features_revert_module ('my_module'); ทำตามขั้นตอนเหล่านี้ทั้งหมด
Elijah Lynn


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

โดยที่ 'module' เป็นชื่อของโมดูลฟีเจอร์เฉพาะ (เช่นโมดูลที่สร้างขึ้นเมื่อคุณดาวน์โหลดฟีเจอร์) และ 'component' เป็นส่วนประกอบของฟีเจอร์เหล่านั้น ดังนั้นหากคุณต้องการเปลี่ยนเขตข้อมูลที่กำหนดในคุณลักษณะคุณสามารถใช้ 'ฟิลด์' สำหรับส่วนประกอบ


4

ฉันสามารถแก้ปัญหาได้โดยใช้ฟังก์ชั่น hook fe_block_settings_features_revert('basic_site')ที่ fe_block_settings เป็น hook เช่นองค์ประกอบที่นี่และ basic_site เป็นชื่อคุณสมบัติ / โมดูล


3
คุณช่วยอธิบายอีกเล็กน้อยได้ไหม? คุณใช้ฟังก์ชั่นนี้ใน. profile หรือ. install อย่างไร
kLezer

4

ใช้features_revert()เพื่อย้อนกลับส่วนประกอบเฉพาะที่มีไวยากรณ์คือ:

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

ตัวอย่างเช่น:

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

ในการแปลงกลับทั้งโมดูล (ด้วยส่วนประกอบทั้งหมด) จากนั้นใช้features_revert_module()แทนเช่น:

features_revert_module('module_name');

กฎระเบียบ

สำหรับกฎวิธีนี้เร็วกว่ามาก (หากต้องการเปลี่ยนกฎเดียว):

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

หากต้องการย้อนกลับกฎทั้งหมดมันคือ:

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

ดู: เพิ่ม drush rules-revert [# 2474577] | Drupal.org


2

หากต้องการย้อนกลับส่วนประกอบที่ถูกแทนที่ทั้งหมดของฟีเจอร์ทั้งหมดในโปรไฟล์การติดตั้งของคุณให้เพิ่มสิ่งต่อไปนี้ลงใน hook.profile_tasks ของไฟล์. profile ของคุณ ():

/**
 * 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)));
      }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.