Pagina 1 di 4

[DEV] Add Info Memberlist

Inviato: 14/01/2010, 11:37
da Micogian
Nome MOD: Add Info Memberlist.
Descrizione MOD: modifica la Lista degli "iscritti" con aggiunta di tre campi: lo Style utilizzato, la data dell'ultimo Post effettuato dall'utente e la data di ultima visita.

Demo: http://www.actaplantarum.org/floraitali ... erlist.php

Cronologia:
  • 13/01/2010 - Iniziato sviluppo della MOD.
  • 15/01/2010 - Inserita modifica template per style "prosilver"
  • 17/02/2010 - Inseriti i links "sort" alle colonne "Ultimo post" e "ultima visita"
Autore: bingo
Versioni phpBB compatibili: 3.0.x

File da modificare:

1) memberlist.php
2) language/it/memberlist.php
3) styles/.../template/memberlist_body.html


1) Apri: memberlist.php

Trova:

Codice: Seleziona tutto

if ($auth->acl_get('u_viewonline'))
		{
			$sort_key_text['l'] = $user->lang['SORT_LAST_ACTIVE'];
			$sort_key_sql['l'] = 'u.user_lastvisit';
Aggiungi:

Codice: Seleziona tutto

			$sort_key_text['v'] = $user->lang['SORT_LAST_VISIT'];
			$sort_key_sql['v'] = 'u.user_lastvisit';
Trova:

Codice: Seleziona tutto

			'U_SORT_ACTIVE'			=> ($auth->acl_get('u_viewonline')) ? $sort_url . '&sk=l&sd=' . (($sort_key == 'l' && $sort_dir == 'a') ? 'd' : 'a') : '',

Aggiungi:

Codice: Seleziona tutto

			'U_SORT_VISITED'		=> ($auth->acl_get('u_viewonline')) ? $sort_url . '&sk=v&sd=' . (($sort_key == 'v' && $sort_dir == 'a') ? 'd' : 'a') : '',



Trova:

Codice: Seleziona tutto

// Dump it out to the template
return array(
	'AGE'			=> $age,
	'RANK_TITLE'	=> $rank_title,
	'JOINED'		=> $user->format_date($data['user_regdate']),
	'VISITED'		=> (empty($last_visit)) ? ' - ' : $user->format_date($last_visit),
Aggiungere: dopo

Codice: Seleziona tutto

'LASTPOST'        => $user->format_date($data['user_lastpost_time']),
'USER_STYLENAME'        => nome_style($data['style_id']),
Note: aggiunge la variabile LASTPOST (data ultimo post) e USER_STYLENAME (nome dello stile utilizzato dall'utente).
La variabile VISITED (data ultima visita) è già presente nell'array.

Trova: la fine del file.

Codice: Seleziona tutto

?>
Aggiungere: prima

Codice: Seleziona tutto

// nome_style() function by bingo

function nome_style($style_cor) {
    global $db;
    $sql = "SELECT style_name FROM " . STYLES_TABLE . " WHERE style_id = {$style_cor}";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    
    return $row['style_name'];
}      
NOTE: è la funzione che fornisce il nome dello style dal numero style_id.

2) Apri: language/it/memberlist.php

Trova:

Codice: Seleziona tutto

'LAST_ACTIVE'            => 'Ultima azione',
Aggiungere: dopo (o in ordine alfabetico alla lista delel variabili)

Codice: Seleziona tutto

'LASTPOST'            => 'Ultimo Post',
'USER_STYLENAME'            => 'Nome Style',
'SORT_LAST_VISIT'	    => 'Ultima visita',
Note: inserisce nel file language le nuove variabili.

3) Apri:styles/subsilver2/template/memberlist_body.html
Trova la porzione di codice:

Codice: Seleziona tutto

<tr>
	<th nowrap="nowrap">#</th>
	<th nowrap="nowrap" width="25%" align="{S_CONTENT_FLOW_BEGIN}"><a href="{U_SORT_USERNAME}">{L_USERNAME}</a></th>
	<th nowrap="nowrap" width="15%"><a href="{U_SORT_JOINED}">{L_JOINED}</a></th>
	<th nowrap="nowrap" width="10%"><a href="{U_SORT_POSTS}">{L_POSTS}</a></th>
	<th nowrap="nowrap" width="15%"><a href="{U_SORT_RANK}">{L_RANK}</a></th>
	<th nowrap="nowrap" width="11%">{L_SEND_MESSAGE}</th>
	<th nowrap="nowrap" width="11%"><a href="{U_SORT_EMAIL}">{L_EMAIL}</a></th>
	<th nowrap="nowrap" width="11%"><a href="{U_SORT_WEBSITE}">{L_WEBSITE}</a></th>
	<!-- IF S_IN_SEARCH_POPUP and not S_SELECT_SINGLE --><th width="2%" nowrap="nowrap">{L_MARK}</th><!-- ENDIF -->
</tr>
Sostituisci con il codice seguente (vengono aggiunte le righe per i nuovi campi e modificata la dimensione delle colonne):

Codice: Seleziona tutto

<tr>
       <th nowrap="nowrap">#</th>
       <th nowrap="nowrap" width="12%" align="{S_CONTENT_FLOW_BEGIN}"><a href="{U_SORT_USERNAME}">{L_USERNAME}</a></th>
       <th nowrap="nowrap" width="13%"><a href="{U_SORT_JOINED}">{L_JOINED}</a></th>
       <th nowrap="nowrap" width="5%"><a href="{U_SORT_POSTS}">{L_POSTS}</a></th>
       <th nowrap="nowrap" width="10%"><a href="{U_SORT_RANK}">{L_RANK}</a></th>
       <th nowrap="nowrap" width="9%">{L_SEND_MESSAGE}</th>
       <th nowrap="nowrap" width="9%"><a href="{U_SORT_EMAIL}">{L_EMAIL}</a></th>
       <th nowrap="nowrap" width="9%"><a href="{U_SORT_WEBSITE}">{L_WEBSITE}</a></th>
       <th nowrap="nowrap" width="8%">{L_USER_STYLENAME}</th>
       <th nowrap="nowrap" width="10%"><a href="{U_SORT_ACTIVE}">{L_SORT_LAST_ACTIVE}</a></th>
       <th nowrap="nowrap" width="10%"><a href="{U_SORT_VISITED}">{L_SORT_LAST_VISIT}</a></th>
       <!-- IF S_IN_SEARCH_POPUP and not S_SELECT_SINGLE --><th width="2%" nowrap="nowrap">{L_MARK}</th><!-- ENDIF -->
    </tr>

Trova la porzione di codice:

Codice: Seleziona tutto

<td class="gen" align="center">&nbsp;{memberrow.ROW_NUMBER}&nbsp;</td>
		<td class="genmed" align="{S_CONTENT_FLOW_BEGIN}">{memberrow.USERNAME_FULL}<!-- IF S_SELECT_SINGLE --> [&nbsp;<a href="#" onclick="insert_single('{memberrow.A_USERNAME}'); return false;">{L_SELECT}</a>&nbsp;]<!-- ENDIF --></td>
		<td class="genmed" align="center" nowrap="nowrap">&nbsp;{memberrow.JOINED}&nbsp;</td>
		<td class="gen" align="center">{memberrow.POSTS}</td>
		<td class="gen" align="center"><!-- IF memberrow.RANK_IMG -->{memberrow.RANK_IMG}<!-- ELSE -->{memberrow.RANK_TITLE}<!-- ENDIF --></td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_PM --><a href="{memberrow.U_PM}">{PM_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_EMAIL --><a href="{memberrow.U_EMAIL}">{EMAIL_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_WWW --><a href="{memberrow.U_WWW}">{WWW_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<!-- IF memberrow.S_PROFILE_FIELD1 -->
Sostituisci con :

Codice: Seleziona tutto

<td class="gen" align="center">&nbsp;{memberrow.ROW_NUMBER}&nbsp;</td>
		<td class="genmed" align="{S_CONTENT_FLOW_BEGIN}">{memberrow.USERNAME_FULL}<!-- IF S_SELECT_SINGLE --> [&nbsp;<a href="#" onclick="insert_single('{memberrow.A_USERNAME}'); return false;">{L_SELECT}</a>&nbsp;]<!-- ENDIF --></td>
		<td class="genmed" align="center">&nbsp;{memberrow.JOINED}&nbsp;</td>
		<td class="gen" align="center">{memberrow.POSTS}</td>
		<td class="genmed row" align="center"><!-- IF memberrow.RANK_IMG -->{memberrow.RANK_IMG}<!-- ELSE -->{memberrow.RANK_TITLE}<!-- ENDIF --></td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_PM --><a href="{memberrow.U_PM}">{PM_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_EMAIL --><a href="{memberrow.U_EMAIL}">{EMAIL_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<td class="gen" align="center">&nbsp;<!-- IF memberrow.U_WWW --><a href="{memberrow.U_WWW}">{WWW_IMG}</a><!-- ENDIF -->&nbsp;</td>
		<td class="genmed" align="center">{memberrow.USER_STYLENAME}</td>
    		<td class="genmed" align="center">{memberrow.LASTPOST}</td>
    		<td class="genmed" align="center">{memberrow.VISITED}</td>
		<!-- IF memberrow.S_PROFILE_FIELD1 -->
Note: oltre all'inserimento dei nuovi campi c'è una diversa sistemazione delle dimensioni delle colonne.

La modifica consente di aggiungere tre colonne alla Lista degli iscritti: Stile utilizzato, Ultimo_post e Ultima_visita.
Come ho anticipato, ci sarebbe da studiare l'ordinamento dei nuovi campi.

------------ INIZIO MODIFICHE TEMPLATE "prosilver" -------------------------
4) Modifica del template "Prosilver"

APRI: styles/prosilver/memberlist_body.html
TROVA: *** questa operazione va fatta due volte perchè il codice viene ripetuto più avanti

Codice: Seleziona tutto

<!-- IF U_SORT_ACTIVE --><th class="active"><a href="{U_SORT_ACTIVE}#memberlist">{L_SORT_LAST_ACTIVE}</a></th><!-- ENDIF -->
AGGIUNGI: *** dopo

Codice: Seleziona tutto

<th class="userstyle">{L_USER_STILENAME}</th>
NOTE: *** operazione da ripetere alla successiva corrispondenza del codice indicato.

TROVA:

Codice: Seleziona tutto

<td colspan="<!-- IF U_SORT_ACTIVE -->5<!-- ELSE -->4<!-- ENDIF -->">&nbsp;</td>
SOSTITUISCI: con

Codice: Seleziona tutto

<td colspan="<!-- IF U_SORT_ACTIVE -->6<!-- ELSE -->5<!-- ENDIF -->">&nbsp;</td>
TROVA:

Codice: Seleziona tutto

<!-- IF U_SORT_ACTIVE --><th class="active">&nbsp;</th><!-- ENDIF -->
AGGIUNGI: dopo

Codice: Seleziona tutto

<th class="userstyle">&nbsp;</th>
TROVA:

Codice: Seleziona tutto

<!-- IF S_VIEWONLINE --><td>{memberrow.VISITED}&nbsp;</td><!-- ENDIF -->
AGGIUNGI: dopo

Codice: Seleziona tutto

<td>{memberrow.USER_STYLENAME}</td>
TROVA:

Codice: Seleziona tutto

<td colspan="<!-- IF S_VIEWONLINE -->5<!-- ELSE -->4<!-- ENDIF -->">{L_NO_MEMBERS}</td>
SOSTITUISCI: con

Codice: Seleziona tutto

<td colspan="<!-- IF S_VIEWONLINE -->6<!-- ELSE -->5<!-- ENDIF -->">{L_NO_MEMBERS}</td>

APRI: file themes/common.css
TROVA:

Codice: Seleziona tutto

/* Specific column styles */
table.table1 .name		{ text-align: left; }
table.table1 .posts		{ text-align: center !important; width: 7%; }
table.table1 .joined	{ text-align: left; width: 15%; }
table.table1 .active	{ text-align: left; width: 15%; }
AGGIUNGI: dopo

Codice: Seleziona tutto

table.table1 .stylename	{ text-align: left; width: 10%; }
------------ FINE MODIFICHE TEMPLATE "prosilver" -------------------------

Re: Mod "Add Info Memberlist"

Inviato: 14/01/2010, 14:32
da Carlo
Un piccolo suggerimento per la funzione nome_stile().
Puoi correggerla così visto che è solo uno il record estratto.

Codice: Seleziona tutto

function nome_style($style_cor) {
    global $db;
    $sql = "SELECT style_name FROM " . STYLES_TABLE . " WHERE style_id = {$style_cor}";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    
    return $row['style_name'];
} 

Re: Mod "Add Info Memberlist"

Inviato: 14/01/2010, 15:07
da Micogian
carlino1994 ha scritto:Un piccolo suggerimento per la funzione nome_stile().
Puoi correggerla così visto che è solo uno il record estratto.

Codice: Seleziona tutto

function nome_style($style_cor) {
    global $db;
    $sql = "SELECT style_name FROM " . STYLES_TABLE . " WHERE style_id = {$style_cor}";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    
    return $row['style_name'];
} 
YES, non serve un ciclo while.
Non mi ricordavo di sql_fetchrow()

Re: [DEV] Add Info Memberlist

Inviato: 15/01/2010, 20:02
da Micogian
Inserito nella MOD la modifica da fare al template "Prosilver"

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 2:34
da Haku
Ho notato solo ora questa mod...
Siete veramente in gamba ragazzi çç
Chissà se riuscirò anche io un giorno a fare cose del genere ^^

Una domanda bingo:partendo da questa mod,si potrebbe creare una mod per il punteggio modificabile per ogni utente?

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 8:19
da Micogian
Spiegati meglio, cosa vuol dire "punteggio modificabile per utente ?"
Vuoi una classifica di interventi in un certo periodo ?

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 15:37
da Haku
No no,mi sono spiegato male :P

Hai presente la mod ultimate point?ecco.
Siccome è troppo,come dire,'complessa',vorrei inserire sotto gli avatar degli utenti delle opzioni (dove poi inserirò dei numeri) che poi posso modificare solamente io ad ogni utente.
Mi sembra sia fattibile partendo da questa base?

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 15:50
da Carlo
Perchè non creare allora un campo personalizzato, modificabile solo dagli amministratori?

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 16:00
da Micogian
Mi spiace, non conosco la mod ultimate point.
Il mio approccio alle Mod è abbastanza recente, normalmente non le uso salvo che siano utili e non invasive.
Molti lavori li faccio dall'esterno, gestendo il database al di fuori del Forum.

Se mi spieghi meglio cosa vuoi fare magari ci sono soluzioni diverse.
Secondo me dobbiamo distinguere due cose: lettura e scrittura.
Quando apri il Forum (Indice, viewforum, viewtopic) tu visualizzi i dati presenti nel Database.
Se li vuoi cambiare devi gestire i cambiamenti con altri mezzi, posting.php ad esempio.
Se vuoi che sotto l'Avatar compaia un numero devi averlo memorizzato prima da qualche parte.
Se si riferisce all'utente probabilmente nella tabella users ma bisogna vedere se esiste un campo che puoi utilizzare oppure devi aggiungerlo.
Aggiornare questo campo poi non è un problema.
La Memberlist è una lista di visualizzazione, non una di inserimento.

Fammi capire meglio quello che vuoi fare.

Re: [DEV] Add Info Memberlist

Inviato: 12/02/2010, 16:08
da Haku
Vorrei inserire dei campi appunto personalizzati come predispone già phpbb.
Io ho provato a crearne alcuni,ma non posso modificarli io.
Forse ho spuntato male le opzioni,ma non credo anche perchè sotto le descrizioni di ogni opzione c'è la descrizione del suo funzionamento.

Io ho creato il campo con opzione numeri,e poi settato così:
- Mostra nel pannello di controllo utente: NO
- Mostra alla registrazione: NO
- Visualizza nel profilo utente nella pagina argomento: SI
- Campo richiesto: NO
- Nascondi campo profilo: SI

Così sono giuste per poterle modificare solo io in quanto admin?
Non voglio andare off topic :P