- Home
- Categorie
- Coding e Sistemistica
- Joomla!
- Modulo "articoli recenti" e articoli riservati
-
Esattamente!
-
In questo caso è possibile che il problema dipenda da come hai definito il nuovo gruppo GruppoRiservato, che deve avere accesso di default a tutti gli oggetti degli utenti Registrati.
Controlla e se non riesci a individuare il problema riporta qui le impostazioni per il nuovo gruppo.
-
Nei parametri del GruppoRiservato la voce ?Gruppo principale? è impostata su Registered.
Nelle impostazioni di Livello alla voce ?Gruppi di utenti che hanno accesso alla visualizzazione? c?è la spunta solo sul gruppo ?GruppoRiservato?.
Ho provato a settare anche il gruppo Registered oltre a GruppoRiservato, non è cambiato nulla. Il risultato è sempre lo stesso!
Idee?
-
Ok, faccio una prova.
-
@FDA said:
Ok, faccio una prova.
Ti ringrazio! Spero tanto che possa darmi una mano...
-
Ciao drumlibre,
dopo alcune prove azzardo che dipende da un errore di impostazione.
Ti dico come ho testato e funziona:-
Creazione di un nuovo gruppo da userGroup denominato "GruppoRiservato" con Group Parent "Registered".
-
Creazione Viewing Access Levels: in Level Title va "GruppoRiservato", in User Groups Having Viewing Access selezione di "GruppoRiservato".
-
Creazione di un utente: in Assigned User Groups selezione di "GruppoRiservato".
-
Creazione di un articolo: in Access selezione di "GruppoRiservato".
-
Creazione di Module Latest News: in Access selezione di "Public".
In questo modo ho ottenuto i seguenti risultati:
- Il modulo mostra a tutti gli utenti (pubblici) gli articoli pubblici, ma non quello con Access=GruppoRiservato.
- Se un utente public prova a inserire l'indirizzo del link all'articolo con Access=GruppoRiservato riceve un messaggio di errore: "You are not authorised to view this resource."
- L'utente di GruppoRiservato vede tutti gli articoli di public e registered e in più quello di GruppoRiservato.
- L'utente registered vede tutti gli articoli di public e registered ma non quello di GruppoRiservato.
Ciò detto, non so dove hai sbagliato, ma può anche darsi che tu abbia un'estensione che incide in qualche modo.
-
-
Mi trovo perfettamente con tutti i passaggi che hai descritto, sono gli stessi che ho compiuto io! L?unica differenza, nel mio caso, sta nel fatto che per rendere visibili a tutti gli utenti (public) anche gli articoli riservati (GruppoRiservato) ho dovuto abilitare la visualizzazione dei Link non autorizzati in Opzioni gestione articoli.
In questo modo, quindi, in Lista di singola categoria ottengo l?elenco di tutti gli articoli, riservati e no. Per quelli riservati, accanto al titolo, compare la scritta ?registrati per leggere tutto?. Gli articoli pubblici, ovviamente, sono accessibili liberamente.
Quando si clicca sul link di un articolo riservato, a questo punto, si apre la maschera per il login e, una volta effettuato l?accesso, viene visualizzato l?articolo riservato desiderato.
Questa cosa, purtroppo, non accade quando si clicca sul link di un articolo riservato mostrato nel modulo ?articoli recenti?! è porpio questa la mia dannazione!!
Cosa succede? semplice, una volta richiesto un articolo riservato si apre la pagina con il form per il login e dopo essersi autenticati, anziché essere reindirizzati all?articolo desiderato si apre la pagina con il modulo per ?modificare il profilo utente?!!
Perchè questa differenza? Come pensi che si possa risolvere?
Grazie per tutto il tempo dedicatomi e per l?aiuto! Grazie!
-
Mi sa che è una questione di biscottini, quelli tecnici che servono a navigare.
Quando un utente non loggato clicca sul contenuto riservato viene reindirizzato alla pagina di login utente, ma quando il login avviene entra nel profilo perché non "ha memoria". Con ogni probabilità la cosa viene gestita così dal core di Joomla, che si limita al redirect verso il profilo quando incontra il link dell'articolo riservato.
-
@drumlibre : problema risolto, ho modificato il modulo e adesso dopo il login reindirizza all'articolo.;)
Poiché però "Latest News" è del core non è il caso di modificarlo e quindi ne facciamo uno nuovo.
Devo completare anche questo modulo (http://www.giorgiotave.it/forum/joomla/234130-acceso-utenti-back-end-sito-web.html), pure lui già pronto: nel weekend testo e pubblico tutto qui.
-
@FDA said:
@drumlibre : problema risolto, ho modificato il modulo e adesso dopo il login reindirizza all'articolo.;)
...WOW!! è fantastico! Sei troppo in gamba! GRAZIE!!!
Resto in trepida attesa...
-
Inizio a condividere la modifica al codice, così chi vuole può contribuire per migliorare la soluzione, anche sotto il piano della sicurezza.
Disclaimer: la modifica di un modulo non va fatta, occorre creare un nuovo modulo, cosa che si può fare con poco sforzo copiando il modulo originario. La condivisione della modifica serve come esempio alla community ma non è in alcun modun un invito a modificare pezzi del core o di estensioni che potrebbero essere aggiornate.
[RIGHT]
*Joomlista avvisato mezzo salvato! *
[/RIGHT]Introduzione schematica del modulo "mod_articles_latest":
-
Formalmente si chiama proprio mod_articles_latest, ma per semplicità possiamo chiamarlo Latest News. Fa parte della distribuzione di Joomla! 3 (presente anche in versioni precedenti) ed è rilasciato sotto licenza GPL v2 o successiva, come risulta dal file manifest associato (vedi dopo).
-
Sullo spazio web trovi la cartella del modulo a questo indirizzo: root di joomla/modules/mod_articles_latest . All'interno trovi questa struttura di file e cartelle:
-
mod_articles_latest.xml : detto anche file manifest, include la descrizione del modulo in formato xml, la lista di tutti i file e le cartelle dell'estensione e la lista delle opzioni di configurazione.
-
mod_article_latest.php : è il file php che viene eseguito quando viene caricato il modulo.
-
helper.php : qui viene definita la classe ModArticlesLatestHelper che include la function getList. In parole povere questo file provvede ad estrarre i dati dal database.
-
index.html : file vuoto obbligatorio in tutte le cartelle delle estensioni.
-
tmpl/default.php : è il file della "vista", corrisponde cioè all'output visibile del modulo; il php presente in questo file è quello che materialmente produce l'html con la lista di link agli articoli recenti.
-
tmpl/index.html : file vuoto obbligatorio in tutte le cartelle delle estensioni.
-
Mostra gli articoli recenti nel front end secondo la configurazione stabilita nel back end.
-
Si crea come tutti gli altri moduli dal back end e come tutti gli altri può essere associato a posizioni modulo o incluso in altri articoli tramite il content plugin Load Module. Puoi creare quanti moduli vuoi di questo tipo, anche con opzioni diverse e da assegnare a posizioni differenti.
Informazioni sulla licenza GPL a partire da questo link: gnu.org/licenses/licenses.it.html
Per sapere cosa c'è dentro un'estensione di Joomla! è sufficiente munirsi di un editor qualsiasi e navigare i file e le cartelle fino a giungere all'estensione da esaminare; se si lavora online può essere utile un client FTP. Nel caso di mod_articles_latest occorre navigare dalla root del sito fino a /modules/mod_articles_latest e da qui aprire i vari file. Evito di riportare il contenuto di tutti i file perché ai nostri fini ci interessa soltanto helper.php.
Prima di modificare il contenuto di helper.php definisco schematicamente il problema che vogliamo risolvere:
- Sul sito Joomla! sono presenti articoli pubblici (gruppo public) e articoli riservati.
- GruppoRiservato è un nuovo gruppo per gli utenti, parent di Registered; per User Groups Having Viewing Access si è selezionato GruppoRiservato.
- Il modulo Latest News può includere link di articoli pubblici e link di articoli il cui accesso è ristretto agli utenti di GruppoRiservato e/o ad altri utenti.
- In condizioni normali, il modulo Latest News non mostra i link di articoli riservati gli utenti non registrati e quindi loggati, mentre mostra questo link agli utenti loggati facenti parte di GruppoRiservato. Precisamente, non li mostra nemmeno agli utenti loggati Registered.
- Dal back end, andando in Content e poi in Options è possibile modificare il comportamento di cui al punto precedente impostando a YES l'opzione Show Unauthorised Links; fatto questo, il modulo Latest News mostra a tutti gli utenti i titoli di tutti gli articoli, ma quando un utente clicca su un articolo riservato a GruppoRiservato, viene invitato a loggarsi e poi resta nella finestra del profilo utente, ovvero non viene reindirizzato all'articolo dopo il login.
Le modifiche che vogliamo apportare al modulo servono a reindirizzare l'utente di GruppoRiservato all'articolo una volta che ha effettuato il login (sottinteso: dopo avere fatto clic su un articolo riservato a GruppoRiservato).
Partiamo allora dal codice originale del modulo.
<?php /** * @package Joomla.Site * @subpackage mod_articles_latest * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; require_once JPATH_SITE . '/components/com_content/helpers/route.php'; JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_content/models', 'ContentModel'); /** * Helper for mod_articles_latest * * @package Joomla.Site * @subpackage mod_articles_latest * @since 1.6 */ abstract class ModArticlesLatestHelper { /** * Retrieve a list of article * * @param JRegistry &$params module parameters * * @return mixed * * @since 1.6 */ public static function getList(&$params) { // Get the dbo $db = JFactory::getDbo(); // Get an instance of the generic articles model $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // Set application parameters in model $app = JFactory::getApplication(); $appParams = $app->getParams(); $model->setState('params', $appParams); // Set the filters based on the module params $model->setState('list.start', 0); $model->setState('list.limit', (int) $params->get('count', 5)); $model->setState('filter.published', 1); // Access filter $access = !JComponentHelper::getParams('com_content')->get('show_noauth'); $authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id')); $model->setState('filter.access', $access); // Category filter $model->setState('filter.category_id', $params->get('catid', array())); // User filter $userId = JFactory::getUser()->get('id'); switch ($params->get('user_id')) { case 'by_me' : $model->setState('filter.author_id', (int) $userId); break; case 'not_me' : $model->setState('filter.author_id', $userId); $model->setState('filter.author_id.include', false); break; case '0' : break; default: $model->setState('filter.author_id', (int) $params->get('user_id')); break; } // Filter by language $model->setState('filter.language', $app->getLanguageFilter()); // Featured switch switch ($params->get('show_featured')) { case '1' : $model->setState('filter.featured', 'only'); break; case '0' : $model->setState('filter.featured', 'hide'); break; default : $model->setState('filter.featured', 'show'); break; } // Set ordering $order_map = array( 'm_dsc' => 'a.modified DESC, a.created', 'mc_dsc' => 'CASE WHEN (a.modified = ' . $db->quote($db->getNullDate()) . ') THEN a.created ELSE a.modified END', 'c_dsc' => 'a.created', 'p_dsc' => 'a.publish_up', 'random' => 'RAND()', ); $ordering = JArrayHelper::getValue($order_map, $params->get('ordering'), 'a.publish_up'); $dir = 'DESC'; $model->setState('list.ordering', $ordering); $model->setState('list.direction', $dir); $items = $model->getItems(); foreach ($items as &$item) { $item->slug = $item->id . ':' . $item->alias; $item->catslug = $item->catid . ':' . $item->category_alias; if ($access || in_array($item->access, $authorised)) { // We know that user has the privilege to view the article $item->link = JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug)); } else { $item->link = JRoute::_('index.php?option=com_users&view=login'); } } return $items; } }
Abbiamo detto che questo codice estrae gli articoli dal database. A noi interessa solo la parte finale, dove si usa un ciclo foreach per ottenere la lista dei link agli articoli recenti. Anzi, come vedremo ci interessa soltanto la condizione relativa a else.
All'interno del ciclo, infatti, c'è una condizione che suona più o meno così: se l'utente che è sul sito è autorizzato a vedere l'articolo allora inserisci il link all'articolo, altrimenti indirizzalo al login.
Il problema è racchiuso tutta in questa condizione perché così, una volta che l'utente ha effettuato il login, non c'è modo di reindirizzarlo all'articolo, in quanto quel link è "privo di memoria".
La modifica da fare - e da includere poi nel nuovo modulo, possibilmente arricchita dai vostro suggerimenti - riguarda la riga racchiusa nell' else:
$item->link = JRoute::_('index.php?option=com_users&view=login');
La riga sopra va sostituita con:
$redurl = urlencode(base64_encode(JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catslug)))); $redurl = '&return=' . $redurl; $item->link = JRoute::_('index.php?option=com_users&view=login') . $redurl;
Attendo i vostri test e suggerimenti per migliorare il modulo.
Buon Joomla!
-
-
C'è un problema dopo il login di un utente registrato ma non appartenente al gruppo specifico (GruppoRiservato il link nel modulo non porta all'introduzione dell'articolo.
-
Grandissimo FDA!! sei stato fenomenaleee!! bravo!
Ho fatto dei test per verificare il funzionamento del codice, è perfetto!!
Ho dovuto solo cambiare il segno '&' con il segno '?' per accodare al link iniziale la variabile $redurl, in questo modo:
$redurl = '?return=' . $redurl;
Al momento la soluzione che hai realizzato, nel mio caso, è ottima direi!
Per altre possibili applicazioni non ho ancora provato nulla, appena riesco farò dei test.
Tornando alla questione "GruppoRiservato", io ho semplicemente fatto un backup del file originale (helper.php), modificato il codice e lasciato tutto nella stessa directory. In che modo si potrebbe far "sopravvivere" questa modifica ai nuovi upgrade di joomla?
Grazie infinite per la condivisione!! Sei forte!
-
Se si fosse trattato di modificare la view dell'estensione avrei fatto un override del modulo, ma qui si tratta dell'helper.
In linea teorica potresti creare qualcosa (un plugin?) che carica nella folder il tuo helper.php o inventare qualche altro trucchetto di questo tipo.
La cosa più banale è sostituire a mano quelle 3 righe nell'else in caso di aggiornamento. Tieni conto che quel file non viene aggiornato spesso.Se non incontro difficoltà entro domani arriva comunque il nuovo modulo e non devi più modificare nulla.
-
Questa è la v. 0.1.0 del modulo "Latest News" modificato per reindirizzare l'utente che ha fatto il login verso l'articolo riservato:
download.francescodagostino .it/files/joomla/articleslatestral/mod_articles_latest_ral_v010.zipSi può usare insieme al modulo originale, nel senso che sono compatibili e indipendenti (es. si usa l'originale su alcune pagine e il "RaL" su altre).
Per il nome non ho trovato di meglio di un tristissimo acronimo di "Redirect after Login", che ho aggiunto al nome originale "Articles Latest".Chi vuole testare e darci qualche suggerimento?
Intanto segnalo il mio primo dubbio: il link all'articolo riservato ha il title dell'articolo come anchor text ma l'url non è quello canonico all'articolo e questo, modifica a parte, è un difetto anche nel modulo originale. Questo è infatti il codice php della vista:
<?php /** * @package Joomla.Module * @subpackage mod_articles_latest_ral * * @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved. The changes to the original mod_articles_latest are copyright free. * @license GNU General Public License version 2 or later. */ defined('_JEXEC') or die; ?> <ul class="latestnews<?php echo $moduleclass_sfx; ?>"> <?php foreach ($list as $item) : ?> <li itemscope itemtype="http://schema.org/Article"> <a href="<?php echo $item->link; ?>" itemprop="url"> <span itemprop="name"> <?php echo $item->title; ?> </span> </a> </li> <?php endforeach; ?> </ul>
Da notare che non solo è linkato l'url sbagliato all'anchor text dell'articolo (tra l'altro, teoricamente potremmo volere indicizzare un articolo che è parzialmente visibile), ma ci abbiamo anche aggiunto schema.org a ribadire che siamo in presenza di un elemento article e che quelli sono il nome e l'url (attenzione: article per schema.org non è article per Joomla).
Come risolvere?
-
Ho aperto un thread dedicato al modulo mod_articles_latest_ral qui: http://www.giorgiotave.it/forum/componenti-per-joomla/234550-joomla-3-modulo-articoli-recenti-con-redirect-dopo-il-login.html