Salve a tutti!
Ho cercato un po' dappertutto, ma non son riuscito a trovare una soluzione al mio problema.
Sto realizzando un sito simile a Flickr, e mi sto servendo di Drupal 5.3 con i seguenti moduli:
- pathauto
- views
- token
- imagecache
- CCK e Imagefield
Dopo aver creato il tipo di nodo foto ed avergli assegnato un vocabolario per i tags Foto tags, ho usato pathauto per creare automaticamente i seguenti alias:
- Pattern for all Photo paths: foto/[user]/[nid]
- Pattern for all Photo tags paths: foto/tags/[catpath]
A questo punto ho creato una view per la visualizzazione delle foto associate ad un tag (ho impostato la view in modo da usare l'url foto/tags/#nome-del-tag). Ecco l'estratto della suddetta view:
$view = new stdClass();
$view->name = 'foto_tags_view';
$view->description = 'Visualizza le foto associate a un tag';
$view->access = array (
);
$view->view_args_php = '';
$view->page = TRUE;
$view->page_title = 'Foto per il tag "%1"';
$view->page_header = '';
$view->page_header_format = '1';
$view->page_footer = '<div id="bot_views_foto"><h4>Sfoglia per tag</h4><?php
$vid = 1; /* <---- put correct vocabulary ID here */
/* $show_pic = module_exists(\'taxonomy_image\'); */
echo <div class="tag_cloud_foto">;
$terms = taxonomy_get_tree($vid);
/* while (list($count, $term) = taxonomy_term_count_nodes($term->tid)) $terms[$term] = $count;
$massimo = max($terms);
$minimo = min($terms);
$distribution = ($max - $min) / 5; */
foreach ($terms as $term) {
$count = taxonomy_term_count_nodes($term->tid);
$massimo = max($terms);
$minimo = min($terms);
$distribution = ($massimo - $minimo) / 5;
if ($count == $minimo) {
$tag_class = "moltopiccolo";
}
elseif ($count == $massimo) {
$tag_class = "enorme";
}
elseif ($count > ($minimo + ($distribution * 2))) {
$tag_class = "grande";
}
elseif ($count > ($minimo + $distribution)) {
$tag_class = "medio";
}
else {
$tag_class = "piccolo";
}
echo <span class="\'.$tag_class.\'"> .l($term->name,foto/tags/.$term->name, NULL, NULL, NULL, NULL, TRUE).</span>;
} /* end foreach */
echo </div>;
?>
</div>';
$view->page_footer_format = '2';
$view->page_empty = '';
$view->page_empty_format = '1';
$view->page_type = 'list';
$view->url = 'foto/tags';
$view->use_pager = TRUE;
$view->nodes_per_page = '24';
$view->sort = array (
array (
'tablename' => 'node',
'field' => 'created',
'sortorder' => 'DESC',
'options' => 'normal',
),
);
$view->argument = array (
array (
'type' => 'taxletter',
'argdefault' => '1',
'title' => '%1',
'options' => '0',
'wildcard' => '',
'wildcard_substitution' => '',
),
array (
'type' => 'node_feed',
'argdefault' => '2',
'title' => '',
'options' => '',
'wildcard' => '',
'wildcard_substitution' => '',
),
);
$view->field = array (
array (
'tablename' => 'node_data_field_immagine_foto',
'field' => 'field_immagine_foto_fid',
'label' => '',
'handler' => 'content_views_field_handler_ungroup',
'options' => 'foto-thumb_linked',
),
array (
'tablename' => 'term_node_2',
'field' => 'name',
'label' => '',
'options' => 'link',
),
);
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'status',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array (
0 => 'foto_entry',
),
),
);
$view->exposed_filter = array (
);
$view->requires = array(node, node_data_field_immagine_foto, term_node_2);
$views[$view->name] = $view;
Il problema è che quando apro l'url foto/tags/#nome-del-tag ottengo la classica pagina della tassonomia e non la view da me impostata.
C'è un modo per forzare Drupal a caricare la view invece della pagina standard della tassonomia?
Grazie.
Credo di aver letto tempo fa una risposta dello sviluppatore di Views che diceva che era impossibile, in quanto, nel flusso di esecuzione del codice di Drupal, la gestione delle tassonomie avviene molto prima rispetto a quando viene invocato views.
Con l'aiuto di taxonomy redirect e una piccola modifica al modulo come indicato qui, son riuscito a forzare la visualizzazione della view da me impostata. Ecco come ho fatto:
return ($path == NULL ? 'taxonomy/term' : $path) . "/$term->tid";
con questa riga:
return ($path == NULL ? 'taxonomy/term' : $path) . "/" . strtolower($term->name);
in modo da far aggiungere alla fine dell'url non l'ID del tag ma il tag stesso.
Non so fino a che punto sia una mossa "lecita" quella che ho fatto, infatti l'autore del modulo taxonomy redirect ha più volte affermato che non sarebbe stato possibile col suo modulo forzare il nome del tag invece dell'ID: probabilmente si compromette la sicurezza del sistema, quindi usate questo post a vostro rischio!
mmmm io ho fatto il semplice override dei preset già impostati. Ho usato taxonomy/term come path. Ma è probabile che non abbia capito cosa intendi.
Il risultato (immagine che inserire una foto presente in un campo del suddetto nodo è un gioco da due righe di codice) lo puoi vedere qui.
http://blog.psicomante.net/blog/drupal (ovviamente blog è la category aliased e drupal il tag aliased con pathauto)
http://blog.psicomante.net/2007/10
Dimmi se ho capito oppure ho preso una cantonata!
--
Drupal e Siti Web Torino
Blog: Computer Graphics
Si, è quello che intendevo. Il problema è legato strettamente al link ai tag. Mi spiego: come già detto, sto implementando una soluzione simile a Flickr, quindi quando punto su foto/tags/#nome-del-tag deve uscire la mia vista, che è una lista che ha come campi la thumbnail e i tags associati. E proprio qui nasce il problema: il metodo che ho usato io è l'unico che per ora mi permette di visualizzare i link ai tag nella vista correttamente senza toccare i file del template. Praticamente quello che ottengo è:
Nella tua vista se inserisci la visualizzazione anche del tag associato ad ogni post, il link del tag punta a blog/drupal o a taxonomy/drupal?
Ti spiace incollarmi le due righe di codice che hai usato? Così vedo se magari risolvo in modo più pulito il mio problema :-D
Ovviamente puntano a blog/drupal! Perchè dovrebbe essere altrimenti? Le due righe di codice si riferiscono cmq alla view. E' possibile farlo semplicemente dalla UI del modulo views. Veramente è molto semplice!
Su un altro sito ho dei nodi proprio come li hai tu foto/[categoria]/[nodo-aliased]. Se elenco la categoria, ad esempio, foto/[nome-tag], mi visualizza una lista di nodi con la foto accanto. Basta mettere come parametro nella URL taxonomy/term :P
EDIT: mi rendo conto solo ora che tu vuoi avere "foto" davanti al [taxonomy]/[term] classico. Prova ad inserire foto/taxonomy/term come URL.
EDIT2: niente, non funziona foto/taxonoym/term ovviamente, perchè il processing degli url viene fatto prima dell'aliasing. Quindi o usi foto/#tags e usi "foto" come nome della categoria oppure crei un termine finto tags....In effetti la via del taxonomy redirect mi pare la via più efficace. Mi spiace :(
--
Drupal e Siti Web Torino
Blog: Computer Graphics
Psicomante, purtroppo la mia procedura non è riproducibile :-( ti spiacerebbe dirmi come hai fatto col tuo blog, magari provo ad adattare le url al procedimento che mi indichi. Grazie.