Modificate tema a gruppo di nodi

10 contenuti / 0 new
Ultimo contenuto
Modificate tema a gruppo di nodi

Salve,
vorrei sapere, come posso modificare la grafica a un gruppo di nodi.
Mi spiego, vorrei per il modulo forum ad esempio, un layout diverso, senza la sidebar destra che ho messo in tutte le pagine, però non solo nella home, ma anche nei vari topic.
Vorrei poi, poter modificare il layout, delle pagine per aggiungere nodi e commenti al forum.

Ciao e grazie in anticipo

Beh io faccio nella seguente maniera:
1) inserisci il campo '#theme' all'interno del form che vuoi modificare
2) all'interno del modulo crei un file php e lo includi all'interno del file .module del form
3) all'interno del file generato, crei una funzione di override del tema con il seguente nome:
function theme_{id del form}()
4) nella funzione puoi fare 2 cose:
i) Salvati il codice html del form da modificare (prendilo direttamente dal browser web) , copialo pari pari dentro la funzione di modifica e
riaggiustartelo poi inserendo dei div o delle tabelle
ii) Creati la struttura html ed inserire dove serve il form_rebuild del campo che devi modificare.

ESEMPIO:
supponiamo il seguente form

...
$form['#id'] = 'id_form_di_prova';
$form['#theme'] = 'form_di_prova'; //il nome può essere uno qualsiasi
...

Adesso creiamo un file php di nome temaform.php e lo includiamo all'inizio del form.module

...
include_once ("temaform.php"); //presta attenzione al path
...

editiamo il file temaform.php e ci inseriamo il seguente codice:

function theme_form_di_prova()
{
    $output = "Questo sostituisce il form";
    return $output
}

A questo punto quando caricherai la pagina del form, verrà sostituita la pagina con il codice che hai inserito all'interno della funzione theme_form_di_prova.
Basta quindi inserire il codice html del form originale salvato precedentemente e modificarlo secondo le esigenze.

NOTA IMPORTANTE:
alla fine del form devi NECESSARIAMENTE inserire questo codice cancellando quello del originario:

$output .= '<input type="hidden" name="form_token" id="edit-id_form_di_prova-form-token" value="'.drupal_get_token('id_form_di_prova').'"  />'
                .'<input type="hidden" name="form_id" id="edit-id_form_di_prova" value="id_form_di_prova"  />;

Se non rigeneri il token tutte le volte, il sistema ti ritornerà un validation error (su cui ci ho perso 2 settimane di vita!!!).

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

Per creare invece il tema di una pagina devi innanzitutto creare un nuovo tipo di contenuto - supponiamo "prova"-, e poi crearti un file php all'interno del tema con il seguente nome:

node-prova.tpl.php

all'interno ci metti il codice html che vuoi sostituire al normale rendering della pagina che vuoi modificare.
per inserire dei campi della pagina prima fai un

echo "<pre>";
print_r ($node);
echo "</pre>";

guarda quali sono i campi che vuoi stampare e poi li inserisci all'interno della pagina html usando
print ($node->campodastampare)

ricordati di levare gli echo e il print_r, vengono usati solo per il debug.
Spero di essere stato chiaro altrimenti chiedi
Ciao

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

Grazie per avermi risposto.
Perdona la mia ignoranza, purtroppo sto ancora cercando di imparare ad usare questo cms.
Quale sarebbe il file del form? Io per l'esattezza, vorrei personalizzare la pagina per inserire discussioni nel forum e per inserire i commenti, quale sarebbe il file form in questo caso?

Ciao e grazie

Il file del form lo devi creare te ma è solo per comodità, io di solito spezzo tutte le funzioni in vari file in modo da non navigare in un unico file da 1000000 righe.
Se non vuoi fare il file puoi inserire la funzione di override del tema all'interno del .module del modulo che vuoi modificare.
Per esperienza personale però ti conviene creare il file, così quando ci dovrai rimettere mano sai che devi modificare quel file :-D (ma comunque fai come credi meglio).
Per quanto riguarda il form da modificare dovresti individuare quale form genera i commenti e inserire il codice come ti ho descritto.
Nello specifico, per modificare l'aspetto del forum, puoi agire direttamente sul css che è all'interno del modulo.

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

Tu hai detto che io, devo inserire il #theme nel form che voglio modificare. Io voglio modificare quello per l'inserimento discussioni nel forum. Ho cercato in tutto il codice del modulo, e riguardo questo forum non ho trovato nulla. Devo cercare da qualche altra parte?

Grazie

Ti ci ho dato un occhio io e ti faccio la guida passo passo di cosa ho fatto:
1) con firebug (plugin fi firefox) ho intercettato l'id del form del commento (che è id="comment-form")
<form id="comment-form" method="post" accept-charset="UTF-8" action="/d5test/?q=comment/reply/1">
2) da terminale sono andato a cercare l'id in questione per vedere dove è localizzata la funzione che genera il commento
grep -Rn comment-form *
ti viene risposto questo:

modules/comment/comment.module:328:                'fragment' => 'comment-form'
modules/comment/comment.module:349:              'fragment' => 'comment-form'
modules/comment/comment.module:1825:        $destination = 'destination='. drupal_urlencode("comment/reply/$nid#comment-form");
modules/comment/comment.module:1828:        $destination = 'destination='. drupal_urlencode("node/$nid#comment-form");

Cercando un pò nel file di comment.module vedrai che la funzione che genera il form è
function comment_form($edit, $title = NULL) {
alla riga 1430 del file comment.module

quindi alla riga 1434 inserisci il seguente codice:
$form['#theme'] = 'comment_form';

Adesso crei sempre nella stessa cartella di comment il file comment_theme.php (Il nome è a casaccio, puoi chiamarla anche sbaragnao.php)
e dento ci inserisci il seguente codice:

<?php
/*comment.module 1432*/
function theme_comment_form(){
   
$output.="sbaragnao";
    return
$output;
}
?>

il nome della funzione questa volta è obbligatoriamente theme_nomedeltema dove nel nostro caso nome del tema è "comment-form".
A questo punto includi il file dentro comment alla riga 2 di comment.module
<?php
include_once("comment_theme.php");
// $Id: comment.module,v 1.520.2.14 2009/04/29 18:32:15 drumm Exp $

salvi tutto, vai sul forum ed otterrai che al posto del commento hai la scritta Sbaragnao.
Quindi tutto quello che vuoi scrivere al posto del normale form di commento lo inserisci nella funzione theme_comment_form.

:-D

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

NOTA importante!!!
1) ho notato che theme ho chiamato la funzione theme con lo stesso nome dell'id.
Non c'è nessuna relazione tra loro; fa fede il nome del tema!
2) Il modulo comment è globale quindi modificando il tema del commento, modificherai tutte le pagine di commento del sito.
Se hai disabilitato i commenti nella altre parti del sito o il tema va bene per tutte le pagine del tuo sito non hai nessun problema.

Ciao

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

Aran, mi pare che sia la seconda volta in pochi giorni che consigli di fare modifiche al codice del core di Drupal. Forse (anzi quasi sicuramente) ci sono soluzioni alternative, che permettono di tenere aggiornato Drupal in modo più efficiente.

In questo caso particolare, per aggiungere l'attributo #theme (o qualsiasi altra proprietà) al form dei commenti, puoi tranquillamente usare una funzione hook_form_alter in un tuo modulo, in cui potrai eventualmente implementare anche la relativa funzione theme_

E' vero, io modifico parecchio i moduli secondo le mie esigenze :-) e non sempre nel migliore dei modi, però dipende tutto da cosa bisogna fare.
Molte volte ci siamo trovati di fronte a moduli che fanno "quasi" tutto quello che ci serve, e alla fine la cosa migliore è modificarsi il modulo secondo le proprie necessità (Ad esempio abbiamo stravolto OG e event).
E' chiaro che poi bisogna fare attenzione a quello che si fa e soprattutto tenerne traccia.

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