D6 - Theming di un content-type ad Hoc

16 contenuti / 0 new
Ultimo contenuto
D6 - Theming di un content-type ad Hoc

Salve a tutti,
vi sono mancato eh! :-D
Ho creato un content-type ad hoc utilizzando i vari hook etc etc.
Nell'hook_view ho inserito tutti i campi ed il relativo theme (ed infatti li vedo).
Quello che mi chiedo adesso è:

Se creo un file del tipo node-articoli.tpl.php all'interno del mio tema, perchè non viene utilizzato per fare il theming del contenty-type?
Devo inserire qualche codice da qualche parte?

Grazie mille
Aran

Ok sono riuscito a rispondermi da solo:

Occorre inserire all'interno dell'hook_view il seguente codice:

$node->content = array('#value' => theme('articoli', $node),
'#weight' => 2
   );
[

dopodiché all'interno di template.php ho inserito:

$hooks['articoli'] = array(
  'template' => 'templates/node-articoli',
  'arguments' => array('node' => null)
     );

Infine ho creato il file node->articoli.tpl.php ed il gioco è fatto.
Il fatto che funzioni non vuol dire che sia la soluzione finale, se qualcuno ha suggerimenti li attendo a braccia aperte.

Ciao
Aran

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

versione 1.2
nell'hook_theme inserire il seguente codice

function articoli_theme($existing, $type, $theme, $path)
{
return
array(
'articoli' => array(
'template' => 'templates/node-articoli',
  'arguments' => array('node' => NULL)
),
);
}

L'unico inconveniente è che così occorre inserire il template all'interno del modulo che gestisce il content-type, invece di metterlo nela cartella template del modulo.

PS.
non sono riuscito a "temare" ancora la funzione hook_form

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

Ciao, ma non hai usato CCK per scelta o per quale altro motivo ?

M.

--
Michel 'ZioBudda' Morelli -- [email protected]
Sviluppo applicazioni CMS DRUPAL e web dinamiche -- Corsi Drupal -- Amministrazione Drupal -- Hosting Drupal

Ho cominciato a vedere le API di CCK, ma il tempo era veramente esiguo e quindi ho optato su questa soluzione.
Avevo il libro... :-D

Ciao

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

@Aran: puoi anche indicare il parametro path nell'hook_theme() e quindi usare la directory corretta (ipotizzo template), quindi avresti una cosa TIPO:

<?php
function articoli_theme($existing, $type, $theme, $path) {
  return array(
   
'articoli'     => array(
     
'path' => drupal_get_path('module', 'articoli') . '/template',
     
'template' => 'node-articoli',
     
'arguments' => array('node' => NULL),
    ),
  );
}
?>

e così via. Maggiori info in http://api.drupal.org/api/function/hook_theme

Ciao
Marco
--
My blog
Working at @agavee

Io so che via tema è possibile creare un tpl senza scrivere una linea di codice.
Il tpl deve trovarsi nella root della directory del tema, e deve avere il seguente nome: node-NodeTypeName.tpl.php.
Una volta creato, il tema lo caricherà quando serve.

Invece se il node type è implementato via modulo, magari il suggerimento di @mavimo è ottimo...

@Felaground: vero che se si trova nel tema si aggancia in automatico, ma se si trova nel modulo non è possibile. La richeista di @Aran presumo dipenda dal fatto che voglia fornire un modulo che una volta installato ha già un suo template predefinito, senza rendere necessario andare a copiare nel file del tema (resta sempre vero, che se crea un file nel tema, viene sovrascritto quello del modulo).

Ciao
Marco
--
My blog
Working at @agavee

Già dipende dagli usi previsti...

PS: Felaground!? :O suon bene però :D

Opps, scusa, non era ASSOLUTAMENTE mia intenzione storpiare il tuo nome, scusa ancora.

In definitiva, si, dipende dagli usi previsti... il bello di Drupal è che possiamo usarlo per fare un pò di tutto e si piega "abbastanza bene" alle varie esigenze :P

Ciao
Marco
--
My blog
Working at @agavee

tranquillo per il nick ;)

già, la gente mi chiede stranita "ma usi drupal? io so che è ostico e non ci fai molto" e io rispondo "ehm, una volta compreso il meccanismo di fondo t'assicuro che è moolto versatile".

eheheh grazie a tutti :-)
@Movimo: quello che hai suggerito è effettivamente ciò che alla fine ho fatto :-) però se io creo un content-type con CCK, il template del content type lo posso inserire all'interno di sites/all/themes/zen/template/node-{nome Content-type}.tpl.php

La mia domanda era quindi riferita se c'era un modo per fare la stessa cosa con un modulo ad hoc.
Avrei potuto mettere

  drupal_get_path('theme','zen').'/templates/

nell'hook_theme

ma il codice sarebbe poi rimasto agganciato al nome del tema (in questo caso zen).
Il perchè di questa richiesta sta nel fatto che siamo in 2 a lavorare sullo stesso modulo, io come implementatore e l'altro come "grafico".
Abbiamo messo anche l'svn come tool di sincronizzazione, ma l'altro deve ancora "capire" come funziona (lol) e quindi tutte le volte mi sovrascrive le cose (se poi aggiungi che non committa nemmeno le midifiche che fa...).
Quindi l'aver svincolato il tema dal modulo tornerebbe davvero comodo.
L'unico modo che ho trovato per ora è quello di inserire il theme dentro template.php del tema

Grazie ancora
Aran

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

eheheh grazie a tutti :-)
@Movimo: quello che hai suggerito è effettivamente ciò che alla fine ho fatto :-) però se io creo un content-type con CCK, il template del content type lo posso inserire all'interno di sites/all/themes/zen/template/node-{nome Content-type}.tpl.php

La mia domanda era quindi riferita se c'era un modo per fare la stessa cosa con un modulo ad hoc.
Avrei potuto mettere

  drupal_get_path('theme','zen').'/templates/

nell'hook_theme

ma il codice sarebbe poi rimasto agganciato al nome del tema (in questo caso zen).
Il perchè di questa richiesta sta nel fatto che siamo in 2 a lavorare sullo stesso modulo, io come implementatore e l'altro come "grafico".
Abbiamo messo anche l'svn come tool di sincronizzazione, ma l'altro deve ancora "capire" come funziona (lol) e quindi tutte le volte mi sovrascrive le cose (se poi aggiungi che non committa nemmeno le midifiche che fa...).
Quindi l'aver svincolato il tema dal modulo tornerebbe davvero comodo.
L'unico modo che ho trovato per ora è quello di inserire il theme dentro template.php del tema

Grazie ancora
Aran

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

beh a parte che la gente dovrebbe imparare qualcosa prima di metter mano a sviluppare (riferito al grafico), in ogni caso, non avrebbe senso mettere un code simile al template.php per i motivi seguenti, che personalmente ritengo validi:

  • è code inutile poiché il tema implementa in automatico
  • se crei un modulo con un node type interno, allora all'interno del modulo dovresti definire le funzioni di theming (tpl compreso), e lasciando quindi il modulo indipendente dal tema

se per sbaglio sovrascrivi qualcosa, un rollback e si risolve.

domanda agli esperti.
in una situazione simile, come si imposta il teaser? e se il node type non ha corpo, bensì una form con diversi elementi (quali menu a tendina, radio, checkbox...)?

Grazie

Sono pienamente d'accordo con te felagund.
Cmq mi poteva tornare utile avere il tpl dentro la cartella del tema solo per poter lavorare in maniera asincrona, se mi carica 50 volte in 5 minuti il tema perchè sta facendo delle prove, per me poi risulta difficile fare le mie.
La mia era solo una curiosità del tipo "perché CCK fa così ed io non posso?" :-D

Detto questo ho provato a fare l'hook_theme anche dell' hook_form, ma non mi prende il tema...
Partendo dal presupposto che il mio content-type si chiama articoli, il mio codice risulta:

function articoli_theme($existing, $type, $theme, $path)
{
return
   array(
      'articoli' => array(
           'template' => 'templates/node-articoli',
           'arguments' => array('node' => NULL)
      ),
      'articoli_form'  => array(
          'template' => 'templates/form-add',
          'arguments' => array('form' => null)
      )
  );
}

il form-add.tpl.php è nella giusta cartella (insieme a node-articoli.tpl.php),ma non me lo prende

Grazie
Aran

--
Il saggio non è colui che sa tutto, ma colui che sa dove trovare le risposte

Aran wrote:
Sono pienamente d'accordo con te felagund.
Cmq mi poteva tornare utile avere il tpl dentro la cartella del tema solo per poter lavorare in maniera asincrona, se mi carica 50 volte in 5 minuti il tema perchè sta facendo delle prove, per me poi risulta difficile fare le mie.

"Il grafico sbaglia candeggio"... Non può committare un intero tema così solo per provare. Si prova in locale, poi quando funziona o quando serve una valutazione dell'altro o non sa risolvere, commenta, committa, t'avvisa... Altrimenti ognuno lavora sul proprio locale e quando utile si committa.
Commit piccoli e frequenti sono migliori di commit grandi con periodi lunghi l'uno dall'altro.
Infine, se il grafico lavora sui tpl e te sul template.php, non dovreste "pestarvi i calli". Se entrambi lavorate sullo stesso file, esiste la funzione di merging...

Parlo da esterno, ma anche io ho avuto un problema simile e alla fine il grafico ha imparato altrimenti con me aveva finito... <.<