Ripristina un componente di funzionalità a livello di codice


21

Ho una funzione installata usando un profilo di installazione. Ma devo sempre andare e ripristinare un particolare componente in modo che non sia più sovrascritto (in modo che, ad esempio, vengano visualizzati i blocchi della funzione). Volevo solo sapere se posso fare questo passo programmaticamente usando il codice stesso nel profilo di installazione.

Nella schermata seguente, ho mostrato il componente che deve essere ripristinato a livello di codice (nella schermata, è già ripristinato, quindi la casella di controllo non è disponibile).

Immagine dello schermo


Non ho una risposta alla tua domanda, ma sono disposto a scommettere che se passi un po 'di tempo nella coda dei problemi, scoprirai perché inizia come ripristinato. Se non è disponibile una patch, almeno sarai più vicino a capire dove devi attaccare il problema.
Letharion,

@Letharion - Ma questi sono tutti blocchi personalizzati e viste sviluppate.
Hacker

Secondo quella definizione, tutto ciò che esporti sarebbe "personalizzato", quindi per me non ha senso.
Letharion,

Risposte:


20

Ecco alcune considerazioni sul ripristino delle funzioni a livello di codice o come script di installazione aggiuntivo.

Si potrebbe utilizzare Drush per reimpostare il Feature :

drush features-revert [feature name]

Un altro pensiero sarebbe quello di utilizzare features_revert () durante il processo di installazione:

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

Lo Strongarm modulo potrebbe essere utile anche per forzare la vostra funzione di mantenere il suo stato di default credo.

Devo essere d'accordo con @Letharion nel suo commento sul tuo PO. Vorrei sapere che altre cose importanti non vengono modificate erroneamente durante il processo di installazione.


16

Ripristina TUTTI i componenti nella funzione

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

4
Penso che features_revert_module ('my_module'); fa tutti questi passaggi.
Elijah Lynn,


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

Dove "modulo" è il nome del modulo di funzionalità specifiche (ovvero il modulo generato quando si scarica la funzione) e "componente" sono i componenti di tali funzioni. Quindi, se vuoi solo ripristinare i campi definiti nella funzione, puoi usare 'field' per il componente.


4

Potrei risolvere il problema usando la funzione hook fe_block_settings_features_revert('basic_site')dove fe_block_settings è l'hook, ovvero il componente qui e basic_site è il nome della funzione / del modulo.


3
Puoi spiegarci un po 'di più? come si usa questa funzione in .profile o .install?
kLezer,

4

Utilizzare features_revert()per ripristinare componenti specifici solo dove la sintassi è:

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

per esempio:

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

Per ripristinare l'intero modulo (con tutti i suoi componenti), utilizzare features_revert_module()invece, ad esempio:

features_revert_module('module_name');

Regole

Per le regole, questo metodo è molto più veloce (per ripristinare una singola regola):

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

Per ripristinare tutte le regole, è:

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

Vedi: Aggiungi drush rules-revert [# 2474577] | Drupal.org


2

Per ripristinare tutti i componenti sostituiti di tutte le funzionalità nel tuo profilo di installazione, aggiungi quanto segue al hook_profile_tasks del tuo file .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)));
      }
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.