/** * Add the canonical uri to the head. * * @return void * * @since 3.5 */ public function onAfterDispatch() { $doc = $this->app->getDocument(); if (!$this->app->isSite() || $doc->getType() !== 'html') { return; } $uri = JUri::getInstance(); $domain = $this->params->get('domain'); if ($domain === false || $domain === '') { $domain = $uri->toString(array('scheme', 'host', 'port')); } $link = $domain . JRoute::_('index.php?' . http_build_query($this->app->getRouter()->getVars()), false); if (rawurldecode($uri->toString()) !== $link) { $doc->addHeadLink(htmlspecialchars($link), 'canonical'); } }
/** * After initialise. * * @return void * * @since 1.6 */ public function onAfterInitialise() { $this->app->item_associations = $this->params->get('item_associations', 0); if ($this->app->isSite()) { $router = $this->app->getRouter(); // Attach build rules for language SEF. $router->attachBuildRule(array($this, 'preprocessBuildRule'), JRouter::PROCESS_BEFORE); $router->attachBuildRule(array($this, 'buildRule'), JRouter::PROCESS_DURING); if ($this->mode_sef) { $router->attachBuildRule(array($this, 'postprocessSEFBuildRule'), JRouter::PROCESS_AFTER); } else { $router->attachBuildRule(array($this, 'postprocessNonSEFBuildRule'), JRouter::PROCESS_AFTER); } // Attach parse rules for language SEF. $router->attachParseRule(array($this, 'parseRule'), JRouter::PROCESS_DURING); } }
/** * Return a reference to the JRouter object. * * @param string $name The name of the application. * @param array $options An optional associative array of configuration settings. * * @return JRouter * * @since 3.2 */ public static function getRouter($name = 'site', array $options = array()) { $config = JFactory::getConfig(); $options['mode'] = $config->get('sef'); return parent::getRouter($name, $options); }
/** * Return a reference to the JRouter object. * * @param string $name The name of the application. * @param array $options An optional associative array of configuration settings. * * @return JRouter * * @since 3.2 */ public static function getRouter($name = 'administrator', array $options = array()) { return parent::getRouter($name, $options); }
/** * Return the url for the list form - this url is used when submitting searches, and ordering * * @return string action url */ public function getTableAction() { if (isset($this->tableAction)) { return $this->tableAction; } $input = $this->app->input; $option = $input->get('option'); // Get the router $router = $this->app->getRouter(); $package = $this->app->getUserState('com_fabrik.package', 'fabrik'); /* $$$ rob force these to be 0 once the menu item has been loaded for the first time * subsequent loads of the link should have this set to 0. When the menu item is re-clicked * rest filters is set to 1 again */ $router->setVar('resetfilters', 0); if ($option !== $package) { // $$$ rob these can't be set by the menu item, but can be set in {fabrik....} $router->setVar('clearordering', 0); $router->setVar('clearfilters', 0); } $queryVars = $router->getVars(); $form = $this->getFormModel(); $page = 'index.php?'; foreach ($queryVars as $k => $v) { $rawK = FabrikString::rtrimword($k, '_raw'); $el = $form->getElement($k); if ($el === false) { $el = $form->getElement($rawK); } if (is_array($v)) { /* $$$ rob if you were using URL filters such as * * &jos_fabble_activity___create_date[value][]=now * &jos_fabble_activity___create_date[value][]=%2B2%20week&jos_fabble_activity___create_date[condition]=BETWEEN * * then we don't want to re-add them to the table action. * Instead they are aded to the filter sessions and reapplied that way * otherwise we ended up with elementname=Array in the query string */ /* * $$$ hugh ... yeah, but $v is still an array, so we need to deal with it * if it isn't an element ... like (say) ids[]=1&ids[]=2 in a table plugin, like * email list */ if ($el === false && $k !== 'fabrik___filter') { foreach ($v as $v1) { $qs[] = $k . '[]=' . $v1; } } } else { if ($el === false) { $qs[] = $k . '=' . $v; } else { /* $$$ e-kinst * let's keep &id for com_content - in other case in Content Plugin * we have incorrect action in form and as a result bad pagination URLS. * In any case this will not be excessive (I suppose) */ if ($k == 'id' && $option == 'com_content') { // At least. May be even $option != 'com_fabrik' $qs[] = $k . '=' . $v; } // Check if its a tag element if it is we want to clear that when we clear the form // (if the filter was set via the url we generally want to keep it though /* 28/12/2011 $$$ rob testing never keeping querystring filters in the qs but instead always * adding them to the filters (if no filter set up in element settings then hidden fields added anyway * this is to try to get round issue of related data (countries->regions) filter region from country list, * then clear filters (ok) but then if you go to 2nd page of results country url filter re-applied */ /* if($el->getElement()->plugin !== 'textarea' && $el->getParams()->get('textarea-tagify') !== true) { $qs[] = "$k=$v"; } */ } } } $action = $page . implode('&', $qs); $action = preg_replace("/limitstart{$this->getId()}=(\\d+)?(&|)/", '', $action); $action = FabrikString::removeQSVar($action, 'fabrik_incsessionfilters'); $action = FabrikString::rtrimword($action, '&'); $this->tableAction = JRoute::_($action); return $this->tableAction; }
/** * Method to add alternative meta tags for associated menu items. * * @return void * * @since 1.7 */ public function onAfterDispatch() { $doc = JFactory::getDocument(); if ($this->app->isSite() && $this->params->get('alternate_meta', 1) && $doc->getType() == 'html') { $languages = $this->lang_codes; $homes = JLanguageMultilang::getSiteHomePages(); $menu = $this->app->getMenu(); $active = $menu->getActive(); $levels = JFactory::getUser()->getAuthorisedViewLevels(); $remove_default_prefix = $this->params->get('remove_default_prefix', 0); $server = JUri::getInstance()->toString(array('scheme', 'host', 'port')); $is_home = false; $currentInternalUrl = 'index.php?' . http_build_query($this->app->getRouter()->getVars()); if ($active) { $active_link = JRoute::_($active->link . '&Itemid=' . $active->id); $current_link = JRoute::_($currentInternalUrl); // Load menu associations if ($active_link == $current_link) { $associations = MenusHelper::getAssociations($active->id); } // Check if we are on the home page $is_home = $active->home && ($active_link == $current_link || $active_link == $current_link . 'index.php' || $active_link . '/' == $current_link); } // Load component associations. $option = $this->app->input->get('option'); $cName = JString::ucfirst(JString::str_ireplace('com_', '', $option)) . 'HelperAssociation'; JLoader::register($cName, JPath::clean(JPATH_COMPONENT_SITE . '/helpers/association.php')); if (class_exists($cName) && is_callable(array($cName, 'getAssociations'))) { $cassociations = call_user_func(array($cName, 'getAssociations')); } // For each language... foreach ($languages as $i => &$language) { switch (true) { // Language without frontend UI || Language without specific home menu || Language without authorized access level case !array_key_exists($i, JLanguageMultilang::getSiteLangs()): case !isset($homes[$i]): case isset($language->access) && $language->access && !in_array($language->access, $levels): unset($languages[$i]); break; // Home page // Home page case $is_home: $language->link = JRoute::_('index.php?lang=' . $language->sef . '&Itemid=' . $homes[$i]->id); break; // Current language link // Current language link case $i == $this->current_lang: $language->link = JRoute::_($currentInternalUrl); break; // Component association // Component association case isset($cassociations[$i]): $language->link = JRoute::_($cassociations[$i] . '&lang=' . $language->sef); break; // Menu items association // Heads up! "$item = $menu" here below is an assignment, *NOT* comparison // Menu items association // Heads up! "$item = $menu" here below is an assignment, *NOT* comparison case isset($associations[$i]) && ($item = $menu->getItem($associations[$i])): $language->link = JRoute::_($item->link . '&Itemid=' . $item->id . '&lang=' . $language->sef); break; // Too bad... // Too bad... default: unset($languages[$i]); } } // If there are at least 2 of them, add the rel="alternate" links to the <head> if (count($languages) > 1) { // Remove the sef from the default language if "Remove URL Language Code" is on if (isset($languages[$this->default_lang]) && $remove_default_prefix) { $languages[$this->default_lang]->link = preg_replace('|/' . $languages[$this->default_lang]->sef . '/|', '/', $languages[$this->default_lang]->link, 1); } foreach ($languages as $i => &$language) { $doc->addHeadLink($server . $language->link, 'alternate', 'rel', array('hreflang' => $i)); } // Add x-default language tag if ($this->params->get('xdefault', 1)) { $xdefault_language = $this->params->get('xdefault_language', $this->default_lang); $xdefault_language = $xdefault_language == 'default' ? $this->default_lang : $xdefault_language; if (isset($languages[$xdefault_language])) { // Use a custom tag because addHeadLink is limited to one URI per tag $doc->addCustomTag('<link href="' . $server . $languages[$xdefault_language]->link . '" rel="alternate" hreflang="x-default" />'); } } } } }