示例#1
0
 /**
  * Find Item static function
  *
  * @param   array  $needles  Array used to get the language value
  *
  * @return null
  *
  * @throws Exception
  */
 protected static function _findItem($needles = null)
 {
     $app = JFactory::getApplication();
     $menus = $app->getMenu('site');
     $language = isset($needles['language']) ? $needles['language'] : '*';
     // Prepare the reverse lookup array.
     if (self::$lookup === null) {
         self::$lookup = array();
         $component = JComponentHelper::getComponent('com_tags');
         $items = $menus->getItems('component_id', $component->id);
         if ($items) {
             foreach ($items as $item) {
                 if (isset($item->query) && isset($item->query['view'])) {
                     $lang = $item->language != '' ? $item->language : '*';
                     if (!isset(self::$lookup[$lang])) {
                         self::$lookup[$lang] = array();
                     }
                     $view = $item->query['view'];
                     if (!isset(self::$lookup[$lang][$view])) {
                         self::$lookup[$lang][$view] = array();
                     }
                     // Only match menu items that list one tag
                     if (isset($item->query['id']) && is_array($item->query['id'])) {
                         foreach ($item->query['id'] as $position => $tagId) {
                             if (!isset(self::$lookup[$lang][$view][$item->query['id'][$position]]) || count($item->query['id']) == 1) {
                                 self::$lookup[$lang][$view][$item->query['id'][$position]] = $item->id;
                             }
                         }
                     }
                 }
             }
         }
     }
     if ($needles) {
         foreach ($needles as $view => $ids) {
             if (isset(self::$lookup[$language][$view])) {
                 foreach ($ids as $id) {
                     if (isset(self::$lookup[$language][$view][(int) $id])) {
                         return self::$lookup[$language][$view][(int) $id];
                     }
                 }
             }
         }
     } else {
         $active = $menus->getActive();
         if ($active) {
             return $active->id;
         }
     }
     return null;
 }
示例#2
0
 protected static function _findItem($needles = null)
 {
     $app = JFactory::getApplication();
     $menus = $app->getMenu('site');
     $language = isset($needles['language']) ? $needles['language'] : '*';
     // Prepare the reverse lookup array.
     if (self::$lookup === null) {
         self::$lookup = array();
         $component = JComponentHelper::getComponent('com_tags');
         $items = $menus->getItems('component_id', $component->id);
         if ($items) {
             foreach ($items as $item) {
                 if (isset($item->query) && isset($item->query['view'])) {
                     $view = $item->query['view'];
                     if (!isset(self::$lookup[$view])) {
                         self::$lookup[$view] = array();
                     }
                     // Only match menu items that list one tag
                     if (isset($item->query['id'][0]) && count($item->query['id']) == 1) {
                         // Here it will become a bit tricky
                         // language != * can override existing entries
                         // language == * cannot override existing entries
                         if (!isset(self::$lookup[$language][$view][$item->query['id'][0]]) || $item->language != '*') {
                             self::$lookup[$language][$view][$item->query['id'][0]] = $item->id;
                         }
                         self::$lookup[$view][$item->query['id'][0]] = $item->id;
                     }
                     if (isset($item->query["tag_list_language_filter"]) && $item->query["tag_list_language_filter"] != '') {
                         $language = $item->query["tag_list_language_filter"];
                     }
                 }
             }
         }
     }
     if ($needles) {
         foreach ($needles as $view => $ids) {
             if (isset(self::$lookup[$view])) {
                 foreach ($ids as $id) {
                     if (isset(self::$lookup[$view][(int) $id])) {
                         return self::$lookup[$view][(int) $id];
                     }
                 }
             }
         }
     } else {
         $active = $menus->getActive();
         if ($active) {
             return $active->id;
         }
     }
     return null;
 }