Revertir un componente de característica mediante programación

21

Tengo una característica instalada usando un perfil de instalación. Pero siempre tengo que ir y revertir un componente en particular para que ya no se anule (para que, por ejemplo, aparezcan los bloques de la característica). Solo quería saber si puedo dar este paso mediante programación usando el código mismo en el Perfil de instalación.

En la captura de pantalla a continuación, he mostrado el componente que debe revertirse mediante programación (en la captura de pantalla, ya está revertido, por lo que la casilla de verificación no está disponible).

Captura de pantalla

Hacker
fuente
No tengo una respuesta a su pregunta, pero estoy dispuesto a apostar que si pasa algún tiempo en la cola de problemas, descubrirá por qué comienza de manera revertida. Si no hay un parche disponible, al menos estará más cerca de comprender dónde debe atacar el problema.
Letharion
@Letharion: pero todos estos son bloques personalizados y vistas desarrolladas.
Hacker
Según esa definición, todo lo que exporta sería "personalizado", por lo que eso no tiene sentido para mí.
Letharion

Respuestas:

20

Aquí hay algunas ideas para restablecer sus funciones mediante programación o como scripts de instalación de complementos.

Puede usar Drush para restablecer la función :

drush features-revert [feature name]

Otra idea sería usar features_revert () durante el proceso de instalación:

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

El Strongarm módulo podría ser útil también para obligar a su característica de retener su estado predeterminado que pienso.

Tengo que estar de acuerdo con @Letharion en su comentario sobre su OP. Me gustaría saber que otras cosas importantes no se modifican por error durante el proceso de instalación.

Citricguy
fuente
16

Revierta TODOS los componentes en función

$feature = features_get_features('my_feature_machine_name');
$components = array_keys($feature->info['features']);
features_revert(array('my_feature_machine_name' => $components));
Gaydabura
fuente
44
Creo que features_revert_module ('my_module'); hace todos estos pasos
Elijah Lynn
5
features_revert(array('module' => array('component')));

Donde 'módulo' es el nombre del módulo de funciones específicas (es decir, el módulo generado al descargar la función) y 'componente' son los componentes de esas funciones. Entonces, si solo desea revertir los campos definidos en la función, puede usar 'campo' para el componente.

usuario1496391
fuente
4

Podría resolver el problema utilizando la función de fe_block_settings_features_revert('basic_site')enlace donde fe_block_settings es el enlace, es decir, el componente aquí y sitio_básico es el nombre de la función / módulo.

Hacker
fuente
3
¿Puedes explicar un poco más? ¿Cómo se usa esta función en .profile o .install?
kLezer
4

Use features_revert()para revertir componentes específicos solo donde la sintaxis es:

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

por ejemplo:

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

Para revertir todo el módulo (con todos sus componentes), use features_revert_module()en su lugar, por ejemplo:

features_revert_module('module_name');

Reglas

Para las reglas, este método es mucho más rápido (para revertir una sola regla):

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

Para revertir todas las reglas, es:

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

Ver: Agregar reglas de reversión drush [# 2474577] | Drupal.org

kenorb
fuente
2

Para revertir todos los componentes anulados de todas las características en su perfil de instalación, agregue lo siguiente a su archivo .profile hook_profile_tasks ():

/**
 * Rebuild & Revert all enabled features.
 */
features_rebuild();
features_revert();
rcourtna
fuente
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)));
      }
    }
Alex Skrypnyk
fuente