示例#1
0
 /**
  * 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');
     }
 }
示例#2
0
 /**
  * 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);
     }
 }
示例#3
0
 /**
  * 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);
 }
示例#4
0
 /**
  * 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);
 }
示例#5
0
文件: list.php 项目: pascal26/fabrik
 /**
  * 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;
 }
示例#6
0
 /**
  * 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" />');
                 }
             }
         }
     }
 }