phpBB Italia chiude!
phpBB Italia ringrazia tutti gli utenti che hanno dato fiducia al nostro progetto per ben 9 anni, e che, grazie al grande lavoro fatto da tutto lo Staff (rigorosamente a titolo gratuito), hanno portato il portale a diventare il principale punto di riferimento italiano alla piattaforma phpBB.

Purtroppo, causa motivi personali, non ho più modo di gestirlo e portarlo avanti. Il forum viene ora posto in uno stato di sola lettura, nonché un archivio storico per permettere a chiunque di fruire di tutte le discussioni trattate.

Il nuovo portale di assistenza per l'Italia di phpBB diventa phpBB-Store.it, cui ringrazio per aver deciso di portare avanti questo grande progetto.

Grazie ancora,
Carlo - Amministratore di phpBB Italia

Campi profilo condizionali

Cerchi una MOD? Chiedi in questo forum.
Questa sezione è supportata dagli utenti del forum, pertanto lo Staff potrebbe non eseguire tali richieste.
Avatar utente
hpl
Utente
Utente
Messaggi: 11
Iscritto il: 25/06/2011, 20:50
Sesso: Maschio
Versione: 3.0.8
Server: Windows
PHP: 5.x
Database: mysql
Località: Cormons
Contatta:

Re: Campi profilo condizionali

Messaggio da hpl » 01/07/2011, 23:10

eccomi, stasera sono riuscito a dedicare un'oretta alla mod e, per questioni di tempo, non riesco a scrivere un codechanges come si deve. Allego i file modificati da applicare in un'installazione di phpbb 3.0.8 PULITA (se avete installato delle mod, vi consiglio di usare winmerge o similari). Giusto un paio di commenti:
  • modalità di installazione: basta lanciare la query presente in sql.txt e copiare tutti i files. Questo solo per una versione pulita di phpbb 3.0.8 + prosilver, se avete delle mod dovrete avere un po' di pazienza ed utilizzare winmerge...in ogni caso tutti i file php sono commentati così:

    Codice: Seleziona tutto

    //HPL BEGIN 
    codice.....
    // HPL END
  • gli array di stato/regioni e provincie vengono inizializzati nel file di lingua, questo perchè decommentando alcune righe si possono ottenere gli array di tutti gli stati del mondo, e qui vale la pena averli tradotti (nel pacchetto ho inserito la traduzione in inglese). Inoltre avere un array in un file di lingua in php permette facilmente di ordinarlo alfabeticamente, sempre a seconda della traduzione.
  • esempio di utilizzo delle variabili nei file php da passare al template:

    Codice: Seleziona tutto

    $template->assign_vars(array(
    	'REGIONE' => $user->lang['STATES'][$user->data['user_state']],
    	'PROVINCIA' => $user->lang['PROVS'][$user->data['user_prov']],
    ));
    
  • i campi località vengono richiesti in modalità di registrazione e in PCU -> Profilo utente --> Modifica profilo
Volendo si può creare uno switch in ACP per poter disattivare la richiesta della località (analogo allo switch per la richiesta della data di nascita).

beh, provate il pacchetto poi fatemi sapere, buon lavoro.
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.
Ultima modifica di hpl il 01/07/2011, 23:33, modificato 1 volta in totale.
- SoNo un PoMpIeRe -

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Campi profilo condizionali

Messaggio da Micogian » 01/07/2011, 23:33

Grazie hpl, appena ho un pò di tempo provo.
Comunque una strada l'avrei trovata, come popolare una select da un'altra select l'ho trovato.
Ora la mia idea è questa:

1) nel profilo inserisco due campi di testo (regione e provincia)
2) nel file di registrazione inserisco i due select che permettono di selezionare la Regione e le relative Province.
3) la selezione della regione e della provincia vanno a popolare i due input relativi a regione e provincia attraverso una funzione popola_regione

Codice: Seleziona tutto

function popola_regione(){
var select = document.forms['myForm'].mySelect; //Recupero la SELECT
var input = document.forms['myForm'].myInput; //Recupero l'Input

/** Recupero il testo della option selezionata */
var scelta = select.options[select.selectedIndex].text;

//Popolo l'input
pf_regione.value = scelta;
}
4) Faccio la stessa cosa con la provincia con popola_provincia()
5) premo invio e ottengo l'aggiornamento dei due campi di testo.

Avatar utente
hpl
Utente
Utente
Messaggi: 11
Iscritto il: 25/06/2011, 20:50
Sesso: Maschio
Versione: 3.0.8
Server: Windows
PHP: 5.x
Database: mysql
Località: Cormons
Contatta:

Re: Campi profilo condizionali

Messaggio da hpl » 01/07/2011, 23:42

usando il codice js che hai proposto hai 2 problemi:

- in fase di registrazione, quando per esempio fai un refresh o manca qualche campo, il js non ti permette (così com'è) di dare un valore alla select, se per esempio compilo regione e provincia e sbaglio il codice di conferma, devo ricompilarli nuovamente perchè il codice non permette di dare il valore "selected" a un <option>;
- nel profilo avviene una cosa analoga a quella precedente, sia appena si apre la pagina, sia in fase di modifica (seleziono la regione, dimentico la provincia e premo invio...si azzera tutto)

gestendo le select con apposite funzioni in php tutto ciò l'ho risolto con semplici righe di codice ;) (guarda includes/functions_hpl.php e cosa succede in state.php, includes/ucp/ucp_profile.php e includes/ucp/ucp_register.php...)
- SoNo un PoMpIeRe -

pegasus81
Programmatore
Programmatore
Messaggi: 346
Iscritto il: 24/06/2011, 14:44
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.2.13
Database: MySQL 4.1.22-standard-log
Contatta:

Re: Campi profilo condizionali

Messaggio da pegasus81 » 02/07/2011, 1:01

Grandi ragazzi. Domani giornata di test! :D
puzzlepets.net
Il socialnetwork che ama gli animali!
ingegneriapisa.altervista.org
Il forum degli studenti della Facoltà di Ingegneria Informatica di Pisa

pegasus81
Programmatore
Programmatore
Messaggi: 346
Iscritto il: 24/06/2011, 14:44
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.2.13
Database: MySQL 4.1.22-standard-log
Contatta:

Re: Campi profilo condizionali

Messaggio da pegasus81 » 02/07/2011, 9:48

Eccomi per le prime impressioni sulla mod di hpl.... funziona alla grande! :D
Ora modificherò qualcosina in modo da permettere la ricerca per località e visualizzare nel profilo i due nuovi campi. Vorrei anche cercare di bloccare la modifica degli stessi nel Pannello di Controllo Utente.

p.s.: unico errorino riguarda la query...
sostituisci

Codice: Seleziona tutto

ALTER TABLE 'phpbb_users' ADD 'user_state' VARCHAR( 8 ) NOT NULL DEFAULT '',
ADD `user_prov` VARCHAR( 8 ) NOT NULL DEFAULT ''
con

Codice: Seleziona tutto

ALTER TABLE phpbb_users ADD user_state VARCHAR( 8 ) NOT NULL DEFAULT '',
ADD user_prov VARCHAR( 8 ) NOT NULL DEFAULT ''
OTTIMO LAVORO hpl! :D

p.p.s.: bingo, se dovessi portare a termine la tua modifica, sarei felicissimo di provarla! ;)
puzzlepets.net
Il socialnetwork che ama gli animali!
ingegneriapisa.altervista.org
Il forum degli studenti della Facoltà di Ingegneria Informatica di Pisa

Avatar utente
Micogian
Leader Programmatori
Leader Programmatori
Messaggi: 3704
Iscritto il: 07/01/2010, 8:51
Versione: 3.2.0
Server: UNIX/Linux
PHP: 5.4.36
Database: MySQL 5.1.70-log
Località: Udine
Contatta:

Re: Campi profilo condizionali

Messaggio da Micogian » 02/07/2011, 10:23

pegasus81 ha scritto: p.p.s.: bingo, se dovessi portare a termine la tua modifica, sarei felicissimo di provarla! ;)
Il fatto è che in questo periodo ho poco tempo disponibile.
Anch'io devo provare la Mod di hpl, mi sembra che si debbano creare due nuovi campi nella tabella users, io avevo cercato una soluzione che non toccasse il database, ma intervenisse sui campi del profilo personalizzati già previsti da phpbb.
Vedremo, senza fretta però.

Avatar utente
hpl
Utente
Utente
Messaggi: 11
Iscritto il: 25/06/2011, 20:50
Sesso: Maschio
Versione: 3.0.8
Server: Windows
PHP: 5.x
Database: mysql
Località: Cormons
Contatta:

Re: Campi profilo condizionali

Messaggio da hpl » 02/07/2011, 12:12

pegasus81 ha scritto:Vorrei anche cercare di bloccare la modifica degli stessi nel Pannello di Controllo Utente.
....e se un utente si trasferisce.... :lol: :lol: :lol:
bingo ha scritto:io avevo cercato una soluzione che non toccasse il database, ma intervenisse sui campi del profilo personalizzati già previsti da phpbb.
Per utilizzare i campi personalizzati di phpbb secondo me bisognerebbe fare questo:
  1. creare un nuovo tipo di campo:
    Numeri
    Singolo campo di testo
    Area di testo
    Booleana (Sì/No)
    Menù a tendina
    Data
    Località
  2. gestirne l'input e l'output dei dati, in questo caso dovendo salvare 2 dati in un singolo campo, bisogna utilizzare explode/implode e un separatore (es. IT_CAM::IT_NA per salvare Campania - Napoli). Provare a gestire due campi separati collegati al singolo tipo di campo secondo me è complesso, ma potrei anche sbagliarmi;
  3. programmare il form, costituito da due select (questa è facile);
tutto ciò potrebbe essere comodo poichè si utilizzano tutte le funzioni native di phpbb per gestire i campi personalizzati, però alla fine dei conti il db viene toccato comunque (v. tabella phpbb_profile_fields_data). Quindi lasciare a phpbb l'onere di creare un campo, oppure crearne 2 direttamente nella tabella user, non cambia parecchio...

inoltre, se si volessero programmare dei filtri o dei form di ricerca, quando si hanno dei campi "multidato", diventa molto più complicato e poco elegante, dato che sarebbe da usare il parametro LIKE nelle query.

Sono dell'idea che le mod debbano essere meno invasive possibile, dato che ogni tanto ci si deve prendere la briga di aggiornare la board: se lasciamo gestire le mod a file esterni e non facciamo altro che inserire degli include, richiamare delle funzioni o utilizzare delle classi ex novo (o estendere quelle esistenti, per chi ha più dimestichezza), diventa facilissimo aggiornare la board e si ha sempre un visione ordinata delle modifiche effettuate. Inoltre, altro consiglio, evito sempre di modificare il PCA (o ACP ahahahah), gestendo eventuali parametri riservati allo staff in una pagina separata. In questa mod, per esempio, si potrebbe fare questo:
  1. creare una pagina personalizzata, es. admin_extend.php
  2. metterci un controllo permessi admin (o la conferma delle credenziali di accesso), basta un copia/incolla;
  3. creare un form dove gestire il parametro di configurazione $config['allow_location_data'] (anche qui basta utilizzare la funzione set_config() );
per un singolo parametro sembra stupido creare una pagina dedicata...ma se dovessi scrivere altre mod o strutturare meglio questa (che ne so, magari abilitare o meno la visualizzazione degli stati esteri via php), utilizzerei sempre la stessa pagina di configurazione.

Mi sa che mi sono dilungato parecchio...
- SoNo un PoMpIeRe -

pegasus81
Programmatore
Programmatore
Messaggi: 346
Iscritto il: 24/06/2011, 14:44
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.2.13
Database: MySQL 4.1.22-standard-log
Contatta:

Re: Campi profilo condizionali

Messaggio da pegasus81 » 02/07/2011, 12:36

hpl ha scritto:
pegasus81 ha scritto:Vorrei anche cercare di bloccare la modifica degli stessi nel Pannello di Controllo Utente.
....e se un utente si trasferisce.... :lol: :lol: :lol:
Si, questo è vero... ma a volte potrebbe esserci la necessità di non cambiare quel parametro (tipo se considerassi la località di nascita)! :D

Ecco alcune modifiche che ho già effettuato e testato:
Impedire la modifica dei due campi nel Pannello di Controllo Utente
trova nel file ./includes/ucp/ucp_profile.php

Codice: Seleziona tutto

               //HPL BEGIN
					'S_USER_STATE' => create_state_select('user_state', $data['user_state']),
					'S_USER_PROV' => create_prov_it_select('user_prov', $data['user_prov'], $data['user_state']),
					//HPL END
sostituisci con

Codice: Seleziona tutto

               //HPL BEGIN
					'S_USER_STATE' => $user->lang['STATES'][$data['user_state']],
					'S_USER_PROV' => $user->lang['PROVS'][$data['user_prov']],
					//HPL END
Visualizzare i nuovi campi nel profilo utente
trova nel file ./memberlist.php

Codice: Seleziona tutto

$user->setup(array('memberlist', 'groups'));
aggiungi dopo

Codice: Seleziona tutto

$user->setup('mods/lang_hpl');
trova

Codice: Seleziona tutto

            'LOCATION'		=> ($data['user_from']) ? $data['user_from'] : '',
aggiungi dopo

Codice: Seleziona tutto

            'S_USER_STATE' =>  $user->lang['STATES'][$data['user_state']],
            'S_USER_PROV' => $user->lang['PROVS'][$data['user_prov']],
trova nel file ./styles/prosilver/template/memberlist_view.html

Codice: Seleziona tutto

<!-- IF S_USER_INACTIVE --><dt>{L_USER_IS_INACTIVE}:</dt> <dd>{USER_INACTIVE_REASON}</dd><!-- ENDIF -->
aggiungi dopo

Codice: Seleziona tutto

<dl>
		<dt>{L_USER_STATE}:</dt>
		<dd>{S_USER_STATE}&nbsp;-&nbsp;{S_USER_PROV}</dd>
</dl>
Per ora è tutto... non appena integrerò i due campi nella ricerca di un utente, posterò le modifiche da effettuare. ;)

P.s.: un grazie all'utente hpl! ;)
Ultima modifica di pegasus81 il 03/07/2011, 0:50, modificato 2 volte in totale.
Motivazione: Eliminato spazio inutile alla voce $user->setup('mods/lang_hpl');
puzzlepets.net
Il socialnetwork che ama gli animali!
ingegneriapisa.altervista.org
Il forum degli studenti della Facoltà di Ingegneria Informatica di Pisa

pegasus81
Programmatore
Programmatore
Messaggi: 346
Iscritto il: 24/06/2011, 14:44
Sesso: Maschio
Versione: 3.0.12
Server: UNIX/Linux
PHP: 5.2.13
Database: MySQL 4.1.22-standard-log
Contatta:

Re: Campi profilo condizionali

Messaggio da pegasus81 » 02/07/2011, 20:24

Eccomi a postare le modifiche necessarie alla Ricerca dell'utente in base ai parametri della Regione-Provincia:
trova nel file ./styles/prosilver/template/overall_header.html

Codice: Seleziona tutto

<script type="text/javascript" src="{T_TEMPLATE_PATH}/forum_fn.js"></script>
aggiungi dopo

Codice: Seleziona tutto

<script type="text/javascript" src="{T_TEMPLATE_PATH}/ajax.js"></script>
trova nel file ./styles/prosilver/template/memberlist_search.html

Codice: Seleziona tutto

		<dd><input type="text" name="username" id="username" value="{USERNAME}" class="inputbox" /></dd>
	</dl>
aggiungi dopo

Codice: Seleziona tutto

<dl>
	<dt><label for="tz">{L_USER_STATE}:</label></dt>
	<dd>{S_USER_STATE}&nbsp;&nbsp;<span id="prov_id_select">{S_USER_PROV}</span></dd>
</dl>
trova nel file ./memberlist.php

Codice: Seleziona tutto

include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
aggiungi dopo

Codice: Seleziona tutto

include($phpbb_root_path . 'includes/functions_hpl.' . $phpEx);
trova

Codice: Seleziona tutto

$search_params = array('username', 'email', 'icq', 'aim', 'yahoo', 'msn', 'jabber', 'search_group_id', 'joined_select', 'active_select', 'count_select', 'joined', 'active', 'count', 'ip');
aggiungi prima di

Codice: Seleziona tutto

ip');
il codice

Codice: Seleziona tutto

'user_state', 'user_prov',
trova

Codice: Seleziona tutto

$username	= request_var('username', '', true);
aggiungi dopo

Codice: Seleziona tutto

$user_state = request_var('user_state', '');
$user_prov = request_var('user_prov', '');
trova

Codice: Seleziona tutto

$sql_where .= ($username) ? ' AND u.username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
aggiungi dopo

Codice: Seleziona tutto

$sql_where .= strtolower($user_state) ? ' AND LOWER(u.user_state) ' . $db->sql_like_expression(str_replace('*', $db->any_char, strtolower($user_state))) . ' ' : '';
$sql_where .= strtolower($user_prov) ? ' AND LOWER(u.user_prov) ' . $db->sql_like_expression(str_replace('*', $db->any_char, strtolower($user_prov))) . ' ' : '';
trova

Codice: Seleziona tutto

'U_LIST_CHAR'			=> $sort_url . '&sk=a&sd=' . (($sort_key == 'l' && $sort_dir == 'a') ? 'd' : 'a'),
aggiungi dopo

Codice: Seleziona tutto

'S_USER_STATE' => create_state_select('user_state', $data['user_state']),
					'S_USER_PROV' => create_prov_it_select('user_prov', $data['user_prov'], $data['user_state']),
Dovrebbe essere tutto. Si ricorda che prima di procedere a queste modifiche, bisogna modificare il file ./memberlist.php come indicato nel post precedente. :D
puzzlepets.net
Il socialnetwork che ama gli animali!
ingegneriapisa.altervista.org
Il forum degli studenti della Facoltà di Ingegneria Informatica di Pisa

Avatar utente
hpl
Utente
Utente
Messaggi: 11
Iscritto il: 25/06/2011, 20:50
Sesso: Maschio
Versione: 3.0.8
Server: Windows
PHP: 5.x
Database: mysql
Località: Cormons
Contatta:

Re: Campi profilo condizionali

Messaggio da hpl » 02/07/2011, 22:22

Pensandoci bene per il punto "Impedire la modifica dei due campi nel Pannello di Controllo Utente" sarebbe meglio ripristinare il file originale ./includes/ucp/ucp_profile.php, secondo me con la modifica proposta riesci sì a mostrare i valori al posto delle select...ma se provi a salvare si azzerano i valori.
- SoNo un PoMpIeRe -

Rispondi

Torna a “Richiesta MOD”

Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti