Questa sezione della guida è dedicata a quei piccoli problemi che ho incontrato durante lo sviluppo con Drupal a cui però non avevo trovato , nei vari forum su Drupal , risposta immediata.
Modificare il titolo del sito
Come amministratore del sito, andando sulla voce di menu amministra->impostazioni compare la pagina con tutte le impostazioni del sito. Su impostazioni generali è possibile definire il titolo del sito, la email e l'icona.
Ripristinare la pagina di login scomparsa
Se è stata disabilitata la visualizzazione del Login , collegarsi con
www.miosito.it/user oppure www.miosito.it/?q=user,
per far comparire la pagina di login.
Sito off-line:non riesco più ad entrare
Provare in uno di questi modi:
-
Provare a collegarsi con www.miosito.com/user, per far comparire la pagina di login. Se si visualizza entrare come amministratore e riportare il sito on-line.
-
Controllare se nella tabella variable c'è un record con name= 'site_offline': se c'è cancellarlo insieme al record della tabella cache con cid='variables'
-
Se ancora non funziona il controllo del sito offline è fatto in includes/menu.inc funzione _menu_site_is_offline() chiamata dalla funzione menu_execute_active_handler()
-
Verificare 'impostazione della variabile $db_url nel file /sites/defaultl/settings.php
-
Se ancora non funziona il controllo del sito offline è fatto in includes/menu.inc funzione _menu_site_is_offline() chiamata dalla funzione menu_execute_active_handler()
Eseguire il Logout
Per eseguire un Log-out non da menu chiamare la pagina http://miosito.com/logout
Aprire una nuova finestra da menu (target="_blank")
L'apertura di una nuova finestra viene eseguita impostando l'attributo "target" nel tag href.
La funzione di default che prepara il tag href e' la funzione theme_menu_item_link() (contenuta in includes/menu.c).
Dobbiamo quindi creare una delle due seguenti funzioni in modo tale che Drupal le possa chiamare in sostituzione della funzione di default.
Le due funzioni, da inserire nel file template.php, sono:
- miotema_menu_item_link($link)
- phptemplate_menu_item_link($link)
Se esistono entrambe , Drupal darà la precedenza a miotema_menu_item_link($link).
Considerando ad esempio la seconda, possiamo fare in modo che l'attributo Target sia presente se il riferimento al link inizia con "http" indicando un percorso esterno al sito. Ecco il codice.
Per versione 6.x
<?php
function phptemplate_menu_item_link($link) {
if (empty(
$link['localized_options'])) {
$link['localized_options'] = array();
}
if( strtolower(substr($link['href'],0,4))=="http") {
$link['localized_options']['attributes'] = array('target' => '_blank');
}
return
l($link['title'], $link['href'], $link['localized_options']);
}
?>
In alternativa possiamo sfruttare l'attributo $link[external]=1 che Drupal fornisce nel caso il link sia esterno. Ecco il codice.
<?php
function phptemplate_menu_item_link($link) {
if (empty(
$link['localized_options'])) {
$link['localized_options'] = array();
}
if ($link['external']==1) {{
$link['localized_options']['attributes'] = array('target' => '_blank');
}
return l($link['title'], $link['href'], $link['localized_options']);
}
?>
Per versione 5.x
<?php
function theme_menu_item_link($item, $link_item) {
$attributes = array();
if (!empty($item['description'])) $attributes['title'] = $item['description'];
if( strtolower(substr($link_item['path'],0,4))=="http") {
$attributes['target'] = "_blank";
}
return l($item['title'], $link_item['path'], $attributes, isset($item['query']) ? $item['query'] : NULL);
}
?>
Attenzione , se il tema che si sta utilizzando implementa la funzione miotema_menu_item_link() nel file template.php, inserire la patch anche in questa funzione.
Il test per abilitare URL semplificati fallisce
Per sistemi Windows e server Apache fare le seguenti modifiche:
in httpd.conf
1. scommentare LoadModule rewrite_module modules/mod_rewrite.so
2. impostare AllowOverride All in ..
<Directory "C:/drupal">
AllowOverride All
Options None
Order allow,deny
Allow from all
</Directory>
essendo C:/drupal la documentRoot di Apache
Ordinare i contenuti nella prima pagina
Come sono ordinati i contenuti nella rima pagina?
All'avvio di Drupal viene eseguita la funzione node_page_default() , contenuta in includes/node.module. In questa funzione viene eseguita la seguente query per vedere quali contenuti devono essere inseriti in prima pagina.
SELECT n.nid, n.sticky, n.created FROM node n
WHERE n.promote = 1 AND n.status = 1 ORDER BY n.sticky DESC, n.created DESC
Quindi affinché un contenuto compaia in prima pagina nella tabella NODE si deve avere:
promote = 1 ; cioè promosso in prima pagina.
status = 1; cioè pubblicato.
L'ordinamento è fatto sui due campi: sticky(opzione fisso in cima alla lista ) e created (data creazione) e su entrambi in modo discendente.
Per il campo sticky più è alto il valore più il commento sarà in cima alla lista.
Per il campo created , i commenti più recenti saranno visualizzati per primi.
Quindi, al di là della data di creazione, per portare un commento al primo posto nella pagina, basta assegnarli (direttamente nella tabella NODE) il valore di sticky più alto in assoluto e via via decrescente per i contenuti che devono seguire.
Per tutti i contenuti che si vogliono visualizzare in base alla loro data di creazione, basta mantenere sticky=0.
Attenzione:se ad un contenuto si assegna l'opzioe "fisso in cima alla lista" il valore di sticky sarà posto=1 sovrascrivendo eventuali valori da noi impostati direttamente nella tabella NODE.
Cambiare il proprietario di un contenuto
Ci sono due modi per modificare il proprietario del nodo.
1. Il primo consiste nell'entrare nel nodo del contenuto come amministratore e nelle informazioni sull'autore inserire il nome dell'utente a cui dare la proprietà del nodo.
Attenzione: il nuovo utente potrà ora modificare il contenuto solo se in Controllo accessi ha il permesso amministra filtri nel modulo filter oppure se il formato del contenuto è Filtered HTML. Nel caso non fosse così, permessi non assegnati o formato uguale a PHP code o Full HTML, è necessario o cambiare il permesso o impostare il formato a Filtered HTML.
2. Il secondo metodo consiste nel modificare il campo uid nella tabella node inserendo il valore uid assegnato all'utente (vedere tabella users). Vale la stessa considerazione fatta precedentemente per il formato. Il valore del formato selezionato è comunque indicato nella tabella node_revisions nel campo format per il/i record con campo nid uguale al valore nid del nodo nella tabella node.
La tabella node_revisions ha anche il campo uid che per correttezza dovrebbe essere posto uguale al valore in tabella node, ma anche se mantiene il precedente valore non inficia il cambiamento del proprietario.
Format = 1 Filtered HTML valore di default per tutti gli utenti
Format = 2 PHP code
Format = 3 Full HTML
I fogli di stile non sono caricati
Compare solamente il contenuto senza sidebar intestazione etc.
- Controllare che il nome del tema assegnato all'utente sia presente nella tabella system per type="theme"
- Controllare che file di stile indicato nella tabella system nel campo filename, esista per quel tema e che non sia corrotto
Usare una vista nel codice PHP
Drupal 6.x
Views 2.0
Supponiamo di avere un modulo che chiama la funzione miomodulo_output () generando un output per il contenuto principale.
<?php
function miomodulo_output () {
$output = "Messaggio di prova";
return $output;
}
?>
Voglio ora inserire dopo il messaggio il risultato di una vista creata mediante l' interfaccia delle viste.
Il nome della vista è "vista_di_prova" e accetta in ingresso un argomento numerico passato alla funzione miomodulo_output().
Al codice precedente dobbiamo aggiungere una sola riga:
<?php
function miomodulo_output ($arg1) {
$output = "Messaggio di prova<br>";
$output .= views_embed_view('vista_di_prova', 'page_1',$arg1);
return $output;
}
?>
Dove page_1 è il nome del display_id da visualizzare definito nell'interfaccia della vista.
Per approfondimenti
http://drupal.org/node/48816
Eliminare la data ed il nome utente da una pagina
Come amministratore andare alla pagina delle "impostazioni globali" dei temi. (/admin/build/themes/settings/global)
Per ogni tipo di contenuto presente nella sezione "Mostra le informazioni del contenuto su",
eliminare il segno di spunta sul tipo di contenuto su cui non si vuole mostrare nome e data.
Ripristinare la password di amministratore
Eseguire la query:
UPDATE users SET pass = MD5( 'NUOVAPASSWORD' ) WHERE uid =1;
Per saper il nome associato all'amministratore:
SELECT name FROM users WHERE uid =1;
Ulteriori informazioni possono essere lette direttamente dalla tabella users degli utenti.
Conoscere la directory di ...
| Cosa |
come |
| directorydel sito |
global $base_url |
| directory di un modulo |
$path = drupal_get_path('module', 'nomemodulo'); |
| directory di un tema |
$path = drupal_get_path(theme', 'nometema'); |
| directory di un engine |
$path = drupal_get_path(theme_engine', 'nomeengine'); |
| directory tema corrente |
global $theme_path |
global $theme_path
Utenti: Sapere se un utente appartiene a un ruolo
Per verificare se l'utente corrente appartiene ad uno dei ruoli definiti nella tabella ROLE
definire la seguente funzione:
<?php
/**
* @param $role Il nome del ruolo da verificare
* @param $user Oggetto utente
* @return TRUE se l'utente appartiene al ruolo richiesto , FALSE altrimenti
*/
function user_has_role($role, $user = NULL) {
if ($user == NULL) {
global $user;
}
if (is_array($user->roles) && in_array($role, array_values($user->roles))) {
return TRUE;
}
return FALSE;
}
?>
Commenti recenti
28 weeks 5 days fa
29 weeks 10 hours fa
2 years 19 weeks fa
3 years 2 days fa