function showHead() { echo '<title>' . $this->getPageTitle() . "</title>\n"; $canonical = MobileJoomla::getCanonicalURI(); if ($canonical) { echo '<meta name="robots" content="noindex, nofollow">'; echo '<link rel="canonical" href="' . $canonical . '">'; } }
function onAfterRoute() { /** @var JSite $app */ $app = JFactory::getApplication(); if ($app->isAdmin()) { // don't use MobileJoomla in backend return; } $is_joomla15 = $this->isJoomla15(); // don't filter RSS and non-html /** @var JDocument $document */ $document = JFactory::getDocument(); $format = $document->getType(); $doctype = JRequest::getVar('type', false); if ($doctype == 'rss' || $doctype == 'atom' || $format !== 'html' && $format !== 'raw') { //reset mobile content-type header $headers = JResponse::getHeaders(); JResponse::clearHeaders(); foreach ($headers as $header) { if (strtolower($header['name']) != 'content-type') { JResponse::setHeader($header['name'], $header['value']); } } return; } //be last registered onAfterRender event $app->registerEvent('onAfterRender', 'plgSystemMobileBot_onAfterRenderLast'); // Load config $MobileJoomla_Settings =& MobileJoomla::getConfig(); $MobileJoomla_Device =& MobileJoomla::getDevice(); jimport('joomla.environment.browser'); $browser = JBrowser::getInstance(); if (version_compare(JVERSION, '3.0', '<')) { $browser->set('_mobile', $MobileJoomla_Device['markup'] !== false); } else { $refObj = new ReflectionObject($browser); $refProp = $refObj->getProperty('mobile'); $refProp->setAccessible(true); $refProp->setValue($browser, $MobileJoomla_Device['markup'] !== false); } JPluginHelper::importPlugin('mobile'); $app->triggerEvent('onMobileAfterRoute', array(&$MobileJoomla_Settings, &$MobileJoomla_Device)); $this->filterExtensions($MobileJoomla_Settings, $MobileJoomla_Device); // "Vary" header for proxy JResponse::setHeader('Vary', 'User-Agent'); if ($MobileJoomla_Device['markup'] === false) { $pcpage = $MobileJoomla_Settings['pcpage']; if ($pcpage && $pcpage !== 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) { $app->redirect($pcpage); } return; } define('_MJ', 1); /** @var MobileJoomla $MobileJoomla */ $MobileJoomla = MobileJoomla::getInstance(); if (!$is_joomla15 && isset($app->registeredurlparams)) { $registeredurlparams = $app->registeredurlparams; $this->setRequestVar('mjurlkey', null); unset($registeredurlparams->mjurlkey); $app->registeredurlparams = $registeredurlparams; } $app->triggerEvent('onMobile', array(&$MobileJoomla, &$MobileJoomla_Settings, &$MobileJoomla_Device)); $template = $MobileJoomla->getParam('template'); $homepage = $MobileJoomla->getParam('homepage'); $gzip = $MobileJoomla->getParam('gzip'); //Set template if (!empty($template)) { if ($is_joomla15) { $app->setUserState('setTemplate', $template); $app->setTemplate($template); } else { $db = JFactory::getDBO(); $query = "SELECT params FROM #__template_styles WHERE client_id = 0 AND template = " . $db->Quote($template) . " ORDER BY id LIMIT 1"; $db->setQuery($query); $params_data = $db->loadResult(); if (empty($params_data)) { $params_data = '{}'; } if (version_compare(JVERSION, '1.7', '>=')) { $app->setTemplate($template, $params_data); } elseif (version_compare(JVERSION, '1.6', '>=')) { $app->setTemplate($template); $template_obj = $app->getTemplate(true); $template_obj->params->loadJSON($params_data); } } } // JHtml overrides if (version_compare(JVERSION, '3.0', '<')) { jimport('joomla.html.html'); JHtml::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_mobilejoomla/override/html'); if (@is_dir($dir = JPATH_THEMES . '/' . $template . '/override/html')) { JHtml::addIncludePath($dir); } } else { // load email.php only (workaround for new J!3 class loader) if (@is_file($path = JPATH_THEMES . '/' . $template . '/override/html/email.php')) { JLoader::register('JHtmlEmail', $path, true); } else { JLoader::register('JHtmlEmail', JPATH_ADMINISTRATOR . '/components/com_mobilejoomla/override/html/email.php', true); } } $this->setConfig('gzip', $gzip); //Set headers JResponse::clearHeaders(); $document = JFactory::getDocument(); $document->setMimeEncoding($MobileJoomla->getContentType()); $MobileJoomla->setHeader(); // SEO $canonical = MobileJoomla::getCanonicalURI(); if ($canonical) { if ($format == 'html') { $document->addHeadLink($canonical, 'canonical'); } $document->setMetaData('robots', 'noindex, nofollow'); } if (JRequest::getMethod() == 'POST') { return; } /** @var JMenu $menu */ $menu = $app->getMenu(); $router = $app->getRouter(); $Itemid = version_compare(JVERSION, '3.0', '>=') ? $app->input->getInt('Itemid') : JRequest::getInt('Itemid'); $item = $menu->getItem($Itemid); if (is_object($item)) { $current = array_merge($item->query, $_GET, $router->getVars()); } else { $current = array_merge($_GET, $router->getVars()); } if (!isset($current['Itemid'])) { $current['Itemid'] = (string) $Itemid; } unset($current['device']); unset($current['lang']); unset($current['format']); unset($current['no_html']); unset($current['language']); unset($current['tp']); unset($current['template']); unset($current['templateStyle']); unset($current['start']); unset($current['limitstart']); unset($current['limit']); // fix for sh404sef if (isset($current['limitstart']) && $current['limitstart'] == 0) { unset($current['limitstart']); } if (isset($current[session_name()])) { unset($current[session_name()]); } if ($is_joomla15) { $default = $menu->getDefault(); } else { $lang = JFactory::getLanguage(); $default = $menu->getDefault($lang->getTag()); } $home = $default->query; $home['Itemid'] = $default->id; if (substr($homepage, 0, 10) == 'index.php?') { parse_str(substr($homepage, 10), $mj_home); if (isset($mj_home['Itemid'])) { $mj_home_Itemid = (int) $mj_home['Itemid']; if ($is_joomla15) { $menu->setDefault($mj_home_Itemid); } else { $menu->setDefault($mj_home_Itemid, '*'); } } if ($current == $mj_home) { $MobileJoomla->setHome(true); } } if (count($current) == 0 || $current == $home) { $MobileJoomla->setHome(true); if ($homepage) { if (isset($mj_home_Itemid)) { global $Itemid; $Itemid = $mj_home_Itemid; $menu->setActive($Itemid); if (version_compare(JVERSION, '3.2', '>=')) { $menu->authorise($Itemid); } elseif (!$is_joomla15) { $app->authorise($Itemid); } else { $app->authorize($Itemid); } } $_SERVER['REQUEST_URI'] = JUri::base(true) . '/' . $homepage; if (isset($mj_home)) { $_SERVER['QUERY_STRING'] = substr($homepage, 10); foreach ($current as $key => $val) { unset($_REQUEST[$key]); unset($_GET[$key]); } JRequest::set($mj_home, 'get'); } else { $url = 'http'; $url .= isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off' ? 's' : ''; $url .= '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $uri = new JUri($url); $router = $app->getRouter(); $result = $router->parse($uri); JRequest::set($result, 'get'); } } } }