Ciao ragazzi avevo bisogno di una mano con php.
Allora la cosa sta in questi termini:
Ho editato il file node.tpl.php per far si che al caricamento di un determinato tipo di nodo, Drupal carica un diverso CSS per gestire la pagina a piacere. Quindi ho inserito il seguente codice di esempio:
<?php if ($node->type == 'news'){?><link href="<?php print $_SERVER['FILE'];?>directory/fogliodistile.css" rel="stylesheet" type="text/css"><?php };?>
Il problema però sta nel fatto che certe opzioni all'interno del "fogliodistile.css" vanno a incasinare l'opzione di edit dei nodi "news".
Cioè praticamente facendo un edit sulle pagine in questione(news) risulta tutto scombinato e non con il style.css generico del tema.
Quindi come posso fare a dire di caricare il "fogliodistile.css" solo se il node è una news e non è in editmode?
Ma il problema reale comunque è il fatto che a determinati blocchi ho dato l'ordine di comparire solo su determinati node tipe con il seguente codice:
<?php
if(arg(0) == 'node')
{
$nid = arg(1);
$node = node_load(array('nid' => $nid));
if ($node->type == 'news')
{
return TRUE;
}
}
return FALSE;
?>
come faccio a far si che compaia su tutti i node news ma non in edit mode?
Scusate la lunghezza del post.
Ciao, ci sei andato molto vicino: ti basta controllare che arg(2) non sia "edit"
E se mi posso permettere ti consiglio di trasformare il node_load in una SELECT per riuscire a migliorare le performance .:
$type = db_result(db_query("SELECT type FROM {node} where nid = %d",arg(1)));
Il node_load fa e lancia una marea di operazioni e nel tuo caso non servono.
M.
--
Michel 'ZioBudda' Morelli -- [email protected]
Sviluppo applicazioni CMS DRUPAL e web dinamiche -- Corsi Drupal -- Amministrazione Drupal -- Hosting Drupal
Sono in accordo con la prima osservazione, ma non la seconda...
La funzione node_load tiene un cache dei nodi caricati. Quindi anche se dispendioso la prima volta (query al DB), la seconda o enessima richiesta per lo stesso nodo è praticamente gratis.
Due osservazioni:
1. Non devi mettere un
<link>
nel<body>
- non è consentito dalla specifica, anche se il browser 'corregge' l'errore, non è per questo meno sbagliato.Dove metterlo? Nel file template.php del tuo sotto tema, specificamente nella funzione phptemplate_preprocess_page, oppura nome-del-tema_preprocess_page se ci sono - altrimenti crealo.
Il codice da aggiungere a quel funzione è:
2. Se hai più di un bloccho che usa quel codice PHP per capire la sua visibilità, meglio che sta in una funzione nel tuo modulo o tuo sotto tema (in template.php). Il codice con l'aggiunto di ziobudda sarebbe:
Più imparo, più dubito.
Non mi funziona, ho dovuto modificare un po' il codice, ma ora funziona, così:
<?php
$result = FALSE;
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$find=mysql_query("SELECT type from node where nid='$nid' limit 1 ");
$temp=mysql_fetch_array($find);
if(($temp["type"]=='news') && (arg(2) != 'edit')){
$result = TRUE;
}
}
return $result;
?>
Ho implementato un'attimo anche per il discorso della creazione di un contenunto 'news' nel quale sarebbero comparsi i blocchi con l'esempio iniziale...
Ora è perfettamente funzionante...
Grazie della mano...
http://www.de-signtn.it
Ah comunque geniale la cosa deil tempalte, me la sono studiata un po' fuori e in effetti è 4 volte pià comodo gestire css aggiuntivi da li piuttosto che da node.tpl.php. Tra l'altro aspettandosi che il browser o drupal corregga il
<link>
all'interno del body...http://www.de-signtn.it