private function generateMenu($items)
 {
     $items = Journal2Utils::sortArray($items);
     foreach ($items as $key => &$item) {
         $icon = Journal2Utils::getIconOptions($item);
         /* menu href */
         $href = null;
         $name = null;
         $target = $item['target'] ? ' target="_blank"' : '';
         $class = Journal2Utils::getProperty($item, 'hide_on_mobile') ? 'hide-on-mobile' : '';
         if ($class === 'hide-on-mobile' && (Journal2Cache::$mobile_detect->isMobile() || Journal2Cache::$mobile_detect->isTablet()) && $this->journal2->settings->get('responsive_design')) {
             unset($items[$key]);
             continue;
         }
         if (Journal2Utils::getProperty($item, 'hide_on_desktop', '0') === '1' && !Journal2Cache::$mobile_detect->isMobile()) {
             unset($items[$key]);
             continue;
         }
         /* menu type */
         switch ($item['menu']['menu_type']) {
             case 'category':
                 $category_info = $this->model_catalog_category->getCategory(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$category_info) {
                     continue;
                 }
                 $name = $category_info['name'];
                 $href = $this->url->link('product/category', 'path=' . $category_info['category_id']);
                 break;
             case 'product':
                 $product_info = $this->model_catalog_product->getProduct(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$product_info) {
                     continue;
                 }
                 $name = $product_info['name'];
                 $href = $this->url->link('product/product', 'product_id=' . $product_info['product_id']);
                 break;
             case 'manufacturer':
                 $manufacturer_info = $this->model_catalog_manufacturer->getManufacturer(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$manufacturer_info) {
                     continue;
                 }
                 $name = $manufacturer_info['name'];
                 $href = $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $manufacturer_info['manufacturer_id']);
                 break;
             case 'information':
                 $information_info = $this->model_catalog_information->getInformation(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$information_info) {
                     continue;
                 }
                 $name = $information_info['title'];
                 $href = $this->url->link('information/information', 'information_id=' . $information_info['information_id']);
                 break;
             case 'popup':
                 $href = "javascript:Journal.openPopup('{$item['menu']['menu_item']}')";
                 break;
             case 'opencart':
                 $customer_name = null;
                 switch ($item['menu']['menu_item']['page']) {
                     case 'login':
                         $item['menu']['menu_item']['page'] = $this->customer->isLogged() ? 'account/account' : 'account/login';
                         $customer_name = $this->customer->isLogged() ? '{{_customer_}}' : null;
                         break;
                     case 'register':
                         $item['menu']['menu_item']['page'] = $this->customer->isLogged() ? 'account/logout' : 'account/register';
                         break;
                     case 'account/wishlist':
                         $class .= ' wishlist-total';
                         break;
                     case 'product/compare':
                         $class .= ' compare-total';
                     default:
                 }
                 $name = $customer_name ? $customer_name : $this->model_journal2_menu->getMenuName($item['menu']['menu_item']['page']);
                 $href = $this->model_journal2_menu->link($item['menu']['menu_item']['page']);
                 break;
             case 'blog_home':
                 $name = $this->journal2->settings->get('config_blog_settings.title.value.' . $this->config->get('config_language_id'), 'Journal Blog');
                 $href = $this->url->link('journal2/blog');
                 break;
             case 'blog_category':
                 $category_info = $this->model_journal2_blog->getCategory(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$category_info) {
                     continue;
                 }
                 $name = $category_info['name'];
                 $href = $this->url->link('journal2/blog', 'journal_blog_category_id=' . $category_info['category_id']);
                 break;
             case 'blog_post':
                 $post_info = $this->model_journal2_blog->getPost(Journal2Utils::getProperty($item, 'menu.menu_item.id', -1));
                 if (!$post_info) {
                     continue;
                 }
                 $name = $post_info['name'];
                 $href = $this->url->link('journal2/blog/post', 'journal_blog_post_id=' . $post_info['post_id']);
                 break;
             case 'custom':
                 $name = Journal2Utils::getProperty($item, 'name.value.' . $this->config->get('config_language_id'), '');
                 $href = Journal2Utils::getProperty($item, 'menu.menu_item.url');
                 break;
         }
         $overwrite_name = Journal2Utils::getProperty($item, 'name.value.' . $this->config->get('config_language_id'), '');
         if ($overwrite_name) {
             $name = $overwrite_name;
         }
         if (Journal2Utils::getProperty($item, 'mobile_view') === 'icon') {
             $class .= ' icon-only';
         }
         if (Journal2Utils::getProperty($item, 'mobile_view') === 'text') {
             $class .= ' text-only';
         }
         if (!$href) {
             $class .= ' no-link';
         }
         $class = trim($class);
         $item = array('icon_left' => $icon['left'], 'icon_right' => $icon['right'], 'class' => $class ? ' class="' . $class . '"' : '', 'href' => $href, 'name' => $name, 'target' => $target, 'subcategories' => array());
     }
     return $items;
 }