Rimuovere "$node->body" duplicato quando $teaser non è settato

9 contenuti / 0 new
Ultimo contenuto
Rimuovere "$node->body" duplicato quando $teaser non è settato

Ciao all,

ho appena implementato un modulo da zero che crea un nuovo node, quando il node non viene visualizzato nel teaser ottengo un duplicato
del $node->body, ciò è corretto, ma io vorrei rimuovere quello che D6 mi mette di default alla prima riga.

Infatti in nel theme_node_info(), la variabile $node->body la stampo a mio piacimento dove voglio, ma me ne ritrovo un duplicato che non so come rimuovere.

Avete suggerimenti su come si possa fare?

Altra domanda: Voi di solito li utilizzate has_title ed has_body a TRUE quando create un nuovo node oppure è più opportuno metterli a FALSE e creare due campi specifici direttamente nello schema? Ci sono pro e contro? Se si quali?

sono consapevole di aver scritto un post un po' ostico, ma per capirci:

nella Home Page visualizzo tutti teaser dei node inseriti:

{title} Nuovo node
{data e autore} Fri, 09/25/2009 - 00:10 — sylpheed
{body} Drupal node test

quando clicco sul {title} mi si apre la pagina dove visualizzo il contenuto del node per intero:

{title} Nuovo node
{data e autore} Fri, 09/25/2009 - 00:10 — sylpheed
{body} Drupal node test {//Primo}

Drupal node test {stampato da: $node->body} {//Secondo}

CMS {stampato da: $node->type}
GPL {stampato da: $node->license}

come potete vedere, il primo "Drupal node test" mi viene messo di default, e io vorrei non visualizzarlo perché lo stampo direttamente con $node->body dove voglio.

Si può fare?

Spero di aver chiarito un po' di più quello che è il mio problema, in caso contrario se avete domande, chiede pure.

Innanzitutto non capisco cosa stai facendo, potresti inserire il tuo TPL per il nodo? E potresti anche farci vedere come carichi i campi del tuo nodo? Per quanto riguarda il creare campi da 0 per title e bodì, personalmente la considero una pessima idea, ci sono già (e vengono usati da n infinità di moduli per estrarre informazioni & c.) che ritengo inutile (se non dannoso) creare dei campi ex-novo per fare le stesse cose di quello che farebbero di default il body e il title... almeno fino a che useremo D6 sarà così, con D7.. bhè, ci siamo capiti ;)

Ciao
Marco
--
My blog
Working at @agavee

Ciao Mavimo,

spero davvero che tu sappia illuminarmi:

Quote:
Innanzitutto non capisco cosa stai facendo, potresti inserire il tuo TPL per il nodo?

<?php
// $Id$
?>

<div>
<div><?php print $versione; ?></div>
<div><?php print $licenza; ?></div>
</div>

Quote:
E potresti anche farci vedere come carichi i campi del tuo nodo?

<?php
function modtest_node_info() {
    return array(
       
'modtest' => array(
           
'name' => t('Test Modulo'),
           
'module' => 'modtest',
           
'description' => t('Test Drupal Module'),
           
'has_title' => TRUE,
           
'title_label' => t('Nome distribuzione'),
           
'has_body' => TRUE,
           
'body_label' => t('Descrizione distribuzione'),
        )
    );
}
function
modtest_load($node) {
    return
db_fetch_object(db_query('SELECT versione, licenza FROM {modtest} WHERE vid = %d', $node->vid));
}
?>

Quote:
Per quanto riguarda il creare campi da 0 per title e bodì, personalmente la considero una pessima idea, ci sono già (e vengono usati da n infinità di moduli per estrarre informazioni & c.) che ritengo inutile (se non dannoso) creare dei campi ex-novo per fare le stesse cose di quello che farebbero di default il body e il title... almeno fino a che useremo D6 sarà così, con D7.. bhè, ci siamo capiti ;)

Chiaro, limpido e cristallino ;)

Ad occhio è impossibile che stampi il body del nodo, nel TPL del tuo nodo non è presente, quindi o accada che non viene preso il tuo TPL e usa quello di default (hai fatto rigenerare il theme registry?), o quello che hai inserito è solo un estratto del tuo TPL.

Ciao
Marco
--
My blog
Working at @agavee

Ciao Mavimo,

mavimo wrote:
Ad occhio è impossibile che stampi il body del nodo, nel TPL del tuo nodo non è presente, quindi o accada che non viene preso il tuo TPL e usa quello di default (hai fatto rigenerare il theme registry?), o quello che hai inserito è solo un estratto del tuo TPL.

si il theme registry lo rigenero ad ogni modifica, ma il risultato non cambia.

Il .tpl è quello intero, anche per me è impossibile che stampi $node->body, ma è così, non riesco a capire il perché, ti posto l'hook_view e l'hook_theme tante le volte possono essere d'aiuto:

<?php
/**
 * Implementation of hook_view().
 */
function modtest_view($node, $teaser = FALSE, $page = FALSE) {
    if (!
$teaser) {
       
$node = node_prepare($node, $teaser);
       
$node->content['modtest_info'] = array(
           
'#value' => theme('modtest_info', $node),
           
'#weight' => 1,
        );
    }
    if (
$teaser) {
       
$node = node_prepare($node, $teaser);
    }
    return
$node;
}
?>

<?php
/**
 * Implementation of hook_theme().
 */
function modtest_theme() {
    return array(
       
'modtest_info' => array(
           
'template' => 'modtest_info',
           
'arguments' => array('node' => NULL),
        ),
    );
}
 
?>

Qusto è il file modtest_info.tpl.php

<?php
// $Id$
?>

<div>
<div><?php print $node->versione; ?></div>
<div><?php print $node->licenza; ?></div>
</div>

Il problema non si presenta se effettuo questa modifica:

trasformo il vecchio codice:

$node->content['modtest_info'] = array(
  '#value' => theme('modtest_info', $node),
  '#weight' => 1,

in:

$node->content['body'] = array(
  '#value' => theme('modtest_info', $node),
  '#weight' => 1,

praticamente sostituisco a ['modtest_info'] -> ['body'], non ho la più pallida idea del perché, se sapete darmi voi maggiori lumi ...

nel primo caso aggiunti un elemento al content, nel secondo stai sostituendo il body con il tuo elemento...

Ciao
Marco
--
My blog
Working at @agavee

Quote:
nel primo caso aggiunti un elemento al content, nel secondo stai sostituendo il body con il tuo elemento...

secondo te, c'è qualcosa di poco ortodosso nel sostituire il body con il mio elemento?

Al momento è l'unico modo che ho trovato per evitare che nel mio modtest_info.tpl.php mi venga stampato il contenuto del $node->body che per essere esatti è questo: <p>body</p>

Drupal mi mette di default il contenuto di $node->body, ma dato che ho bisogno di stamparlo dove voglio all'interno del mio template devo inserirlo in modo esplicito con $node->body, però se visualizzo il nodo mi ritrovo un duplicato perché al '#weight' => 0 c'è quello che mi viene messo di default da Drupal.

Forse sbaglio da qualche parte? Se si, dove?

Grazie ancora per la pazienza e aiuto