Benvenuto,
Ospite
|
|
I have my site with easy language installed and setuped. Also I have GCalendar component.
I want my event from Google Calendar shown in multilanguage. In Google Calendars I create event with {lang xx}{/lang} style. Now in GCalendar component if I open full calendar mode I see my {lang xx}{/lang}, but in upcoming event module events' titles shown normal (in few languages). I found were title is generating for full calendar view (it is requested with ajax from option=com_gcalendar&view=jsonfeed&format=raw&gcid=2&Itemid=162&lang=...): $eventData = array(
'id' => $event->getGCalId(),
'gcid' => $event->getParam('gcid'),
'title' => htmlspecialchars_decode($event->getTitle()),
'start' => $event->getStartDate()->format('c', true),
'end' => $event->getEndDate()->format('c', true),
'url' => JRoute::_('index.php?option=com_gcalendar&view=event&eventID='.$event->getGCalId().'&gcid='.$event->getParam('gcid').(empty($itemID)?'':$itemID)),
'className' => "gcal-event_gccal_".$event->getParam('gcid'),
'allDay' => $allDayEvent,
'description' => $description
); $obj = new stdClass;
$obj->text = htmlspecialchars_decode($event->getTitle());
JPluginHelper::importPlugin('content');
$dispatcher =& JDispatcher::getInstance();
$results = $dispatcher->trigger( 'onContentPrepare', array( 'com_filer.filer', &$obj, &$params, 0 ) );
$title = $obj->text; Can you explane what I'm doing wrong? |
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
|
|
Temporary fix it with dirty hack in jsonfeed view override, just put easy language plugin onAfterRender function and call it when populate event data (/templates/xxx/html/com_gcalendar/jsonfeed/default.php):
function easylang ( $text ) {
$buffer = $text;
if ( strpos( $buffer, '{lang' ) === false ) return $buffer;
$lang_codes = JLanguageHelper::getLanguages('lang_code');
$lang_code = $lang_codes[JFactory::getLanguage()->getTag()]->sef;
$regex = "#{lang ".$lang_code."}(.*?){\/lang}#is";
$regexTextarea = "#<textarea(.*?)>(.*?)<\/textarea>#is";
$regexInput = "#<input(.*?)>#is";
$matches = array();
preg_match_all($regexTextarea, $buffer, $matches, PREG_SET_ORDER);
$textarea = array();
foreach ($matches as $key => $match) {
if(strpos( $match[0], '{lang' ) !== false) {
$textarea[$key] = $match[0];
$buffer = str_replace($textarea[$key], '~^t'.$key.'~', $buffer);
}
}
$matches = array();
preg_match_all($regexInput, $buffer, $matches, PREG_SET_ORDER);
$input = array();
foreach ($matches as $key => $match) {
if(
(strpos( $match[0], 'type="password"' ) !== false ||
strpos( $match[0], 'type="text"' ) !== false) &&
strpos( $match[0], '{lang' ) !== false) {
$input[$key] = $match[0];
$buffer = str_replace($input[$key], '~^i'.$key.'~', $buffer);
}
}
if (strpos( $buffer, '{lang' ) !== false) {
$buffer = preg_replace($regex,'$1', $buffer);
$regex = "#{lang [^}]+}.*?{\/lang}#is";
$buffer = preg_replace($regex,'', $buffer);
if ($textarea) {
foreach ($textarea as $key => $t) {
$buffer = str_replace('~^t'.$key.'~', $t, $buffer);
}
unset($textarea);
}
if ($input) {
foreach ($input as $key => $i) {
$buffer = str_replace('~^i'.$key.'~', $i, $buffer);
}
unset($input);
}
}
return $buffer;
}
//*******************************************************
'title' => easylang(htmlspecialchars_decode($event->getTitle())) |
L\'Amministratore ha disattivato l\'accesso in scrittura al pubblico.
|
Facendo click su qualunque link della pagina si accetta il loro utilizzo. Per saperne di piu'