Ciao,
sto provando a fare una vista condizionale come descritto qui ma per qualche ragione il valore che ottengo è sempre NULL.
Il codice che ho inserito nel campo calcolato è:
<?php
if (!$node->nid) {
node_save($node);
}
if (!$node->field_prezzo['0']['value']) {
$node_field[0]['value'] = check_plain($node->field_prezzocopertina['0']['value']);
}
else {
$node_field[0]['value'] = check_plain($node->field_prezzo[0]['value']);
}
?>
ovviamente senza i
<?php
...
?>
Se in una pagina inserisco:
<?php
if (!$node->field_prezzo['0']['value']) {
echo check_plain($node->field_prezzocopertina['0']['value']);
}
else {
echo check_plain($node->field_prezzo[0]['value']);
}
?>
tutto funziona alla perfezione, mentre se inserisco il mio campo calcolato in una vista non compare nulla. Memore di precedenti esperienze ho anche provato a cambiare le righe iniziali in:
<?php
if (!$node) {
node_save($node);
}
...
?>
ma senza risultati. Avete suggerimenti?
Non usare:
che vuol dire se non c'è un nodo, salvalo. (Non saprei come può farlo, forse ci vuole il flag 'usa_la_fantasia'). Per il resto, sta funzionando - e anche correttamente, ma come dice la pagine del modulo (http://drupal.org/project/computed_field):
La parte evidenziato - da me - dice "Per views bisogna salvare i valori nel db" Quindi per views devi salvare il risultato nel db. Presumabilmente ci sono esempi da qualche parte...E si, nella configurazione: http://drupal.org/node/149225
HTH
John
Più imparo, più dubito.
Non so darti attualmente una risposta, ma vorrei solo due spiegazioni.
1) Perchè certe volte metti ['0'] con apici e altre volte [0] senza apici?
Ad esempio $node->field_prezzo['0'] ritengo sia la componente 0 dell'array e quindi non deve essere scritta come $node->field_prezzo[0]?
Il PHP potrebbe intendere il carattere '0' e non il numero 0.
2) Chi usa l'arraya $node_field[0]['value'] sei certo che la conosca e non la ridefinisca perchè uscita dallo scope?
Ma non sarà che deve essere $node->field[0] e non $node_field[0]?
________________________________________________________________________________________
Quando risolverai il problema, scrivi come hai fatto, e se puoi scrivi [RISOLTO]
Sarà utile ad altri. Grazie
enzoazzolini.it
Perchè sono un pasticcione, almeno quanto quello che ha scritto l'esempio. Vado subito a scrivere 100 volte "Prima di incollare bisogna controllare" :^)
Anche se non comprendo tutto quello che hai scritto ho provato ad usare l'altra forma, ma non cambia.
Penso che la strada giusta sia quella indicata da John, smanetto un poco e poi vi faccio sapere.
Un'altra alternativa sarebbe anche di cotruirimi un tpl apposta, ma non sono sicuro che sia più semplice.
Però nella pagina che mi hai indicato dicono:
Non ho ben chiaro cosa possa succedere se il nodo non ha un ID, ma non sembra bello :)
Cosa intendi dire? Come hai capito che funziona?
Per quanto riguarda il salvataggio nel db è più facile di come sembrava: c'è una sezione apposita nella configurazione del campo, in cui è possibile scegliere il formato e la lunghezza del dato, e che avevo già impostato. Ho provato a smanettare un poco nei formati, che nel campo calcolato sono int, float, varchar, text e longtext mentre nella vista sono rax text, testo normale, markup e computed value. I risultati sono stati ancora un volta negativi.
Smanettando in quella sezione però mi è venuto il forte sospetto che il problema stia nella vista. Infatti nella sezione posso anche impostare un valore di default, ma anche impostandolo il risultato della vista è sempre nullo. A questo punto non so proprio più dove sbattere la testa :(
Ok, è più un workaround perchè in realtà rimane il mistero del perchè il campo calcolato non ha funzionato, ma anche questa soluzione non mi sembra male :)
In conclusione ho caricato il modulo Views Custom Field, aggiunto alla vista i due campi con cui cui devo creare la condizione, e creato un nuovo campo Customfield di tipo PHP Code con il codice:
Trovare i nomi delle variabili è stato semplice: ho temporaneamente inserito nel campo del codice:
ed i nomi sono comparsi nell'anteprima :)
Forse sono stato troppo frettuloso...
Il codice citato sopra dice "se non esiste il nodo - salvalo", il che è impossibile. Quindi non è da usare. Mentre
dice "se il nodo non ha un nid (cioè e stato appena creato ma non ancora salvato) allora salvalo", il che è corretto, e da usare. Tutto qua.
Hmm. Perchè non avevo letto bene la tua domanda - scusa. Stavi dicendo che la versione echo funzionava, ma non il codice nel computed field.
Ok. Anch'io ho smanettato un pò (per scusarmi, ovvio). Ho creato un cc con il seguente codice:
Computed Code:
Display Format:
Data Type: float
Data Length: 5,2
Ma ho settato sia antiprima, sia Nodo completo a "Testo normale" come impostazione di base.
Il che mi sembra rappresenta (più o meno) il tuo campo - un prezzo presumibilmente in €.
Salvato la pagina, appare perfettamente in home page ed anche in una vista (frontpage).
A questo punto, tornando al tuo codice originale (un pò pulito):
oltre ad osservare che se field_prezzocopertina e field_prezzo sono valori float non serve il check_plain, non so perchè non funziona... Prova togliere i check_plain
John
Più imparo, più dubito.
Dopo molti smanettamenti ho capito che il problema sta da un'altra parte, anche se non riesco a capire dove, forse un baco. So che Drupal 6 ha qualche problemino con PHP 5, e la versione che uso io è la 5.2.11 di FreeBSD compilata sulla macchina.
Nel mio tipo di contenuto ho già un campo calcolato: se ne inserisco un secondo, sia con una semplice assegnazione come hai fatto tu oppure anche con lo stesso codice del primo e li inserisco entrambi in una medesima vista il primo appare mentre il secondo è vuoto O_o
Come posso fare per tracciare il problema?