Invertire a livello di codice gli elementi del nodo.

4 contenuti / 0 new
Ultimo contenuto
Invertire a livello di codice gli elementi del nodo.

Ciao a tutti,
premetto che conosco drupal da qualche giorno ed utilizzo la versione 5.3.

Il mio problema qual'è? Nella visualizzazione di un nodo specifico (es url: ?q=node/123) ho bisogno di invertire i tag p contenenti il testo del nodo con il div contenente l'immagine (quello con classe image-attach-body per capirci). Il tema che utilizzo è zen, modificato nei colori.
L'immagine ha giustamente float: right, ma viene visualizzata non a destra del testo del nodo ma a destra del navigatore, il che è molto brutto da vedere (poi i gusti sono gusti).
Invertire come? Ho necessità di invertire i e l'immagine graficamente, ma da css e/o file tpl non sono riuscito in quanto nei secondi viene printato il nodo come $content e non come titolo, info-autore, testo, immagine, navigatore, ecc. Ho quindi provato a cercare (e cercando sul sito api.drupal.org, e provando a intuito di azzeccare il file dove vengono composti gli elementi) il modo di scambiare l'ordine dei tag.
Quindi anziché avere una struttura:

<div class="content">
  <p>...</p>
  <p>...</p>
  <p>...</p>
  <div class="image-attach-body" ...><a href="..."><img src="..." /></a></div>
</div>

, devo avere:
<div class="content">
  <div class="image-attach-body" ...><a href="..."><img src="..." /></a></div>
  <p>...</p>
  <p>...</p>
  <p>...</p>
</div>

Devo, in pratica, far sì che venga visualizzato il nodo come nella index in cui a livello di codice si trova titolo, info-autore, immagine (in un div di classe image-attach-teaser, testo, link-per-commenti.

Qualche suggerimento?

Ringrazio anticipatamente.

Forse ho trovato un modo per risolvere il mio problema: devo settare $node['content']['image_attach']['#weight'] a -1 per renderlo minore di $node['content']['body']['#weight'], così quando vengono ordinati gli elementi per il concatenamento del codice vengono invertiti. Spero di riuscire a trovare dove. Qualcuno mi sa aiutare?

nel codice del modulo che serve a caricare l'immagine (dovrebbe essere nella funzione nomemodulo_form_alter()).
Sicuro di non riuscire a sistemare con i CSS? con i float porti fuori l'elemento dal flusso standard della pagina, quindi poco importa se lo metti prima o dopo dei paragrafi.. IMHO è sufficiente agire su margin e padding per fare quello che vuoi (se non ho capito male quello che vuoi fare tu :) )

Ciao
Marco
--
My blog
Working at @agavee

Ho risolto aggiungendo nella funzione node_view(), prima della chiamata di drupal_render() il seguente codice

if (!empty($node->content)
&& !empty($node->content['image_attach'])
&& $node->content['image_attach']['#weight'] == 0) {
$node->content['image_attach']['#weight'] = -1;
}

Lo so, ho fatto una cosa odiosa, anche io odio i rattoppamenti dell'ultimo minuto, ma non riuscivo a venirne fuori.
Avevo provato con i css agendo su margin e padding, ma non sono riuscito ad ottenere l'effetto desiderato, peggiorava.