Domanda

Ho sviluppato una funzione di archiviazione blogger-simile (si sa, dal modulo funzione). Voglio modificare il file .module per caricare automaticamente la vista-template (che è in bundle nella funzione) nel tema. C'è un modo per farlo?

È stato utile?

Soluzione

A livello generale: si dovrebbe pensare " caratteristiche = moduli " e lasciando tematizzazione per ... temi! Questo non significa che non si deve includere un modello con la tua caratteristica, ma che si dovrebbe valutare se il modello che avete costruito abiti un uso generale della vostra funzione o è specifica per il tema attualmente utilizzato . Se è il secondo caso, non si dovrebbe comprime il file modello con la funzione, ma lascia con il tema posto. Basti pensare a come il viste modulo funziona, per avere un'idea di quello che voglio dire.

[forse siete già a conoscenza di questo e ha fatto le sue considerazioni a questo riguardo, nel qual caso semplicemente ignorare quanto sopra. Ho pensato di scrivere, perché la tua frase "Voglio che il tpl.php sia effettivamente disponibile per la funzione di usarlo (proprio come se fosse nella cartella del tema attivo)" mi ha sorpreso come generale- utilizzare i modelli non vivono nella cartella del tema, ma nel loro modulo uno, e per di più viste forniscono già un modello di "uso generale".]

Detto questo, il modo in cui normalmente dici Drupal di utilizzare un determinato modello, avviene tramite l'attuazione hook_theme() nel modulo. In questo caso - anche se - dato che si sta andando a sovrascrivere il modello definito da vista è necessario implementare hook_theme_registry_alter() .

già lo ha fatto . Ecco il frammento di codice dalla pagina collegata:

function MYMODULE_theme_registry_alter(&$theme_registry) {
  $my_path = drupal_get_path('module', 'MYMODULE');
  $hooks = array('node');  // you can do this to any number of template theme hooks
  // insert our module
  foreach ($hooks as $h) {
    _MYMODULE_insert_after_first_element($theme_registry[$h]['theme paths'], $my_path);
  }
}

function _MYMODULE_insert_after_first_element(&$a, $element) {
  $first_element = array_shift($a);
  array_unshift($a, $first_element, $element);
}

Naturalmente si dovrà modificare il Registro di tema per la vostra vista, piuttosto che per un nodo (l'esempio originale si riferisce ad un tipo di CCK).

Come sull'utilizzo del modello nella views_ui, non sono sicuro del tempo il modulo caratteristiche già svuotare la cache tematizzazione quando si installa una funzione (nel qual caso si dovrebbe essere pronti per partire). In caso contrario, è possibile attivare manualmente invocando cache_clear_all () dalla tua installazione file. Se svuotare l'intera cache è troppo, si dovrebbe scavare nel modulo di vista su come svuotare la cache relativamente a una singola vista.

Spero che questo aiuti!

Altri suggerimenti

Provare ad aggiungere questo al file .module funzione

/**
 * Implementation of hook_theme_registry_alter().
 */
function MYMODULE_theme_registry_alter(&$theme_registry) {
  $theme_registry['theme paths']['views'] = drupal_get_path('module', 'MYMODULE');
}

In caso di utilizzo di file .install questo

/**
 * Implementation of hook_enable().
 */
function MYMODULE_enable() {
  drupal_rebuild_theme_registry();
}

Ecco il mio frammento di dichiarare Visto modelli memorizzati nella cartella "modello" del mio "custom_module":

/**
 * Implements hook_theme_registry_alter().
 */
function custom_module_theme_registry_alter(&$theme_registry) {
  $extension   = '.tpl.php';
  $module_path = drupal_get_path('module', 'custom_module');
  $files       = file_scan_directory($module_path . '/templates', '/' . preg_quote($extension) . '$/');

  foreach ($files as $file) {
    $template = drupal_basename($file->filename, $extension);
    $theme    = str_replace('-', '_', $template);
    list($base_theme, $specific) = explode('__', $theme, 2);

    // Don't override base theme.
    if (!empty($specific) && isset($theme_registry[$base_theme])) {
      $theme_info = array(
        'template'   => $template,
        'path'       => drupal_dirname($file->uri),
        'variables'  => $theme_registry[$base_theme]['variables'],
        'base hook'  => $base_theme,
        // Other available value: theme_engine.
        'type'       => 'module',
        'theme path' => $module_path,
      );

      $theme_registry[$theme] = $theme_info;
    }
  }
}

Speranza che aiuta qualcuno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top