name = 'blocktopmenu'; $this->tab = 'Julien Breux Developpement'; $this->version = 1.3; parent::__construct(); $this->displayName = $this->l('Top horizontal menu'); $this->description = $this->l('Add a new menu on top of your shop.'); } public function install() { if(!parent::install() || !$this->registerHook('top') || !Configuration::updateValue('MOD_BLOCKTOPMENU_ITEMS', 'CAT1,CMS1,CMS2,PRD1') || !Configuration::updateValue('MOD_BLOCKTOPMENU_SEARCH', '1') || !$this->installDB()) return false; return true; } public function installDb() { Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop` ( `id_link` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `new_window` TINYINT( 1 ) NOT NULL, `link` VARCHAR( 128 ) NOT NULL ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;'); Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'linksmenutop_lang` ( `id_link` INT NOT NULL , `id_lang` INT NOT NULL , `label` VARCHAR( 128 ) NOT NULL , INDEX ( `id_link` , `id_lang` ) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;'); return true; } public function uninstall() { if(!parent::uninstall() || !Configuration::deleteByName('MOD_BLOCKTOPMENU_ITEMS') || !Configuration::deleteByName('MOD_BLOCKTOPMENU_SEARCH') || !$this->uninstallDB()) return false; return true; } private function uninstallDb() { Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop`'); Db::getInstance()->execute('DROP TABLE `'._DB_PREFIX_.'linksmenutop_lang`'); return true; } public function getContent() { global $cookie; if(Tools::isSubmit('submitBlocktopmenu')) { if(Configuration::updateValue('MOD_BLOCKTOPMENU_ITEMS', Tools::getValue('items'))) $this->_html .= $this->displayConfirmation($this->l('Settings Updated')); else $this->_html .= $this->displayError($this->l('Unable to update settings')); Configuration::updateValue('MOD_BLOCKTOPMENU_SEARCH', (bool)Tools::getValue('search')); } if(Tools::isSubmit('submitBlocktopmenuLinks')) { if(Tools::getValue('link') == '') { $this->_html .= $this->displayError($this->l('Unable to add this link')); } else { MenuTopLinks::add(Tools::getValue('link'), Tools::getValue('label'), Tools::getValue('new_window', 0)); $this->_html .= $this->displayConfirmation($this->l('The link has been added')); } } if(Tools::isSubmit('submitBlocktopmenuRemove')) { $id_link = Tools::getValue('id_link', 0); MenuTopLinks::remove($id_link); Configuration::updateValue('MOD_BLOCKTOPMENU_ITEMS', str_replace(array('LNK'.$id_link.',', 'LNK'.$id_link), '', Configuration::get('MOD_BLOCKTOPMENU_ITEMS'))); $this->_html .= $this->displayConfirmation($this->l('The link has been removed')); } $this->_html .= '
'.$this->l('Settings').'
 


'.$this->l('Remove').' >>


<< '.$this->l('Add').'
 


'; $defaultLanguage = intval(Configuration::get('PS_LANG_DEFAULT')); $languages = Language::getLanguages(); $iso = Language::getIsoById($defaultLanguage); $divLangName = 'link_label'; $this->_html .= '
'.$this->l('Add Menu Top Link').'
'; foreach ($languages as $language) { $this->_html .= ' '; } $this->_html .= $this->displayFlags($languages, $defaultLanguage, $divLangName, 'link_label', true); $this->_html .= '


'; $this->_html .= '
'.$this->l('List Menu Top Link').' '; $links = MenuTopLinks::gets($cookie->id_lang); foreach($links as $link) { $this->_html .= ' '; } $this->_html .= '
'.$this->l('Id Link').' '.$this->l('Label').' '.$this->l('Link').' '.$this->l('New Window').' '.$this->l('Action').'
'.$link['id_link'].' '.$link['label'].' '.$link['link'].' '.(($link['new_window']) ? $this->l('Yes') : $this->l('No')).'
'; echo $this->_html; } private function getMenuItems() { $items = Configuration::get('MOD_BLOCKTOPMENU_ITEMS'); $items = explode(',', $items); return $items; } private function makeMenuOption() { global $cookie; foreach($this->getMenuItems() as $item) { $id = (int)substr($item, 3, strlen($item)); switch(substr($item, 0, 3)) { case'CAT': $this->getCategoryOption($id, $cookie->id_lang, false); break; case'PRD': $product = new Product($id, true, $cookie->id_lang); if(!is_null($product->id)) $this->_html .= ''.PHP_EOL; break; case'CMS': $cms = CMS::getLinks($cookie->id_lang, array($id)); if(count($cms)) $this->_html .= ''.PHP_EOL; break; case'MAN': $manufacturer = new Manufacturer($id, $cookie->id_lang); if(!is_null($manufacturer->id)) $this->_html .= ''.PHP_EOL; break; case'SUP': $supplier = new Supplier($id, $cookie->id_lang); if(!is_null($supplier->id)) $this->_html .= ''.PHP_EOL; break; case'LNK': $link = MenuTopLinks::get($id, $cookie->id_lang); if(count($link)) $this->_html .= ''.PHP_EOL; break; } } } private function makeMenu() { global $cookie, $page_name; foreach($this->getMenuItems() as $item) { $id = (int)substr($item, 3, strlen($item)); switch(substr($item, 0, 3)) { case'CAT': $this->getCategory($id, $cookie->id_lang); break; case'PRD': $selected = ($page_name == 'product' && (Tools::getValue('id_product') == $id)) ? ' class="sfHover"' : ''; $product = new Product($id, true, $cookie->id_lang); if(!is_null($product->id)) $this->_menu .= ''.$product->name.''.PHP_EOL; break; case'CMS': $selected = ($page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : ''; $cms = CMS::getLinks($cookie->id_lang, array($id)); if(count($cms)) $this->_menu .= ''.$cms[0]['meta_title'].''.PHP_EOL; break; case'MAN': $selected = ($page_name == 'manufacturer' && (Tools::getValue('id_manufacturer') == $id)) ? ' class="sfHover"' : ''; $manufacturer = new Manufacturer($id, $cookie->id_lang); if(!is_null($manufacturer->id)) { if (intval(Configuration::get('PS_REWRITING_SETTINGS'))) $manufacturer->link_rewrite = Tools::link_rewrite($manufacturer->name, false); else $manufacturer->link_rewrite = 0; $link = new Link; $this->_menu .= ''.$manufacturer->name.''.PHP_EOL; } break; case'SUP': $selected = ($page_name == 'supplier' && (Tools::getValue('id_supplier') == $id)) ? ' class="sfHover"' : ''; $supplier = new Supplier($id, $cookie->id_lang); if(!is_null($supplier->id)) { $link = new Link; $this->_menu .= ''.$supplier->name.''.PHP_EOL; } break; case'LNK': $link = MenuTopLinks::get($id, $cookie->id_lang); if(count($link)) $this->_menu .= '
  • '.$link[0]['label'].'
  • '.PHP_EOL; break; } } } private function getCategoryOption($id_category, $id_lang, $children = true) { $categorie = new Category($id_category, $id_lang); if(is_null($categorie->id)) return; if(count(explode('.', $categorie->name)) > 1) $name = str_replace('.', '', strstr($categorie->name, '.')); else $name = $categorie->name; $this->_html .= ''; if($children) { $childrens = Category::getChildren($id_category, $id_lang); if(count($childrens)) foreach($childrens as $children) $this->getCategoryOption($children['id_category'], $id_lang); } } private function getCategory($id_category, $id_lang) { global $page_name; $categorie = new Category($id_category, $id_lang); if(is_null($categorie->id)) return; $selected = ($page_name == 'category' && ((int)Tools::getValue('id_category') == $id_category)) ? ' class="sfHoverForce"' : ''; $this->_menu .= ''; if(count(explode('.', $categorie->name)) > 1) $name = str_replace('.', '', strstr($categorie->name, '.')); else $name = $categorie->name; $this->_menu .= ''.$name.''; $childrens = Category::getChildren($id_category, $id_lang); if(count($childrens)) { $this->_menu .= '
      '; foreach($childrens as $children) $this->getCategory($children['id_category'], $id_lang); $this->_menu .= '
    '; } $this->_menu .= ''; } public function hooktop($param) { global $smarty; $this->makeMenu(); $smarty->assign('MENU_SEARCH', Configuration::get('MOD_BLOCKTOPMENU_SEARCH')); $smarty->assign('MENU', $this->_menu); $smarty->assign('this_path', $this->_path); return $this->display(__FILE__, 'blocktopmenu.tpl'); } } ?>