Creare un archivio

25 contenuti / 0 new
Ultimo contenuto
Creare un archivio

Salve amici-drupal, in pratica dovrei fare una specie di archivio in modo tale da tracciare per ogni mese i post fatti nel mese stesso! in prtica vorrei che o sulla dx o sulla sx apparisse un menu tipo:

>gennaio(6)
>febbraio(8)
>.
>.
>.
>dicembre(6)

dove cliccando mi restituisce la pagina con i post...
oppure ancora meglio (ma credo sia impossibile per me) ad albero:

>gennaio
>post number 1
>post number 2
>post number 3
>febbraio
>post number 1
>post number 2
>post number 3

io ho provato a scaricare diversi moduli come Date, Views, Calendar, etc ma sono un po piu complicati (per me) e forse troppo allungati per quello che devo fare io! allora le mie domande sono:
1) per quello che devo fare io nn è piu semplice farlo da capo visto ceh ormai ho quasi un po di codice mezzo fatto http://pastebin.com/m3c22a39c
2) penso che per far quello che dico io la funzione timestamp mi sarebbe d'aiuto! vero? cioè ci sarà un modo per fargli stabilire i mesi etc!
3) ci sono altri moduli alla quale posso appoggiarmi?
4) ci sono moduli simili?

Vi ringrazio anticipatamente dei consigli, so che qulcuno ha gia riscontrato questi problemi e mi sarà d'aiuto!!! speriamo!!! :-)

Caro reneto, il codefilter mi sembra che funzioni di nuovo!! quindi usalo e non mi far vagare!!! :-) (non preoccuparti!!)

Per quello che vuoi fare forse con le viste lavorando di fino si può fare altrimenti partirei con un Blocco in cui infilo del bel codice dove faccio generare dei TimeStamp con le cadenze di 6 mesi indietro (tipo 1 gen 1 dic 1 ...) conta che sono numeri poi prindi e invochi 6 query di count sui rispettivi periodi e sei a cavallo!!!

Per finire l'opera generi un percorso che ritorna una taballa ordinabile con i titoli delle cose scelte e che becca come parametro un timestamp!!

Ciao Uccio

PS: Sono stato incredibilmente semplicista se incontri problemi dì dove!!! che rimedio!

sai che reneto mi chiama solo una persona? mia zia! va ebh a parte questo... nn c'ho capito un'acca!! nn è che nn sei stato chiaro ma io ancora sono troppo elementare! cio dalla frase:

Blocco in cui infilo del bel codice dove faccio generare dei TimeStamp con le cadenze di 6 mesi indietro (tipo 1 gen 1 dic 1 ...) conta che sono numeri poi prindi e invochi 6 query di count sui rispettivi periodi e sei a cavallo!!!

Per finire l'opera generi un percorso che ritorna una taballa ordinabile con i titoli delle cose scelte e che becca come parametro un timestamp!!...

c'ho capito poco! in che senso di sei in sei, le query come devno esser fatte! hai qualche sempi di codice dove anche si manipola il timestamp! poi nn ti dico della tabella irdinabile! mannaggia che disastro! va beh alla fine sono solo due settimane che sviluppo in drupal! imparerò! ma vorrei finire so progettino entro una settimana!! da come parli secondo me tu ci metteresti una mezzora!! :-) io invece na settimana ma piano piano devo imparare!! cmq help me!
grazie tante cmq..
a parte tutto il mio ragionamento era:
1) creare in "qualche modo" una qualche funzione che mi restituisce i mesi fino ad oggi
2) prendere i post in "qualche modo" per ogni mese
3) metterli in "qualche altro modo" in una tabella o db
cmq andiamo avanti

allora per il momento sono arrivato qui:

<?php
//;$Id: archivio.info,v 0.0 2008/01/23 11:55:33 mercoledi Exp $
/**
 * @file
 * The Archivio module displays blog for mounths.
 */
/**
 * Implementation of hook_help().
 */
function archivio_help($section) {
  switch (
$section) {
    case
'admin/help#archivio':
     
$output = '<p>'. t('Il modulo Archivio permette di tener traccia di ogni post del blog mese per mese.') .'</p>';
     
$output .= t("<p>Tu puoi decidere:"
                
."<ul>"
                
."<li>Quale mese vuoi far apparire.</li>"
                
."<li>Mostrare il numero di post per mese.</li>"
                
."<li>Navigare nell'albero dei post creati.</li>"
                
."<li>Scegliere il colore dei mesi</li>"
                
."</ul>"
                
."</p>");
      return
$output;
    case
'admin/modules#description':
      return
t('Visualizza i mesi.');
     case
'admin/settings/archivio':
      return
'<p>'. t('Il modulo permette di gestire le info in base al mese.') .'</p>';
    case
'admin/settings/archivio/list':
      return
'<p>'. t('Aggiunge nuove impostazioni al modulo.') .'</p>';
    case
'admin/settings/archivio/color':
      return
'<p>'. t('Permette di visualizzare i mesi in diversi colori.') .'</p>';
  }
}
/**
 * Menu callback. Prints a listing of active nodes on the site.
 */
function archivio_menu($may_cache) {
 
// Add main CSS functionality.
 
drupal_add_css(drupal_get_path('module', 'archivio') .'/archivio.css');
  
$items[] = array('path' => 'admin/settings/archivio',
                     
'title' => t('Archivio'),
                   
'description' => t('Permette di gestire le impostazioni del modulo Archivio.'),
                      
'callback' => 'drupal_get_form',
                     
'callback arguments' => array('archivio_admin_settings'),
                     
'access' => user_access('administer archivio'),
                   );
  
$items[] = array('path' => 'admin/settings/archivio/list',
                     
'title' => t('Impostazioni generali'),
                      
'type' => MENU_DEFAULT_LOCAL_TASK,
                   
'access' => user_access('administer archivio'),
                   );
  
$items[] = array('path' => 'admin/settings/archivio/color',
                    
'title' => t('Gestioni colori'),
                     
'callback' => 'drupal_get_form',
                   
'callback arguments' => array('archivio_admin_color'),
                   
'type' => MENU_LOCAL_TASK,
                   
'weight' => 1,
                   
'access' => user_access('administer archivio'),
                   );
return
$items;
}
/**
 * Implementation of hook_perm
 */
function archivio_perm() {
  return array(
'access archivio', 'administer archivio');
}
/**
 * Implementation of archivio_admin_settings
 * Only administrators can access this function
 */
function archivio_admin_settings() {
 
$form['archivio_settings'] = array(
   
'#type' => 'fieldset',
   
'#weight' => -20,
   
'#title' => t('Basic settings'),
   
'#collapsible' => TRUE,
   
'#collapsed' => FALSE
 
);
 
$form['archivio_settings']['archivio_maxdisp'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Massimo numero di mesi visualizzato'),
   
'#default_value' => variable_get('archivio_maxdisp', 10),
   
'#description' => t("Inserisci il massimo numero di mesi visualizzabili."),
   
'#maxlength' => '5', '#size' => '5');
 
$form['archivio_settings']['archivio_order'] = array(
   
'#type' => 'radios',
   
'#title' => t('Ordina mese in senso'),
   
'#default_value' => variable_get('archivio_order', 0),
   
'#options' => array(t('ascendente'),
                       
t('discendente')),
   
'#description' => t("Ordina per mese ascendente o discendente.")
    );
 
$form['archivio_settings_advanced'] = array(
   
'#type' => 'fieldset',
   
'#weight' => 0,
   
'#title' => t('Advanced settings'),
   
'#collapsible' => TRUE,
   
'#collapsed' => FALSE
 
);
   
$form['archivio_settings_advanced']['archivio_lingua']  = array(
       
'#type' => 'radios',
       
'#title' => t('Scegli la lingua'),
       
'#description' => t('Scegli la lingua desiderata.'),
       
'#options' => array(t('Italiano'),
                           
t('English'),
                           
t('Deutsch'),
                           
t('Francais'),
                           
t('Espanol')
                            ),
       
'#default_value' => variable_get('archivio_lingua', 0) // default to Never
   
);
  return
system_settings_form($form);
}
/**
 * Implementation of archivio_admin_color
 * Only administrators can access this function
 */
function archivio_admin_color() {
 
$form['archivio_colore'] = array(
   
'#type' => 'fieldset',
   
'#weight' => -30,
   
'#title' => t('Basic settings'),
   
'#collapsible' => TRUE,
   
'#collapsed' => FALSE
 
);
 
$form['archivio_colore']['archivio_mesi_dispari'] = array(
       
'#type' => 'radios',
       
'#title' => t('Scegli il colore dei mesi dispari'),
       
'#description' => t(''),
       
'#options' => array(t('Rosso'),
                           
t('Verde'),
                           
t('Giallo'),
                           
t('Blu'),
                           
t('Bianco'),
                           
t('Nero'),
                            ),
       
'#default_value' => variable_get('archivio_mesi_dispari', 0)
    );
 
$form['archivio_colore']['archivio_mesi_pari'] = array(
       
'#type' => 'radios',
       
'#title' => t('Scegli il colore dei mesi pari'),
       
'#description' => t(''),
       
'#options' => array(t('Rosso'),
                           
t('Verde'),
                           
t('Giallo'),
                           
t('Blu'),
                           
t('Bianco'),
                           
t('Nero'),
                            ),
       
'#default_value' => variable_get('archivio_mesi_pari', 0)
    );
 
$form['archivio_colore']['archivio_mese_corrente'] = array(
       
'#type' => 'radios',
       
'#title' => t('Scegli il colore del mese corrente'),
       
'#description' => t(''),
       
'#options' => array(t('Rosso'),
                           
t('Verde'),
                           
t('Giallo'),
                           
t('Blu'),
                           
t('Bianco'),
                           
t('Nero'),
                            ),
       
'#default_value' => variable_get('archivio_mese_corrente', 0)
    );
  return
system_settings_form($form);
}
function
archivio_block($op='list', $delta=0) {
// listing of blocks, such as on the admin/block page
if ($op == "list") {
   
$blocks[0]["info"] = t('Archivio');
    return
$blocks;
    } else if (
$op == "view" && user_access('access archivio')){
            switch (
$delta) {
            case
0:
           
$block['subject'] = 'Archivio';
           
$block['content'] = archivio_block_content();
        break;
        }
    }
return
$block;
}
/**
* Define the hook_block
*/
function archivio_block($op='list', $delta=0) {
// listing of blocks, such as on the admin/block page
if ($op == "list") {
   
$blocks[0]["info"] = t('Archivio');
    return
$blocks;
    } else if (
$op == "view" && user_access('access archivio')){
            switch (
$delta) {
            case
0:
           
$block['subject'] = 'Archivio';
           
$block['content'] = archivio_block_content();
        break;
        }
    }
return
$block;
}
/**
* Define the content of block
*/
function archivio_block_content(){
$i = 1;
$header = array( t('Mese'));
while (
$i<=12){
   
$rows[] = array(l($i, "mese/$i"));
   
$i++;
    }
$output .= theme('table', $header, $rows);
return
$output;
}
?>

cioè in pratica credo mi manchi solo la funzione archivio_block_content() cioè tutto :-) :-) cmq li è solo un esempio (per me per vedere se avevo capito delle cose)... qualcuno mi potrebbe dare una mano.. anche solo l'inizio---quello che voglio è menu con :anno-->mese--->blog
credo che i passi siano:
1) reperire tutte le informazioni sul blog
2) mettere un po ordine e creare un array con nome mese anno utente
oppure servirsi semplicemente delle funzione di drupal $node->etc
3) fare la struttura grafica a tendina (quello si che è imèpossibile per me!!!) stile:

2007
--->gennaio
------->post 1
------->post 2
--->febbraio
------->post 1

..
..
2008
...

help me...>almeno l'inizio col codice
grazia a tutta la comunità

Ciao perche non provi ad usare il modulo "Monthly Archives"

ti crea un blocco

gennaio 2008(numero post)
febbraio 2008(...)
etc..

se clicchi su gennaio apre una pagina con le anteprime di tutti i post di gennaio, poi clicca sul titolo di ognuna di esse e apri solo quella che ti interessa..

Ciao,

Una possibile funzione che genera l' "INDICE" per il tuo blocco potrebbe essere:

<?php
function archivio_block_content(){
for(
$i=1;$i<13;$i++){
 
$sql= "SELECT Count(nid) as num FROM node WHERE changed BETWEEN %d AND %d";
 
$start = mktime (0,0,0,$i,1,2007);
 
$end   = mktime (23,59,59,$i+1,0,2007); //ultimo giorno del mese
 
$children = db_query($sql, $start,$end);
    while (
$child = db_fetch_object($children)) {
           
//$out .= "<li>$i-$start-$end-". $child->num  . "</li>";
         
$out .= "<li>$i-". $child->num  . "</li>";
         
$date.= "<br>". date("Y-M-d",$start) . "-". date("Y-M-d",$end); //Per Debug
         
}
 }
$output .= "<ul>$out</ul>";
$output .= $date;
return
$output;
}
?>

La funzione disegna una lista con i numeri dei mesi e il numero di post, come vedi la funzione è grezza per non confondere le idee.

Ciao Uccio

PS: Rileggendo forse tu vui fare una cosa più complessa (mettere anche i nodi nel menu) ma spiegaci che vediamo come fare!!

grazie uccio per la funzione, alla fine sai come ho mezzo-risolto? ho preso il module "Monthly Archives" detta da Ibellini, che fa proprio quello che volevo io! me la son studiata bene e poi l'ho modificata!! e diciamo che piu o meno ho capito!
la tua funzione è molto chiara e semplice! l'idea era piu o meno quella! ora ho un altro dubbio, cioè voglio far apparire il io blocco cioè "archivio" solo quando si clikka su "MyBlog"...altrimenti nn deve comparire niente! ora nn so proprio dove mettere le manine!!

Ciao quando configuri il blocco puoi settare le pagine nelle quali deve apparire.....

mmm su questo c'ero arrivato (+ || -) ma da uale parametro dal delta? forse ancora è uno dei pochi che n ho capito!

Vai su struttura sito->blocchi->nome blocco e poi configura....

Selezioni mostra il blocco solo sulle pagine sotto elencate

e metti la pagina dove vuoi che compaia ad esempio node/22 oppure myblog se rinomini i nodi

grande nn avevo preso in consideraione quella sezione! però nn funziona!!! cioè mi resta sempre, ti posto il codice, forse sbaglio qualcosa? oppure se mettessi tipo un if(arg(0)='blog') nella mia funzoine? cosa mi consigli? grazie

<?php
 
function archivio_block($op='list', $delta=0) {
  switch (
$op) {
   
// listing of blocks, such as on the admin/system/block page
   
case 'list': {
     
$block[0]['info'] = t('Archivio');
      return
$block;
    }
    case
'view': {
     
// contenuto del nostro blocco
         //dichiara una var $archivio_maxdisp col numero massimo dei mesi linkabili
     
$block['subject'] = t('Archivio Blog');
     
$archivio_maxdisp = variable_get('archivio_maxdisp', 0);
       
//se nn è settato il numero massimo di mesi impostalo a 99
       
if (empty($archivio_maxdisp)) $archivio_maxdisp = 99;
       
//scrive la $query
       
$query = mese_link_query($archivio_maxdisp);
       
//in monthlist mette il risultato della query e la fa diventare un oggetto (piu o meno)
       
$monthlist = db_query(db_rewrite_sql($query, 'n', 'nid'));
       
//se il numero di link dei mesi è superiore al numero dei link dei mesi settati in configurazione allora
        //crea un link "more" contentente gli altri mesi
       
if (db_num_rows($monthlist) >= $archivio_maxdisp) {
         
$morelink = '<div class="more-link">' . l(t("more"), "archivio", array("title" => t("Mostra indice del mese."))) . '</div>';
        }
       
//dichiara un array block_content e una var listed_links = 0 per fare il conto dei link dei mesi
       
$block_content = array();
       
$listed_links = 0;
       
// se i link dei mesi sono minori del numero dei mesi settato in configurazione e
        // la query è andata a buon fine allora etc...
       
while (($listed_links < $archivio_maxdisp) && $month = db_fetch_object($monthlist)) {
         
//aumenta dal menu i link dei mesi se vi sono piu mesi
         
$listed_links += 1;
         
//funzione che restituisce il valore del timestamp corrispondente ad una particolare data
         
$month_start = mktime(0, 0, 0, substr($month->monthno, 5, 2), 1, substr($month->monthno, 0, 4));
         
// crea un link tipo Jenuary 2008(8) che punta a month/2008/1
         
$block_content[] = l(t(date('F',$month_start))." ".date('Y',$month_start).' ('.$month->nodenum.')',
                                 
'archivio/'.date('Y/m', $month_start));
        }
       
$block['content'] = theme('item_list', $block_content) . $morelink;
        return
$block;
      }
   }
}
 
?>

a me funziona cosi senza mettere mani nel codice, tipo io lo vedo solo se sono sulla home page.....
nella sezione
"mostra SOLO sulle pagine sotto elencate" cosa hai messo?

postami l url che hai quando clicchi su myblog

allora il link è http://localhost/dp/drupal-5.2/?q=blog/1 ed io sotto li ho scritto la parola "blog" senza apici!
cmq ho provato a mettere un if all'inizio if (arg(0) == 'blog'){ e sembra funzionare! cmq dimmi tu cosi imparo anche il tuo metodo

allora metti blog/1 cosi lo vedi solo su quella pagina

credo che cosi nn vada anche perche con 1 gli sto indicando di visualizzare la pagina solo nel caso fossi amministratore, e se fossi un utente? cioè blog/2? gli dovrei mettere solo "blog"?

metti blog/* cosi lo vedi solo su tutti i blog

mi dispiace ma nn va!! mannaggia! forse chissà quale settaggio mi manca! grazie cmq!! alla fine ho risolo con un if su arg 0

boh strano... a me va ho provato adesso per scrupolo....lo vedo in tutti i blog di qualsiasi utente e ho messo blog/*

mistero!! qualcosa sarà, ci smanetto e se riesco nell'avventura ti farò sapere! grazie tante cmq

ancora nn riesco ma ho un altro problemino, credo sia davvero stupido ma sto provando in tutti i modi e nn va! in pratica io ho messo nel settaggio che si possono colorare i mesi dispari e pari, scegliendo il colore dal setting!(una cazzata lo so ma giusto per imparare)...in pratica il codice è

<?php
 
$block_content
= array();
      
$listed_links = 0;
        while (....) {.....
     
$block_content[] = l(t(date('F',$month_start))." ".date('Y',$month_start).' ('.$month->nodenum.')',
                                 
'archivio/'.date('Y/m', $month_start));
        }
       
$block['content'] = theme('item_list', $block_content) . $morelink;
        return
$block;
?>

posso agire quà? tipo inserendo un .. da qualche parte oppure devo cambiare $block_content = array(); in $block_content = ''; e poi devo disegnare normalmente? nn se se avete capito la mia idea! in pratica io setto il colore dei mesi dispari è giallo e quello pari è verde! poi in qualche modo glielo faccio fare! sto provando anche con css ma mi sto incasinando mi sà!

ciao,

Per colorare le cose usa i css,

1 - invoca

<?php
 $stylesheet
= drupal_get_path('module','NOMEMODULO') .'/booktree.css';
     
drupal_add_css($stylesheet);
 
?>

2 - Poi crea nella cartella del modulo un file booktree.css dove dichiari un almeno 2 classi colorate (even & odd)

3 - Dichiara un BLA Pari e poi il bla dispari

ok, grnade ma poi nel codice php della funzione come lo richiamo o meglio come richiamo la classe?

cioè visto che che ne codice ho $block_content = array(); lo posso lasciare cosi oppure devo scrivere tipo $block_content = '';? nn so se ho reso l'idea?

<?php
$block_content
= array();
      
$listed_links = 0;
        while (....) {.....
     
$block_content[] = l(t(date('F',$month_start))." ".date('Y',$month_start).' ('.$month->nodenum.')',
                                 
'archivio/'.date('Y/m', $month_start));
        }
       
$block['content'] = theme('itemg_listg', $block_content) . $morelink;
       
returng $block;
?>

anzi ti dirò, nn posso neanche fare col css poichè per il colore uso una varabile che faccio settare all'utente! in pratica una cose del genere guarda...

<?php
$block_content
= array();
      
$mese_pari = variable_get('mese_pari',0);
      
$listed_links = 0;
        while (....) {.....
     
$block_content[] ='<font color="' . $mese_pari ' ">' l(t(date('F',$month_start))." ".date('Y',$month_start).' ('.$month->nodenum.')',
                                 
'archivio/'.date('Y/m', $month_start)) . '</font>';
        }
       
$block['content'] = theme('itemg_listg', $block_content) . $morelink;
       
returng $block;
?>

ma nn va?? :-( :-(

Ciao,

Hai risolto??
Se no dillo che faccio il merge del codice e provo!!

Ciao

si ho ovviato al tutto senza mettere il colore del link!!:-)
cioè nn ho risolto ma ho ottenuto piu o meno quello ceh volevo...mas enza colori!! :-)