Integrare JEvents in Joomla

JEvents è un calendario eventi per Joomla composto da un componente ed alcuni moduli di supporto. Esso permette di gestire eventi ricorrenti, assegnare eventi a categorie e molto altro.

In un CMS che sto realizzando avevo già implementato la gestione degli eventi, senza pensare al calendario. La struttura degli eventi non poteva cambiare perchè l'intera architettura delle informazioni si basava su alcune interconnessioni tra sezioni, quindi mi sono trovato a dovere interfacciare queste due entità.

Quello che volevo era far gestire il calendario a JEvents, mentre quando si entrava nel dettaglio degli eventi passare alla mia categoria. Quindi ho dovuto modificare il componente, e precisamente il file events.html.php


function viewEventRow( $id, $title, $task, $year, $month, $day, $contactlink, $option, $Itemid, $fgcolor ="orange",$bgcolor ="inherit") {
global $catidsOut, $database;
$cat = "";
if ($catidsOut != 0){
$cat = '&catids='.$catidsOut;
}
$cfg = & EventsConfig::getInstance();
$query = "SELECT id FROM #__content WHERE title = '" . $title . "';";
$database->setQuery( $query );
$nuovaid = trim( $database->loadResult());
$eventlink = sefRelToAbs( 'index.php?option=com_content&task=view&id=' . $nuovaid . '&Itemid=46');
// [mic] if title is too long, cut 'em for display
$tmpTitle = $title;
if( strlen( $title ) >= 50 ){
$tmpTitle = substr( $title, 0, 50 ) . ' ...';
} ?>
<a class="ev_link_row" href="<?php echo $eventlink; ?>" style="font-weight:bold;color:<?php echo $fgcolor;?<;" title="<?php echo $title ;?>"><?php echo $tmpTitle ;?></a>
<?php
if( $cfg->get('com_byview') == '1' ) {
echo _CAL_LANG_BY . ' <i>'. $contactlink .'</i>';
}
?>
<?php
}

Questo spezzone di file mostra come ho cambiato la struttura dei links, infatti ora dall'elenco degli eventi passo direttamente alla mia sezione eventi, nel menu di id 46.

$eventlink = sefRelToAbs( 'index.php?option=com_content&task=view&id=' . $nuovaid . '&Itemid=46');

La stessa cosa accade alla linea 305 del file, dove ho

<tr align="left" valign="top">
<?php
global $database;
$query = "SELECT title from #__events WHERE id = '" . $agid . "';";
$database->setQuery( $query );
$text = trim( $database->loadResult());
$query = "SELECT id FROM #__content WHERE title = '" . $text . "';";
$database->setQuery( $query );
$nuovaid = trim( $database->loadResult());
$link = sefReltoAbs("index.php?option=com_content&task=view&id=" . $nuovaid . "&Itemid=46");
?>
<td colspan="4"><?php echo "<a href='".$link."'>Maggiori dettagli sull'evento</a>"; ?></td>
</tr>

In questo caso intervengo sull'approfondimento dell'evento. Infatti prima in questa sezione del file avevo un link per maggiori informazioni, che portava alla visualizzazione di JEvent. Ora cerco l'articolo che ha lo stesso titolo del mio evento JEvent e lo linko.

Una modifica simile è necessaria all'interno del modulo Latest Events, o "Prossimi eventi". In questo caso cliccando uno degli eventi voglio che si vada alla mia categoria, visualizzata da com_content e non com_events.

Quindi modifico in mod_events_latest.lib.php la funzione _htmlLinkCloaking():


function _htmlLinkCloaking($url='', $text='') {
global $database;
$query = "SELECT id FROM #__content WHERE title = '" . $text . "';";
$database->setQuery( $query );
$nuovaid = trim( $database->loadResult());
$link = sefReltoAbs("index.php?option=com_content&task=view&id=" . $nuovaid . "&Itemid=46");
if ($this->linkCloaking) {
//return mosHTML::Link("", $text, array('onclick'=>'"window.location.href=\''.josURL($url).'\';return false;"'));
return '<a href="#" onclick="window.location.href=\'' . $link . '\'; return false;">' . $text . '</a>';
} else {
//return mosHTML::Link(josURL($url), "$text");
return '<a href="' . $link .'">' . $text . '</a>';
}
}