PHP e nodetype

5 contenuti / 0 new
Ultimo contenuto
PHP e nodetype

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...

ziobudda wrote:
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.


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 è:

<?php
 
if(arg(0) == 'node' && arg(2) != 'edit' && $vars['node']->type == 'news') {
   
$vars['styles'] .= '<link href="'. $_SERVER['FILE'] .'directory/fogliodistile.css" rel="stylesheet" type="text/css">';
  }
?>

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:
<?php
 
if(arg(0) == 'node' && arg(2) != 'edit') {
     
$node = node_load(array('nid' => arg(1)));
      if (
$node->type == 'news') {
         return
TRUE;
      }
  }
  return
FALSE;
?>

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...

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...