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... :(
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)
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 :D.
Ciao
Marco
--
My blog
Working at @agavee
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
http://funambolica.hellospace.net - http://tuxlife.hellospace.net
Lasciandolo tal quale ;)
Ciao
Marco
--
My blog
Working at @agavee
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?
http://funambolica.hellospace.net - http://tuxlife.hellospace.net
scusa, ho guardato velocemente solo il codice JS e non avevo considerato il resto :P
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
Marco
--
My blog
Working at @agavee
ci sono novità con questo modulo?
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...
http://funambolica.hellospace.net - http://tuxlife.hellospace.net
peccato, mi sarebbe servito...
Il modulo Autopath l'ho trovato molto valido, io lo uso come quasi-sostituto di Urlify ma spero di avere un po' di tempo per rimettermi a convertirlo perché mi sembrava meglio di Autopath.
http://funambolica.hellospace.net - http://tuxlife.hellospace.net