Mostare tab di CB soltanto su alcuni profili utente
Community Builder organizzare la propria interfaccia attraverso blocchi denominati tab.
Ogni tab mostra informazioni specifiche, e può integrare i profili utente con estensioni come FireBoard, Mamblog e molte altre, in modo da rendere più coese le informazioni presenti sul sito.

L'amministrazione di CB consente per default di decidere a quali utenti visualizzare ciascun tab, ovvero decidere quali tab mostrare in base al login dell'utente che visualizza il profilo.

Questa è una funzionalità decisiamente utile, e siamo tutti d'accordo. Ma cosa possiamo fare se vogliamo mostrare dei tab solo sul profilo di alcuni utenti?
Innanzitutto l'ACL di Joomla ci và stretta. Vogliamo impostare diversi gruppi di utenti, per gestire una competizione: alcuni utenti resteranno al primo livello, altri avanzeranno al "secondo round", diverranno finalisti e per finire avremo dei vincitori.
Altri utenti saranno giudici della competizione.
Vediamo come possiamo realizzare questo tipo di funzionalità.
Parlo di Joomla 1.5 e CB 1.2 Stable.
Creiamo le tabelle del database
Ci servono almeno tre tabelle,
jos_jc_user_groups: definisce i gruppi utente.
jos_jc_user_groups_users: associa gli utenti della tabella jos_users con i gruppi della tabella jos_jc_user_groups.
jos_jc_cb_tabs_groups: serve a gestire le relazioni tra i tab di cb e i gruppi di utenti.
CREATE TABLE `jos_jc_cb_tabs_groups` ( `id_group` int(11) NOT NULL, `id_tab` int(11) NOT NULL, PRIMARY KEY (`id_group`,`id_tab`) ) CREATE TABLE `jos_jc_user_groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `description` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) CREATE TABLE `jos_jc_user_groups_users` ( `userid` int(11) NOT NULL, `id_group` int(11) NOT NULL, PRIMARY KEY (`userid`,`id_group`) )
Dobbiamo popolare queste tabelle aggiungendo nuovi gruppi in jos_jc_user_groups ed associando a questi gruppi degli utenti, usando jos_jc_user_groups_users. Possiamo creare un componente per la gestione di queste due tabelle, oppure possiamo lavorare direttamente sul database. Per la mia soluzione, ho preferito la prima ipotesi.


Modifichiamo il codice di CB
File administrator/components/com_comprofiler/admin.comprofiler.html.php
Cerchiamo la funzione editTab, intorno alla linea 1843, e dopo la definizione della form "User Group to allow access to" inseriamo il codice
User Group that displays this tab: < ?php echo $lists['groupstabs']; ?> You can select multiple groups.
che in sostanza dice a CB di visualizzare nella pagina di modifica di un tab la form che permette di scegliere in quali profili utente (che poi modificheremo) mostrare tale tab.
File administrator/components/com_comprofiler/admin.comprofiler.controller.php
Agiamo ora sul controller, nella funzione editTab intorno alla linea 1407
$query="SELECT id_group from #__jc_cb_tabs_groups WHERE id_tab=".(int) $tid; $_CB_database->setQuery( $query ); $gruppi = $_CB_database->loadResultArray(); for ($i = 0; $i < sizeof($array); $i++) { $types[] = moscomprofilerHTML::makeOption( $array[$i][0], $array[$i][1] ); } $lists['groupstabs']= moscomprofilerHTML::selectList( $types, 'groupstabs[]', 'size="9" MULTIPLE', 'value', 'text', $gruppi, 2 );
Nella funzione saveTab, poche righe più sotto, ci occupiamo di gestire l'inserimento dei dati nel database
$query="DELETE FROM jos_jc_cb_tabs_groups WHERE id_tab=".$_POST['tabid']; $_CB_database->setQuery( $query ); $_CB_database->query(); foreach ( $_POST['groupstabs'] as $group ) { $query="INSERT INTO jos_jc_cb_tabs_groups VALUES('".$group."', '".$_POST['tabid']."')"; $_CB_database->setQuery( $query ); $_CB_database->query(); }
File administrator/components/com_comprofiler/comprofiler.class.php
In questo file è presente intorno alla linea 3032 la funzione _loadTabsList, che decide quali tab mostrare nel profilo utente. Lo fa attraverso una query SQL, che noi modifichiamo per tenere conto dei gruppi utente.
La vecchia query:
// $_CB_database->setQuery( "SELECT * FROM #__comprofiler_tabs t" // . "\n WHERE t.enabled=1" // . ( $position == '' ? "" : "\n AND t.position = " . $_CB_database->Quote( $position ) ) // . "\n AND t.useraccessgroupid IN (".implode(',',getChildGIDS(userGID( $_CB_framework->myId() ))).")" // . "\n ORDER BY t.position, t.ordering" );
La nuova query:
$_CB_database->setQuery( "SELECT * FROM #__comprofiler_tabs t" ."\n JOIN #__jc_cb_tabs_groups jctg on jctg.id_tab=t.tabid" ."\n JOIN #__jc_user_groups_users jcugu on jcugu.id_group=jctg.id_group" . "\n WHERE t.enabled=1" . "\n AND jcugu.userid=".$user->user_id . ( $position == '' ? "" : "\n AND t.position = " . $_CB_database->Quote( $position ) ) . "\n AND t.useraccessgroupid IN (".implode(',',getChildGIDS(userGID( $_CB_framework->myId() ))).")" . "\n ORDER BY t.position, t.ordering");
Finish!
A questo punto il pannello della gestione dei tab di Community Builder mostrerà tra le opzioni la scelta (multipla) dei gruppi in cui vogliamo mostrare ciascun tab.

Scegliendo i gruppi desiderati ed aggiungendo gli utenti a questi gruppi, potremo gestire completamente la distribuzione dei tab all'interno dei profili.
February 19th, 2009 at 15:31
Ciao, ho provato ad utilizzare il codice che hai proposto, che ho trovato interessantissimo, ma richiamando una qualsiasi voce di CB mi da un “parse error” nel file admin.comprofiler.controller.php alla seconda riga del codice “$_CB_database->setQuery( $query );” Premetto che non ho creato un componente per popolare la nuove tabelle, ma ho cercato di farlo a mano. Forse l’errore sta li.
Antonio
February 20th, 2009 at 15:56
Ciao Antonio, sicuro che il codice sia scritto giusto? Forse nello scrivere il codice HTML l’editor mi ha mangiato qualche tag.. dovrei riguardarlo, caso mai fammi sapere, posso inviarti il file zippato se ti interessa.
February 20th, 2009 at 17:00
Ciao Flavio, ti ringrazio molto per la risposta.
Stavo lavorando proprio al codice. In realtà, oltre ai file che mi farebbero proprio comodo, sarei curioso di avere qualche dritta per il componente che hai creato per popolare le tabelle dal Backend. Lo usergroup manager è molto interesante. Popolarle da SQL è da pazzi, soprattutto se hai molti utenti.
Cmq, ancora grazie.
February 22nd, 2009 at 10:39
Ciao Flavio. Volevo chiederti se potevi passarmi quei files.
Non sono un mago del php ed sql, e non riesco ad uscirne.
Sono da tre giorni chiuso in casa ad impazzire con il codice.
Se poi potessi indirizzarmi su quel componente per popolare le tabelle, te ne sarei grato.
June 10th, 2009 at 18:13
Nel mio caso, apportando tutte le modifiche descritte, quando provo a fare il login in cb dal frontend, o accedere a una qualsiasi pagina di gestione di cb nel backend, ricevo una pagina bianca..
..ma la cosa più bella è che se tolgo tutte le modifiche, la pagine rimangono bianche e devo ricarcarle da capo, dal paccehtto “vergine”..
..:-s ..che sarà^ ..dottorreeee.. ..sto mmmaleee :-s
June 11th, 2009 at 00:19
..risolto in parte, è colpa dell’ascii di “>”..
..ora però mi appare la riga “”, invece di apparire il form a lista…
..ce la farò?
November 9th, 2009 at 12:46
Ciao Flavio.
Volevo chiederti se potevi passarmi questi files in quanto non riesco a fare correttamente le modifiche (ignoranza mia).
Grazie Marco
Lascia un commento
-
Feeds
Segui il feed RSS e Twitter per restare sempre aggiornato!
Ricevi gli aggiornamenti via email: -
-
Ultimi commenti
- Salinguerra: Salve a tutti. Ho un sito realizzato in JOOMLA 1.5.20 da poche settimane a cui ho recentemente avuto...
- stefano: ….tophost fa schifo….. Sto cercando di ripristinarlo
- luca: a me la pagina di Stefano Rigazio appare vuota… succede solo a me???
- mercatino strumenti musicali: i tuoi post sono fatti di argomenti altamente interessanti COMPLIMENTI
- mercatino strumenti musicali: complimenti i tuoi post sono fatti di argomenti altamente interessanti
-
Ultimi post

8 Commenti al post “Mostare tab di CB soltanto su alcuni profili utente”