Ho creato una vista "Circolari" con stile Non formattato e stile riga Campi.
In campi ho messo
Contenuto: numero circolare
Contenuto: Data emissione
Nodo: Titolo
Nodo: Corpo
Upload: File allegati.
Il risultato è:
Numero circolare xxx - Data enissione xx.xx.xxxx
Adempimenti di fine anno
xxxxxxx sssss sssss ...
Fale allegati: xxxxxxx.pdf (con link all'allegato)
Purtroppo in File allegati manca la dimensione del file requisito importante ai fini dell'accessibilità.
L'ideale sarebbe ottenere "File allegati: xxxxxxxx.pdf (xxx Kb)"
Mi potete aiutare? Grazie
Per ottenere il risultato voluto, dovrai creare un template per il campo degli upload e andarlo a modificare, inserendo le dimensioni del file. Le dimensioni sono registrate nella tabella dei file, quindi sono recuperabili dal database. Oppure, dato che la view sicuramente passa il valore del path del file, usi la funzione di PHP che serve per leggere le dimensioni del file, dato il percorso.
Grazie Pinolo,
più o meno ho capito, ma non so proprio come fare.
Le mie conoscenze di PHP sono scarsissime.
Ho letto e riletto tutto quanto presente in views/theme, ma non so proprio come fare.
Potresti aiutarmi?
Prima devi capire quale file andare a copiare dalla cartella "theme" dentro quella del modulo Views, per metterlo, rinominato, nella cartella del tuo tema. Per fare questo, clicca su Theme: Information nella colonna sinistra della pagina admin della view.
Vedrai che in basso appaiono i temi utilizzati per il layout generale, il contenitore delle righe/risultati e per ogni campo usato nel display. Guarda di fianco al nome del tuo campo: ci sarà un nome file in grassetto, che sarà quello che vai a copiare dalla cartella "theme". Al suo fianco, troverai tutta una serie di nomi file possibili; scegli quello che ritieni più adatto e, dopo che hai copiato il file .tpl.php nella cartella del tuo tema, rinominalo usando il nome che hai scelto.
A questo punto, dopo aver rinfrescato il theme registry (visita la pagina di scelta dei temi e salva la selezione esistente), potrai cominciare a modificare il file per personalizzare la visualizzazione
"Prima devi capire quale file andare a copiare dalla cartella "theme" dentro quella del modulo Views, per metterlo, rinominato, nella cartella del tuo tema. Per fare questo, clicca su Theme: Information nella colonna sinistra della pagina admin della view."
In Theme: Information ho trovato il campo da personalizzare:
Campo Upload: File allegati (ID: upload_fid): views-view-field.tpl.php, views-view-field--upload-fid.tpl.php, views-view-field--circolari-08-09-studenti.tpl.php, views-view-field--circolari-08-09-studenti--upload-fid.tpl.php, views-view-field--page.tpl.php, views-view-field--page--upload-fid.tpl.php, views-view-field--circolari-08-09-studenti--page.tpl.php, views-view-field--circolari-08-09-studenti--page--upload-fid.tpl.php, views-view-field--page-1.tpl.php, views-view-field--page-1--upload-fid.tpl.php, views-view-field--circolari-08-09-studenti--page-1.tpl.php, views-view-field--circolari-08-09-studenti--page-1--upload-fid.tpl.php
Quindi devo copiare il file views-view-field.tpl.php nella cartella del mio tema e rinominarlo, ad esempio views-view-field--upload-fid.tpl.php.
Quindi nella pagina Informazioni sul tema devo cliccare su "Rianalizza i file modello" e poi posso modificare il file per personalizzare la visualizzazione.
Nel file views-view-field.tpl.php che rinomino views-view-field--upload-fid.tpl.php c'è questo:
<?php
// $Id: views-view-field.tpl.php,v 1.1 2008/05/16 22:22:32 merlinofchaos Exp $
/**
* This template is used to print a single field in a view. It is not
* actually used in default Views, as this is registered as a theme
* function which has better performance. For single overrides, the
* template is perfectly okay.
*
* Variables available:
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
*
* When fetching output from the $row, this construct should be used:
* $data = $row->{$field->field_alias}
*
* The above will guarantee that you'll always get the correct data,
* regardless of any changes in the aliasing that might happen if
* the view is modified.
*/
?>
<?php print $output; ?>
Come posso personalizzarlo per aggiungere al link del file xxxxxxx.pdf anche la relativa dimensione tipo (xx Kb)?
Grazie per la tua pazienza, ma non so proprio come fare
prova a inserire per esempio:
<?php var_dump($row); ?>
oppure
<?php var_dump($row->$field); ?>
(il secondo non so se funziona)
Se in views-view-field--upload-fid.tpl.php che ho messo nella cartella del mio tema scrivo
?>
<?php var_dump($row); ?>
<?php print $output; ?>
Mi ritorna questo:
Fine anno scolastico 2008-2009
Circolare: 35 - Data emissione: 31.05.2008
L'anno scolastico finirà l'8 giugno 2009.
object(stdClass)#61 (11) { ["nid"]=> string(3) "213" ["node_data_field_circolare_field_circolare_value"]=> string(2) "35" ["node_type"]=> string(9) "circolare" ["node_vid"]=> string(3) "214" ["node_data_field_circolare_field_data_emissione_value"]=> string(10) "31.05.2008" ["node_title"]=> string(30) "Fine anno scolastico 2008-2009" ["node_data_field_circolare_field_as_value"]=> string(7) "2008-09" ["node_data_field_circolare_field_argomenti_value"]=> string(20) "Fine anno scolastico" ["node_revisions_body"]=> string(42) "L'anno scolastico finirà l'8 giugno 2009." ["node_revisions_format"]=> string(1) "1" ["node_data_field_data_emissione_field_data_emissione_value"]=> string(10) "31.05.2008" } allegato.txt
Il secondo suggerimento dà errore
Non c'è nessun campo tra quelli passati che mostra gli allegati. Sei sicura che per quel nodo ce ne siano?
Se vado nella pagina della views in Tema : Informazioni il campo interessato è "Campo Upload: File allegati (ID: upload_fid)"
In pratica Ho creato un Nuovo Tipo di contenuto che ho chiamato "Circolare".
Lì ho inserito questi campi:
Numero circolare - flied_circolare
Data emissione - filed_data_emissione
Ordine di scuola - field_ordine_di_scuola
...
Per File allegati - form del modulo Upload.
Dopo aver pubblicato i nodi circolari ho creato la vista.
La procedura che mi hai suggerito è OK: ho copiato il file in grassetto che si trovava accanto al Campo Upload, l'ho messo nella cartella del mio tema e da tre giorni cerco la soluzione, ma niente, non capisco che cosa scrivere per far uscire accato al link con il nome del file anche la dimensione del file
Nelle viste con Drupal 5, non c'era problema perchè perchè in Fields >Add field c'era l'opzione File:size.
Ora in drupal 6 in Add field c'è
La descrizione del file allegato.
Se il file deve essere elencato o meno.
Tutti i file allegati a un nodo con il modulo upload.module.
Il peso, usato nell'ordinamento.
ma non c'è la possibilità di size, quindi si dovrebbe trovare la possibilità di aggiungere a
Tutti i file allegati a un nodo con il modulo upload.module.
la lettura anche di size.
Il mio grosso problema è che conosco pochissimo il PHP
Come si fa a dire e dove dire:
se field-upload-fid pieno allora scrivi link nome file + dimensione file.
Grazie di nuovo per la tua collaborazione
Ho fatto qualche verifica. Effettivamente non si capisce come Views mostri gli allegati, di sicuro non li considera un "campo".
A questo punto, la soluzione è:
- nel template del campo, caricare il nodo con node_load
- subito dopo, caricare gli upload per quel nodo con upload_load
- otterrai un array con i file e tra i valori trovi anche le dimensioni di ogni file
Per cominciare, puoi mettere questo codice nel templare del campo:
<pre>
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
print_r($ufiles);
?>
</pre>
Ho inserito nel template del campo:
?>
<?php print $output; ?>
<pre>
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
print_r($ufiles);
?>
</pre>
Mi rimanda:
Fine anno scolastico 2008-2009
Circolare: 35 - Data emissione: 31.05.2008
L'anno scolastico finirà l'8 giugno 2009.
Allegati: allegato.txt
Array
(
[310] => stdClass Object
(
[fid] => 310
[uid] => 3
[filename] => allegato.txt
[filepath] => sites/default/files/allegato_2.txt
[filemime] => text/plain
[filesize] => 18
[status] => 1
[timestamp] => 1241958523
[nid] => 213
[vid] => 214
[description] => allegato.txt
[list] => 1
[weight] => 0
)
)
Eh, adesso devi sostituire il print_r con una serie di comandi che scorrono l'array $ufiles e usano filepath, filesize e description per costruire il link a ciascun file allegato.
(Ricordati poi di eliminare il print $output)
Grazie Pinolo, ma non so proprio come si fa.
Ho capito che devo sostituire print_r ,ma "con una serie di comandi che scorrono l'array $ufiles e usano filepath, filesize e description per costruire il link a ciascun file allegato" non come fare.
Potresti darmi un esempio?
Da analfabeta ho tentato con:
<pre>
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
print_r($ufiles[filepath][filesize][description]);
?>
il risultato è:
Allegati:
Di nuovo grazie
es. di codice per scorrere un array come questo
foreach($nomearray as $key => $value) {
$filepath = $value['filepath'];
$filesize = $value['filesize'];
$description = $value['description'];
print l($description.' - '.$filesize, $filepath);
}
Pinolo,
ho inserito nel template del campo:
?>
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
foreach($ufiles as $key => $value) {
$filepath = $value['filepath'];
$filesize = $value['filesize'];
$description = $value['description'];
print l($description.' - '.$filesize, $filepath);
}?>
ma ottengo questo messaggio
"Fatal error: Cannot use object of type stdClass as array in /web/htdocs/www................../views-view-field--upload-fid.tpl.php on line 27"
La riga 27 corrisponde a :
$filepath = $value['filepath'];
Grazie per la tua infinita pazienza e il tuo costante preziosissimo aiuto
Ciao!
Dunque, ho rifatto i tuoi passaggi su un sito di prova, ecco un codice che funziona:
Prima non funzionava perchè la funzione upload_load mette un oggetto dentro l'array, e per accedere alle proprietà dell'oggetto si usa questa sintassi diversa. (insomma, il messaggio di errore di php era sensato, come al solito! :-)
Ti ho anche messo una riga che converte la dimensione in byte in Kbyte arrotondandoli. ( $filesize = round($filesize/1024); )
Metti quello nel file e dovresti essere a posto!
buona serata!
Mario
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Grazie,grazie, grazie,grazie, grazie,grazie, grazie,..
Grazie a Pinolo che mi ha guidato passo per passo con infinita pazienza e sapienza.
Grazie Vermario per la soluzione finale. Ho tolto ( $filesize = round($filesize/1024); perchè dava 0 su tutti gli allegati. Tolto questo funziona, funziona benissimo.
Ora è tutto OK e soprattutto le viste sono a posto con quanto richiede l'accessibilità.
Questa comunità è stupenda.
Segnalo che in http://www.scuolacooperativa.net/drupal con Daniele si sono inseriti una serie di tutorial su Drupal con l'intento di aiutare le scuole che vogliono adottare Drupal per il sito.
Altri tutorial sono in fase di costruzione.
L'impegno è quello poi di mettere l'intera piattaforma a libera disposizione di tutte le scuole, quindi spiegheremo a chi l'adotterà come e dove agire per personalizzare.
Questo è il sunto del proposito http://www.porteapertesulweb.it/11mag09/materiali/sito_abstract.pdf
Grazie tantissimo a tutti per l'aiuto: vorrei proprio riuscire a mettere a disposizione una piattaforma rispettosa delle norme dell'accessibilità.
Prego!
Per risolvere il problema degli 0kb, eccoti una versione più furba del codice che arrotonda la divisione al primo decimale:
In bocca al lupo per l'iniziativa!
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Grazie di nuovo. Ora la dimensione file è perfetta.
Ho riscontrato un altro problema.
Se il nodo ha più di un allegato, si appiccicano tipo:
Lorem_ipsum - 27 KbSecondo_allegato - 30 Kb,
Nel campo della views ho messo il separatore | ma non lo legge, così come non accetta l'elenco non ordinato.
Ho pensato di agire sul CSS:
#views-field-apload-fid .fiel-content a{
margin-right: 3px;
margin-left: 3px;
}
ma non funziona. L'effetto è visibile in http://www.ncsito.net/drupal6/circolari_08_09_studenti il sito di prova su cui appunto provo.
Mi puoi aiutare anche in questo?
Grazie
Ciao,
sono un po' di corsa, ma il codice giusto per il css è
.views-field-upload-fid .field-content a {
margin-right:5px;
}
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Se visualizzo il codice HTML il risultato è:
<div class="views-field-upload-fid">
<span class="field-content"><a href="/drupal6/sites/default/files/Lorem_ipsum_ipsum.doc">Lorem_ipsum_ipsum.doc - 27 kb </a><a href="/drupal6/sites/default/files/Lorem_ipsum_1.doc">Lorem_ipsum.doc - 20 kb </a></span>
</div> </div>
quindi
.views-field-upload-fid .field-content a {
margin-right:5px;
}
non separa i link dei due file, ma mette il margin alla fine dei links che sono contenuti in field-content.
Forse bisogna agire in:
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
foreach($ufiles as $key => $value) {
$description = $value->description;
$filesize = $value->filesize;
$filepath = $value->filepath;
$filesize = round($filesize/1024,1);
print l($description.' - '.$filesize.' kb ', $filepath);
}
?>
Grazie di nuovo
Ciao!
Strano, modificando con firebug il codice CSS del tuo sito funzionava.
Ma non importa, ecco un altro modo per stampare i tuoi link, usando le funzioni standard di Drupal per creare un elenco puntato.
Così dovresti essere a posto!
Mario
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Grazie Vermario,
ora i file sono in un elenco puntato, Davvero OK,
OK anche la validazione dal punto dell'accessibilità.
La validazione del codice HTML strict rimanda questo tipo di errore:
"Line 214, Column 67: document type does not allow element "div" here; missing one of "object", "ins", "del", "map", "button" start-tag "
span class="field-content"><div class="item-list"><ul><li class="first"><a href="/drupal6/sites/default/files/Lorem_ipsum_ipsum.doc">Lorem_ipsum_ipsum.doc - 27 kb </a></li>
Mi pare di capire che
<div class="item-list">
non sia consentito all'interno di
<span class="field-content">
Puoi aiutarmi ancora?
Dunque, mi sta venendo un po' il dubbio che ci fosse un qualche metodo più ortodosso... ma per non buttare il lavoro fatto fino a qua...
Finora abbiamo lavorato su un template che influenzava solo il campo upload. Si possono però creare template a più livelli, per trasformare quello span in un div dobbiamo agire al livello della riga,che contiene il campo.
Per farlo, devi rifare il meccanismo di prima, quello di andare nella vista -> theme information, cercare come devi chiamare il template. nel mio caso, la vista si chiamava "test", per cui il template si chiama: "views-view-fields--test.tpl.php" , nel tuo caso sarà qualcosa come
views-view-fields--circolari_08_09_studenti.tpl.php (ma controllalo in quella pagina.
Quindi crei questo file, con questo contenuto:
<?php
// $Id: views-view-fields.tpl.php,v 1.6 2008/09/24 22:48:21 merlinofchaos Exp $
/**
* @file views-view-fields.tpl.php
* Default simple view template to all the fields as a row.
*
* - $view: The view in use.
* - $fields: an array of $field objects. Each one contains:
* - $field->content: The output of the field.
* - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
* - $field->class: The safe class id to use.
* - $field->handler: The Views field handler object controlling this field. Do not use
* var_export to dump this object, as it can't handle the recursion.
* - $field->inline: Whether or not the field should be inline.
* - $field->inline_html: either div or span based on the above flag.
* - $field->separator: an optional separator that may appear before a field.
* - $row: The raw result object from the query, with all data it fetched.
*
* @ingroup views_templates
*/
?>
<?php foreach ($fields as $id => $field): ?>
<?php if (!empty($field->separator)): ?>
<?php print $field->separator; ?>
<?php endif; ?>
<<?php print $field->inline_html;?> class="views-field-<?php print $field->class; ?>">
<?php if ($field->label): ?>
<label class="views-label-<?php print $field->class; ?>">
<?php print $field->label; ?>:
</label>
<?php endif; ?>
<?php
// $field->element_type is either SPAN or DIV depending upon whether or not
// the field is a 'block' element type or 'inline' element type.
// ********** questa riga forza l'impostazione del contenitore sempre come un div
$field->element_type="div";
?>
<<?php print $field->element_type; ?> class="field-content"><?php print $field->content; ?></<?php print $field->element_type; ?>>
</<?php print $field->inline_html;?>>
<?php endforeach; ?>
Fatto questo, ti devi assicurare che views abbia "capito" e riconosciuto il tuo nuovo template, cliccando su "rescan template files", come per il primo template.
Ora dovresti avere sempre un div.
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Fatto.
Drupal mi restituisce questo errore:
warning: Invalid argument supplied for foreach() in /web/htdocs/www.ncsito.net/home/drupal6/sites/all/themes/genesis_miotema/views-view-... on line 22.
Spariscono anche gli allegati.
Grazie di nuovo, senza il tuo aiuto non saprei proprio come uscirne.
Scusate se faccio un passo indietro: per la formattazione delle dimensioni file, c'è la comoda funzione format_size().
http://api.drupal.org/api/function/format_size/6
Grazie Pinolo!
ok, ho modificato il primo codice usando la funzione format_size.
Invece, per il secondo problema... non sarà che ci sono dei nodi senza allegati nella vista?
Proverei a mettere un filtro alla vista che esclude i nodi che non hanno un upload.
Mario Vercellotti (Vermario)
Freelance
http://www.verdevelop.com
Se inserisco il codice dell'ultimo commento visualizzo bene gli allegati in elenco puntato, ma rimane l'errore segnalato in validazione HTML strict, cioè il div in span.
Se in "views-view-fields--circolari_08_09_studenti.tpl.php" inserisco:
?>
<?php foreach ($fields as $id => $field): ?>
<?php if (!empty($field->separator)): ?>
<?php print $field->separator; ?>
<?php endif; ?>
<<?php print $field->inline_html;?> class="views-field-<?php print $field->class; ?>">
<?php if ($field->label): ?>
<label class="views-label-<?php print $field->class; ?>">
<?php print $field->label; ?>:
</label>
<?php endif; ?>
<?php
// $field->element_type is either SPAN or DIV depending upon whether or not
// the field is a 'block' element type or 'inline' element type.
// ********** questa riga forza l'impostazione del contenitore sempre come un div
$field->element_type="div";
?>
<<?php print $field->element_type; ?> class="field-content"><?php print $field->content; ?></<?php print $field->element_type; ?>>
</<?php print $field->inline_html;?>>
<?php endforeach; ?>
Mi ritorna:
"warning: Invalid argument supplied for foreach() in /web/htdocs/www.ncsito.net/home/drupal6/sites/all/themes/genesis_miotema/views-view-... on line 22"
con
Circolare: Data emissione:
Circolare: Data emissione:
Circolare: Data emissione:
Circolare: Data emissione:
perchè quando nella vista in Tema:informazioni clicco su "Rianalizza modello" vedo che incide su tutti i campi della vista.
Se inserisco questo codice in un file "views-view-field--circolari-08-09-studenti--upload-fid.tpl.php" mi restituisce:
"warning: include(./sites/all/themes/genesis_miotema/views-view-field--circolari-08-09-studenti--upload-fid.tpl.php) [function.include]: failed to open stream: No such file or directory in /web/htdocs/www.ncsito.net/home/drupal6/includes/theme.inc on line 1020.
warning: include() [function.include]: Failed opening './sites/all/themes/genesis_miotema/views-view-field--circolari-08-09-studenti--upload-fid.tpl.php' for inclusion (include_path='.:/php5/lib/php/') in /web/htdocs/www.ncsito.net/home/drupal6/includes/theme.inc on line 1020.
" e scompaiono tutti gli allegati anche se ho filtrato la vista richiedendo solo i nodi con i file allegati.
Se nomino il file "views-view-field--page--upload-fid.tpl.php" mi ritorna:
"warning: Invalid argument supplied for foreach() in /web/htdocs/www.ncsito.net/home/drupal6/sites/all/themes/genesis_miotema/views-view-... on line 22" e spariscono gli allegati.
In pratica ho provato a rinominare il file con tutte le possibilità che trovo in Tema: Informazioni del campo e il risultato è sempre:
warning: Invalid argument supplied for foreach() in /web/htdocs/www.ncsito.net/home/drupal6/sites/all/themes/genesis_miotema/views-view-... on line 22" con la sparizione degli allegati.
La riga 22 segnalata è:
<?php foreach ($fields as $id => $field): ?>
Credimi ho ricominciato da capo, ho riprovato per essere sicura di aver seguito tutto per bene, ma...
Ho provato anche a ritornare alla posizione iniziale senza l'elenco puntato, ma i links agli allegati si appiccicano e agendo sul CSS non si ottiene nulla.
Ti ringrazio tantissimo per la tua disponibilità.
ha ragione vermario: l'errore sul foreach è dovuto a nodi senza upload: basta inserire il foreach all'interno di un if che controlla se il numero di item in $ufiles è maggiore di 0
Pinolo,
ho inserito allegati a tutti i nodi ma il risultato è sempre questo:
warning: Invalid argument supplied for foreach() in /web/htdocs/www.ncsito.net/home/drupal6/sites/all/themes/genesis_miotema/views-view-... on line 22
e spariscono anche tutti gli allegati.
Lo strano è che in anteprima ci sono, ma quando fai il Salva escono 8 warning tanti quante sono le circolari e spariscono gli allegati.
Grazie per il contributo
Risolto!
Per riassumere:
Andare nella vista e cliccare su in "Theme: Information" nella colonna sinistra della pagina admin della view.
In basso appaiono i temi utilizzati per il layout generale, il contenitore delle righe/risultati e per ogni campo usato nel display. Di fianco al campo "Upload: file allegati "c'è un nome file in grassetto.
Cercare questo file(views-view-field.tpl.php) nel modulo views cartella theme.
Copiarlo nella cartella del tema utilizzato.
Rinominarlo con uno dei nomi possibili che si trovano nel campo "Upload: file allegati " di "Theme: Information" della vista
Sostituire:
?>
<?php print $output; ?>
con
?>
<?php
$unodo = node_load($row->nid);
$ufiles = upload_load($unodo);
$items = array();
foreach($ufiles as $key => $value) {
$description = $value->description;
$filesize = $value->filesize;
$filepath = $value->filepath;
$filesize = format_size($filesize);
print l($description.' - '.$filesize, $filepath).' | ';
}
?>
Assicurarsi che views capisca e riconosca il nuovo template, cliccando su "rescan template files" (Rianalizza il file modello) che si trova in fondo a "Theme:information" della vista.
Ora i file allegati hanno la dimensione, ma sono appiccicati.
Nel foglio di stile del tema in uso aggiungere:
.views-field-upload-fid a{
margin-right: 3px;
margin-left: 3px;
}
Ho rinunciato ad avere l'elenco puntato per via degli errori di HTML strict segnalati dal validatore (il div in span).
Ora sia il validatore del codice sia dell'accessibilità danno OK.
Un grazie di cuore a Pinolo e a Vermario : senza di loro proprio non ci sarei riuscita.
Grazie soprattutto di avermi dato l'opportunità di imparare un sacco di nuove cose.