Snippet e Field

14 contenuti / 0 new
Ultimo contenuto
Snippet e Field

Ragazzi ho uno snippet che mi visualizza tot teaser di tot nodi di tot categorie...Nel tipo di contenuto pero' ho inserito anche un field immagine con CCK,chiamato anteprima_immagine..

Come inserisco nello snippet anche la visualizzazione del field ?..
Per ora mi sono limitato ad aggiungere il $field ='field_anteprima_immagine'; e qui mi sono fermato perchè nn so proprio come proseguire.. mi date un'aiutino ?..

<?php
$listlength
="3";
$charlength="150";
$taxo_id = 1;
$content_type = 'news';
$field = 'field_anteprima_immagine';
unset (
$output);
$result1 = pager_query("SELECT n.title, n.nid, nr.teaser, n.uid, n.created, u.name FROM {node} n join {node_revisions} nr on (n.nid = nr.nid and n.vid = nr.vid) INNER JOIN {users} u ON n.uid = u.uid INNER JOIN term_node ON n.nid = term_node.nid WHERE n.type = '$content_type' AND term_node.tid = $taxo_id AND n.status = 1 ORDER BY n.created DESC", $listlength);
while (
$node = db_fetch_object($result1)) {
$output .= l($node->title, "node/$node->nid") . "<br>" . substr(strip_tags($node->teaser), 0, $charlength) ."...";
}
$output .= "<br>";
print
$output;
?>

Allora, premetto che potresti giocare con le views, così ti esce tutto più semplice, in alternativa potresti andare a usare le funzione per recuperare il field di un nodo. Potresti "per assurdo" prelevare i dati dal DB senza usare le funzioni predisposte, ma corri il rischio che per un aggiornamento del modulo in cui vengono cambiati i campi del DB ti tocchi modificare il tuo script.

Ciao
Marco
--
My blog
Working at @agavee

Grazie Mavimo ma volevo proprio evitare di usare le View per un motivo di accorpamento e modifica piu diretto e funzionale..Cmq tramite contemplate ho trovato il field (cosa che sapevo già) per vedere come integrare il field nel codice.(cosa che non capisco proprio)

<?php print $node->field_anteprima_immagine[0]['fid'] ?>

Ma cmq non capisco perchè anche se lo metto in un blocco e entro nel nodo,non mi visualizza proprio nada di nada.. Sto provando 200 metodi ma nessuno mi visualizza quella Field.. eppure la field è popolata perchè con view il valore viene visualizzato...non capisco perchè :S

Momento, una cosa per volta...
...tu non stai prelevando quel field da nessuna parte, ovvio che nel nodo non possa comparire. Prova a mettere un bel:

<?php
drupal_set_message
('<pre>' . print_r($node, true) . '</pre>');
?>

nel tuo while, vedrai che il tuo nodo contiene solo i campi che hai indicato, ovvero:

  • n.title
  • n.nid
  • nr.teaser
  • n.uid
  • n.created
  • u.name

quindi non viene caricato il tuo filed. Se vuoi caricarlo potresti provare a recuperare l'informazioni partendo dal NID nella tabella del tuo filed, oppure usare le funzioni content_field_read() o content_load, dai anche un occhio al codice per vedere come carica il tutto:

Ciao
Marco
--
My blog
Working at @agavee

Si me ne ero accorto infatti sono tornato molto indietro a cercare di recuperare appunto quel valore..Ma nn avendo basi di php sto sclerando per capire come entrare nella tabella field_name e poi nella sotto tabella field_anteprima_immagine.

Ma posso entrare direttamente nella tabella field_anteprima_immagine,

o devo risalire alle field_anteprima_immagine partendo dal nid ?.. O_o

nnanzitutto dovresti dire che field stai usando, mi pare di capire imagefield, in ogni caso devi capire quale riga del field reguperare, probabilmente devi passare dalla tabella intermedia, sopratutto se hai field a valori multipli..
..ma perchè escludi a priori views? :)

Ciao
Marco
--
My blog
Working at @agavee

Ma sai dovendo creare una Home con parecchie "preview" e con un template abbastanza complesso,(come ben sai odio panel che poi oltretutto sarebbe limitato per le mie esigenze) l'utilizzo delle view per gli articoli mi risulta parecchio scomodo e per nulla rapido,di conseguenza cerco una soluzione piu rapida e come si suol dire meno invasiva,e che mi consenta di limitare approfonditamente il teaser per ogni blocco di teaser.

Cmq,il campo è un imagefield a valore singolo..La tabella è questa:

node_field -> field_name -> field_anteprima_immagine ..

Ma il punto è sempre quello,ammesso che debba entrare in field_anteprima_immagine .. come si fa?.. Mi sono fuso a forza di cercare una soluzione e ancora non ci sono arrivato.. O_o

Ragazzi sono piantato..sto brancolando nel buio più completo,oltretutto mi sono fuso a cercare di capire ste query,e senza sta ca..o di cosa non posso andare avanti con il resto.. Mi sono spulciato nn so quante pagine su D.org e nn ho trovato un miserissimo esempio,non credo che nessuno nn abbia mai tentato la stessa stupidata..o forse sono io che nn riesco a trovare nulla..

Fatemi un esempio perchè proprio non riesco a capire da che parte iniziare,se devo usare il node_field il content_typo,o cos'altro..Ho una confusione tale in testa che 1/4 basterebbe...

Premetto che vado a memoria e no ho tempo di fare un sito di test per controllare, in linea di massima recuperi il NID dalla tabella {node}, a questo punto puoi andare a leggere dalla tabella {content_field_anteprima_immagine} la riga che ha lo stesso NID, e prelevare da essa il campo field_anteprima_immagine_fid che contiene il FID dell'immagine che vuoi processare, di conseguenza con questo FID vai a prelevare il path dell'immagine dalla tabella {files}.

Una volta ceh hai il path puoi farla renderizzare in diversi modi (theme_image, theme_imagecache, ..) io ti consiglio di usare imagecache, sicuramente ne vale la pena, anche se inizialmente devi crearti il preset.

Per la query da creare vedi tu, sono un pò di JOIN, ma non dovrebbe troppo complessa, una cosa TIPO:

SELECT f.filepath FROM {files} f, {content_field_anteprima_immagine} cf, {node} n
WHERE n.nid = %d
  AND cf.nid = n.nid
  AND f.fid = cf.field_anteprima_immagine_fid

ovviamente da controllare e sistemare e aggiungere alla query già creata.

Ciao
Marco
--
My blog
Working at @agavee

O Mamma...Una parola tutte le cose che mi hai detto.. :) Mi sa che ci rinuncio..non ho le conoscenze per fare una cosa simile..Ho provato qualche esempio ma ricevo sempre errori di sintassi..Cose troppo complesse per le mie conoscenze,piu ci sbatto la testa piu mi innervosisco...Uff mi scoccia usare view ma temo che sia l'unica soluzione su cui posso lavorare....Che tu sappia c'è modo per limitare un campo view nello stesso modo in cui lo fa la stringa charlenght ?..Quella mi servirebbe perforza... sigh

Allora, procedi con calma :)
Innanzitutto fino ad ora la tua query fa quello che ti serve? Bene, adesso inizia ad aggiungere le tabelle ceh ti servono tramite JOIN (vedi tu che tipo di join ti servono, in rete si trovano buone spiegazioni sulle diverse tipologie di query di unioni tra tabelle), e poi estrai il path finale dell'immagine. A questo punto puoi prendere e far visualizzare l'immagine usando il theme_image (mi pare che sia il nome corretto, magari controlla :P ).

Se vuoi usare views cosa devi andare a limitare? La lunghezza di che testo? Per fare quello ceh vuoi puoi agire in due modi, o agire lato theming o andare a definire un nuovo handler per la tua views che "tagli" il testo alla lunghezza desiderata. se servono maggiori delucidazioni è conveniente aprire un altro topic.

Ciao
Marco
--
My blog
Working at @agavee

Niente Mavimo,grazie per la infinita disponibilità ma ho pensato innanzitutto di portare il progetto su D6,quindi sto provando a lavorare su View 2 (ma nn erano meglio le 1 ? ihihihihi)..

Ho visto che con D6 si può "splittare" comodamente il body,rendendolo anche teaser...Ora,se in fase di theming si riuscisse a limitare il teaser che creo splittando il body sarebbe perfetto,se invece è un problema posso sempre creare un campo testo CCK e poi limitare quello... Il tutto sta nel vedere come funziona il limitare il testo in fase theming (immagino sia piu semplice limitare un CCK che il teaser splittato dal body)..

Magari se hai qualche link,o qualche esempio evito di stressarti ulteriormente :))

hemm.. il teaser potevi splittarlo anche con d5 :)

< !---break-- >

serviva a questo :)
per il resto:
<?php
drupal_set_message
('<pre>' . print_r($node, true) . '</pre>');
?>

e vivi felice ;)

Ciao
Marco
--
My blog
Working at @agavee

Si lo so che con break splitto il testo,(lo avevo anche su FCK) ma lo splitto proprio sul nodo,in pratica quello diventa il teaser predefinito..A me invece serve proprio la funzione charlenght che in pratica bypassa il teaser di drupal... Questo ovviamente per poter impaginare meglio le news in home..Cosi facendo posso avere un blocco news che mi visualizza un teaser di 200caratteri e uno che invece me ne visualizza solo 150... Ad esempio su wordpress questa cosa è semplice come un bicchiere d'acqua,anche su Drupal lo è.. ma ci sono sempre quei maledetti Field da integrare.. (con il tempo ci riesco,giuro hihii)

Per il resto il codice che hai postato dove va inserito ? :S