Catturare il "Save Configuration" di un modulo

3 contenuti / 0 new
Ultimo contenuto
Catturare il "Save Configuration" di un modulo

Salve,

sono agli inizi con la creazione di moduli per Drupal. Ho un modulo che inserisce un javascript inline oppure come file esterno. Per la scelta tra JS inline o esterno c'é un checkbox nel form del modulo. Purtroppo però per come ho creato al momento il modulo ogni volta che apro una pagina nell'amministrazione mi crea il file .js (con tanto di messaggio attraverso drupal_set_message())! Ho provato a impostare l'operazione di creazione del file solo quando c'é un aggiornamento delle opzioni, ma senza risultati. Ho pensato che si dovesse catturare il "Save Configuration". Oppure ci sono altri metodi? Ho dato uno sguardo agli altri moduli ma niente... Qualche guida online? Qualche aiuto?

Max

Ciao Max (sei chi penso io?), se ci fai vedere il codice che usi potremmo cercare di darti una mano, agire alla ceca risulta difficile (basta un estratto, non tutto il codice del modulo).

Ciao
Marco
--
My blog
Working at @agavee

Ok. Il codice è quello sottostante. Credo di aver mancato qualche sciocchezza:

<?php
 
function modfix_menu($may_cache) {
 
$items = array();
  if (!
$may_cache) {
   
$cssclasses = variable_get('css_classes', '');
    if (!empty(
$cssclasses)) {
     
$js = "$(document).ready(function(){ $('$cssclasses').mymethod(); });";
     
$jsfile = variable_get('js_file', FALSE);
      if (
$jsfile == TRUE) {
       
$dir = file_create_path('cart');
        if (
file_check_directory($dir, TRUE)) {
         
$filename = 'modfix.js';
          if (
$file = file_save_data($js, $dir.'/'.$filename, FILE_EXISTS_REPLACE)) {
            if (
$verbose) {
             
drupal_set_message(t('JavaScript file !file has been saved.', array('!file' => l($filename, $dir .'/'. $filename))));
            }
           
drupal_add_js($dir.'/'.$filename);
          }
          else {
            if (
$verbose) {
             
drupal_set_message(t('JavaScript file !file could not be saved.', array('!file' => $dir .'/'. $filename)), 'error');
            }
          }
        }
        else {
          if (
$verbose) {
           
drupal_set_message(t('Cannot create directory %dir.', array('%dir' => $dir)), 'error');
          }
        }
      }
      else {
       
drupal_add_js($js, 'inline');
      }
    }
  }
  else {
   
$items[] = array(
     
'path' => 'admin/settings/modfix',
     
'title' => t('Module Test'),
     
'description' => t('Configure how the module operates.'),
     
'access' => user_access('administer site configuration'),
     
'callback' => 'drupal_get_form',
     
'callback arguments' => 'modfix_admin',
    );
  }
  return
$items;
}
function
modfix_admin() {
 
$form['css_classes'] = array(
   
'#type' => 'textfield',
   
'#title' => t('CSS Classes'),
   
'#default_value' => variable_get('css_classes', ''),
   
'#description' => t('Comma seperated list of CSS classes.'),
  );
 
$form['js_file'] = array(
   
'#type' => 'checkbox',
   
'#title' => t('External Javascript file'),
   
'#return_value' => 1,
   
'#default_value' => variable_get('js_file', FALSE),
   
'#description' => t('Check this box if you want to write Javascript code to external file (default: disabled).'),
  );
  return
system_settings_form($form);
}
 
?>

Oltre a delle piccole particolarità, una volta verificato la var $may_cache, la funzione scrive sempre il file ogni qualvolta si carica una qualsiasi pagina dell'administer (con tanto di messaggistica del drupal_set_messate())!
Devo creare il file e scaricarci dentro le istruzioni js solo quando effettuo un update delle classi (css, ma potrebbe essere qualsiasi cosa).
Cosa ho sbagliato?

Max