Conversione modulo da 5.x a 6.x

Posts: 100
Iscritto il: 08 Mar 08

Ciao a tutti,
sto cercando di convertire il modulo Urlify dalla versione 5 alla versione 6 di Drupal, attenendomi a quanto indicato nell'apposita guida ufficiale.
Ho convertito quasi tutto eccetto una parte, relativa all'utilizzo di un javascript. Il codice è questo:

/**
* Implementation of hook_footer().
*/
function urlify_footer() {
  if (_urlify_insert_js()) {
    $max_chars = variable_get('urlify_max_characters', 50);
    $output = <<<EOF
<script type="text/javascript">
if (Drupal.jsEnabled) {
  $('#edit-path').change(function() {
    $(this)._changed = true;
  });
   
  $('#edit-title').keyup(function() {
    var e = $('#edit-path');
   
    if(!$(e)._changed) {
      $(e).val(URLify($(this).val(), $max_chars));
    }
  });
}

(a parte il fatto che non si possono inserire javascript nell'hook footer... ma questa cosa è facilmente modificabile...)
dato che la guida per effettuare i cambiamenti non la trovo affatto chiara (la parte di guida relativa ai javascripts è qui), potete darmi qualche spunto/suggerimento?
Considerate di parlare con una persona che di javascript sa poco o nulla, ho letto qualcosa oggi per la prima volta quindi vi lascio immaginare il mio livello... Sad
Avevo pensato di prendere un altro modulo di cui sono disponibili entrambe le versioni, per fare un confronto e capirci qualcosa ma visto il numero di moduli mi sembrava più una cosa disperata che altro...
Qualcuno sa darmi qualche dritta in proposito?
Grazie!
(Vi ricordo che parlate con una persona assolutamente niubba nella conversione dei moduli)

__________________

Posts: 1891
Iscritto il: 01 Gen 07
Admin di Drupal ItaliaSviluppatore DrupalDrupal Monkey. Mangio moduli e API a colazioneTraduttore

In pratica si tratta di uno snippet di codice che prende un valore e va a inserirlo da un altra parte, in sintesi i concetti base sono:
Drupal.jsEnabled controlla se è attivo il JS di drupal (con jQuery & c.) e se lo è esegui la parte sottostante.

$(document).ready( .... ) esegue la parte di codice indicata al caricamento della pagina completato 8solo della pagina, non delle immagini o altri documenti orrelati, quindi a volte può fare casino e si preferisce usare $(window)

$(...) serve a prelevare un oggetto con il selettore specificato (stesse regole del css), per esempio nella riga

$('#edit-path')

si seleziona l'oggetto con id edit-path, in questo caso a questo oggetto viene impostata la proprietà onchange tramite la funzione change, in pratica si dice, nel momento in cui si modifica a mano il path imposta una sua propietà _changed a true, il pezzo dopo (keyup) dice di eseguire una funzione ogni volta che viene premuto un tasto nella casella indicata dal selettore #edit-tile, se (e solo se) non è già stato modificato a mano il path in #edit-path (controlla la proprietà settata _changed) allora applica la funzione URLify, che sarà definita, presumo, in qualche altro JS che viene incluso.

Ad occhio e crocie dovrebbe funzionare tutto così com'è, io ti suggerirei, quando ci hai preso un pò più mano, di passare ad una scrittura più pulita del codice, usando druapl_add_js( $var, 'setting') anzichè un inclusione così "sporca", ma se ne può parlare dopo, il codice così com'è funziona sucuramente, quindi non devi modficare nulla Laughing out loud.

__________________

Ciao
    Mavimo
_________________
Io mio sito su Drupal, CFD e OpenFOAM (e se vi chiedete cosa c'entrano l'uno con l'altro.. bhè, non so nemmeno io la risposta Sticking out tongue )


Posts: 100
Iscritto il: 08 Mar 08

Grazie Mavimo, ho capito tutto!
Solo che il modulo non va... perché c'è un'altra parte che avevo ignorato di aggiornare ed è questa:

Modulo 5.x:

/**
* Implementation of hook_menu()
*/
function urlify_menu($may_cache) {
  $items = array();
 
  if ($may_cache) {
    $items[] = array(
      'path' => 'admin/settings/urlify',
      'title' => t('URLify'),
      'description' => t('Configure the URLify module.'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('urlify_settings'),
      'access' => user_access('administer urlify'),
      'type' => MENU_NORMAL_ITEM
    );
    // Test - may move the configuration here
     $items[] = array('path' => 'admin/build/path/urlify', 'title' => t('URLify settings'),
      'callback' => 'drupal_get_form',
      'callback arguments' => array('urlify_settings'),
      'access' => user_access('administer urlify'),
      'type' => MENU_LOCAL_TASK);
  }
  else if (_urlify_insert_js()){
    $default_remove_list = array(
      "a", "an", "as", "at", "before", "but", "by", "for", "from",
      "is", "in", "into", "like", "of", "off", "on", "onto", "per",
      "since", "than", "the", "this", "that", "to", "up", "via",
      "with"
    );

    // This may not be needed anymore since the values are now passed directly to Javascript
    $remove_list = preg_replace("/(\w+)/e","\"'$1'\"", variable_get('urlify_strings_to_ignore', implode(',', $default_remove_list)));

    drupal_add_js(array('urlify' => array('remove_list' => $remove_list)), 'setting');
    drupal_add_js(drupal_get_path('module', 'urlify') . '/urlify.js');
  }
 
  return $items;
}

che io ho modificato così:

/**
* Implementation of hook_menu()
*/
function urlify_menu() {
  $items = array();
  $items['admin/settings/urlify'] = array(
'title'            => t('URLify'),
'description'      => t('Configure the URLify module.'),
        'access arguments' => array('administer urlify'),
        'page callback'    => 'drupal_get_form',
'page arguments'   => array('urlify_settings'),
'access arguments' => array('administer urlify'),
        'type'             => MENU_NORMAL_ITEM
);
  // Test - may move the configuration here
    $items['admin/build/path/urlify'] = array(
'title'            => t('URLify settings'),
        'access arguments' => array('administer urlify'),
        'page callback'    => 'drupal_get_form',
'page arguments'   => array('urlify_settings'),
'access arguments' => array('administer urlify'),
        'type'             => MENU_LOCAL_TASK
);
  }

Ma mi manca l'ultima parte contenuta nell'else if...
A questo punto voglio completarlo!
Qualcuno mi dà un suggerimento su come procedere?
Grazie

__________________

Posts: 1891
Iscritto il: 01 Gen 07
Admin di Drupal ItaliaSviluppatore DrupalDrupal Monkey. Mangio moduli e API a colazioneTraduttore

Lasciandolo tal quale Eye-wink

__________________

Ciao
    Mavimo
_________________
Io mio sito su Drupal, CFD e OpenFOAM (e se vi chiedete cosa c'entrano l'uno con l'altro.. bhè, non so nemmeno io la risposta Sticking out tongue )


Posts: 100
Iscritto il: 08 Mar 08

Eh ma se ho tolto l'if iniziale... poi non ci può essere un else if...
Per la prima parte, quella che ho modificato, mi sono attenuta alla guida... non dovevo fare come ho fatto?

__________________

Posts: 1891
Iscritto il: 01 Gen 07
Admin di Drupal ItaliaSviluppatore DrupalDrupal Monkey. Mangio moduli e API a colazioneTraduttore

scusa, ho guardato velocemente solo il codice JS e non avevo considerato il resto Sticking out tongue
Ora non so esattamente cosa ritorna la funzione _urlify_insert_js() e non ho voglia di andare ad indagare prova a trasformare semplicemente l'else if in un semplice if, anche se credo che forsse sarebbe rivedere un attimo la logica di inserimento del JS nelle pagine, magari spostando il tutto hell'hook_form_alter().

__________________

Ciao
    Mavimo
_________________
Io mio sito su Drupal, CFD e OpenFOAM (e se vi chiedete cosa c'entrano l'uno con l'altro.. bhè, non so nemmeno io la risposta Sticking out tongue )


Posts: 146
Iscritto il: 14 Nov 07

ci sono novità con questo modulo?

__________________

Peppigno


Posts: 100
Iscritto il: 08 Mar 08

Uhmmm... da parte mia no, poi ho deciso di non usarlo, sono stata un paio di giorni a capire questa cosa dei js ma non mi è riuscito e quindi ho lasciato stare.
Della versione ufficiale per Drupal 6.x ancora nulla purtroppo...

__________________

Condividi contenuti