Jump to content

[Solved] Modify Top horizontal menu


Recommended Posts

Hello everyone, I use PS 1.4.8.2 so I have next problem: my Top horizontal menu designed only for default language, and in BO it looks like on image 1.post-387724-0-65491700-1427715022_thumb.jpg

Field "Label" designed only for default language, and when I change to another language on the website, links are disappear. Ideally, I need like on image 2. post-387724-0-91750700-1427715542_thumb.jpg

I tried to do on the similarity of the other modules. All what I got is on image 3 post-387724-0-65958800-1427716422_thumb.jpg

Or can someone tell me how to make that links are not lost when switching to another language?

 

Really need help

 

Here is code:

 

<?php

include _PS_MODULE_DIR_.'blocktopmenu2prestastylecs/menutoplinks.class.prestastylecs.php';

class blocktopmenu2PrestastyleCS extends Module

{

private $_menu = '';

private $_html = '';

public function __construct()

{

$this->name = 'blocktopmenu2prestastylecs';

$this->tab = 'Julien Breux Developpement';

$this->version = 1.3;

parent::__construct();

$this->displayName = $this->l('[Clean & Simple] 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', '0') ||

!$this->installDB())

return false;

return true;

}

 

public function installDb()

{

Db::getInstance()->ExecuteS('

CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'

smenutop` (

`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()->ExecuteS('

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()->ExecuteS('DROP TABLE `'._DB_PREFIX_.'linksmenutop`');

Db::getInstance()->ExecuteS('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

{

MenuTopLinksPrestastyle::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);

MenuTopLinksPrestastyle::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 .= '

<fieldset>

<legend><img src="'.$this->_path.'logo.gif" alt="" title="" />'.$this->l('Settings').'</legend>

<form action="'.$_SERVER['REQUEST_URI'].'" method="post" id="form">

<div style="display: none">

<label>'.$this->l('Items').'</label>

<div class="margin-form">

<input type="text" name="items" id="itemsInput" value="'.Configuration::get('MOD_BLOCKTOPMENU_ITEMS').'" size="70" />

</div>

</div>

 

<div class="clear"> </div>

<table style="margin-left: 130px;">

<tbody>

<tr>

<td>

<select multiple="multiple" id="items" style="width: 300px; height: 160px;">';

$this->makeMenuOption();

$this->_html .= '</select><br/>

<br/>

<a href="#" id="removeItem" style="border: 1px solid rgb(170, 170, 170); margin: 2px; padding: 2px; text-align: center; display: block; text-decoration: none; background-color: rgb(250, 250, 250); color: rgb(18, 52, 86);">'.$this->l('Remove').' >></a>

</td>

<td style="padding-left: 20px;">

<select multiple="multiple" id="availableItems" style="width: 300px; height: 160px;">';

// BEGIN CMS

$this->_html .= '<optgroup label="'.$this->l('CMS').'">';

$_cms = CMS::listCms($cookie->id_lang);

foreach($_cms as $cms)

$this->_html .= '<option value="CMS'.$cms['id_cms'].'" style="margin-left:10px;">'.$cms['meta_title'].'</option>';

$this->_html .= '</optgroup>';

// END CMS

// BEGIN SUPPLIER

$this->_html .= '<optgroup label="'.$this->l('Supplier').'">';

$suppliers = Supplier::getSuppliers(false, $cookie->id_lang);

foreach($suppliers as $supplier)

$this->_html .= '<option value="SUP'.$supplier['id_supplier'].'" style="margin-left:10px;">'.$supplier['name'].'</option>';

$this->_html .= '</optgroup>';

// END SUPPLIER

// BEGIN Manufacturer

$this->_html .= '<optgroup label="'.$this->l('Manufacturer').'">';

$manufacturers = Manufacturer::getManufacturers(false, $cookie->id_lang);

foreach($manufacturers as $manufacturer)

$this->_html .= '<option value="MAN'.$manufacturer['id_manufacturer'].'" style="margin-left:10px;">'.$manufacturer['name'].'</option>';

$this->_html .= '</optgroup>';

// END Manufacturer

// BEGIN Categories

$this->_html .= '<optgroup label="'.$this->l('Categories').'">';

$this->getCategoryOption(1, $cookie->id_lang);

$this->_html .= '</optgroup>';

// END Categories

// BEGIN Products

$this->_html .= '<optgroup label="'.$this->l('Products').'">';

$this->_html .= '<option value="PRODUCT" style="margin-left:10px;font-style:italic">'.$this->l('Choose ID product').'</option>';

$this->_html .= '</optgroup>';

// END Products

// BEGIN Menu Top Links

$this->_html .= '<optgroup label="'.$this->l('Menu Top Links').'">';

$links = MenuTopLinksPrestastyle::gets($cookie->id_lang);

foreach($links as $link)

$this->_html .= '<option value="LNK'.$link['id_link'].'" style="margin-left:10px;">'.$link['label'].'</option>';

$this->_html .= '</optgroup>';

// END Menu Top Links

$this->_html .= '</select><br />

<br />

<a href="#" id="addItem" style="border: 1px solid rgb(170, 170, 170); margin: 2px; padding: 2px; text-align: center; display: block; text-decoration: none; background-color: rgb(250, 250, 250); color: rgb(18, 52, 86);"><< '.$this->l('Add').'</a>

</td>

</tr>

</tbody>

</table>

<div class="clear"> </div>

<script type="text/javascript">

$(document).ready(function(){

$("#addItem").click(add);

$("#availableItems").dblclick(add);

$("#removeItem").click(remove);

$("#items").dblclick(remove);

function add()

{

$("#availableItems option:selected").each(function(i){

var val = $(this).val();

var text = $(this).text();

if(val == "PRODUCT")

{

val = prompt("'.$this->l('Set ID product').'");

if(val == null || val == "" || isNaN(val))

return;

text = "'.$this->l('Product ID').' "+val;

val = "PRD"+val;

}

$("#items").append("<option value=\""+val+"\">"+text+"</option>");

});

serialize();

return false;

}

function remove()

{

$("#items option:selected").each(function(i){

$(this).remove();

});

serialize();

return false;

}

function serialize()

{

var options = "";

$("#items option").each(function(i){

options += $(this).val()+",";

});

$("#itemsInput").val(options.substr(0, options.length - 1));

}

});

</script>

<

 

for="s">'.$this->l('Search Bar').'</label>

<div class="margin-form">

<input type="checkbox" name="search" id="s" value="1"'.((Configuration::get('MOD_BLOCKTOPMENU_SEARCH')) ? ' checked=""': '').'/>

</div>

<p class="center">

<input type="submit" name="submitBlocktopmenu" value="'.$this->l(' Save ').'" class="button" />

</p>

</form>

</fieldset><br />';

$defaultFormLanguage = intval(Configuration::get('PS_LANG_DEFAULT'));

$languages = Language::getLanguages();

$iso = Language::getIsoById($defaultFormLanguage);

$divLangName = 'link_label';

$this->_html .= '

<fieldset>

<legend><img src="../img/admin/add.gif" alt="" title="" />'.$this->l('Add Menu Top Link').'</legend>

<form action="'.$_SERVER['REQUEST_URI'].'" method="post" id="form">

 

<label>'.$this->l('Label').'</label>

<div class="margin-form">';

foreach ($languages as $language)

{

$this->_html .= '

<div id="link_label_'.$language['id_lang'].'" style="display: '.($language['id_lang'] == $defaultFormLanguage ? 'block' : 'none').';float: left;">

<input type="text" name="link_label_'.$language['id_lang'].'" id="label_'.$language['id_lang'].'" size="70" value="">

</div>';

 

}

$this->_html .= $this->displayFlags($this->_languages, $this->_defaultFormLanguage, $divLangName, 'link_label', true);

$this->_html .= '</div><p class="clear"> </p>

<label>'.$this->l('Link').'</label>

<div class="margin-form">

<input type="text" name="link" value="" size="70" />

</div>

<label>'.$this->l('New Window').'</label>

<div class="margin-form">

<input type="checkbox" name="new_window" value="1" />

</div>

<p class="center">

<input type="submit" name="submitBlocktopmenuLinks" value="'.$this->l(' Add ').'" class="button" />

</p>

</form>

</fieldset><br />';

 

$this->_html .= '

<fieldset>

<legend><img src="../img/admin/details.gif" alt="" title="" />'.$this->l('List Menu Top Link').'</legend>

<table style="width:100%;">

<thead>

<tr>

<th>'.$this->l('Id Link').'</th>

<th>'.$this->l('Label').'</th>

<th>'.$this->l('Link').'</th>

<th>'.$this->l('New Window').'</th>

<th>'.$this->l('Action').'</th>

</tr>

</thead>

<tbody>';

$links = MenuTopLinksPrestastyle::gets($cookie->id_lang);

foreach($links as $link)

{

$this->_html .= '

<tr>

<td>'.$link['id_link'].'</td>

<td>'.$link['label'].'</td>

<td>'.$link['link'].'</td>

<td>'.(($link['new_window']) ? $this->l('Yes') : $this->l('No')).'</td>

<td>

<form action="'.$_SERVER['REQUEST_URI'].'" method="post">

<input type="hidden" name="id_link" value="'.$link['id_link'].'" />

<input type="submit" name="submitBlocktopmenuRemove" value="'.$this->l('Remove').'" class="button" />

</form>

</td>

</tr>';

}

$this->_html .= '</tbody>

</table>

</fieldset>';

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 .= '<option value="PRD'.$id.'">'.$product->name.'</option>'.PHP_EOL;

break;

case'CMS':

$cms = CMS::getLinks($cookie->id_lang, array($id));

if(count($cms))

$this->_html .= '<option value="CMS'.$id.'">'.$cms[0]['meta_title'].'</option>'.PHP_EOL;

break;

case'MAN':

$manufacturer = new Manufacturer($id, $cookie->id_lang);

if(!is_null($manufacturer->id))

$this->_html .= '<option value="MAN'.$id.'">'.$manufacturer->name.'</option>'.PHP_EOL;

break;

case'SUP':

$supplier = new Supplier($id, $cookie->id_lang);

if(!is_null($supplier->id))

$this->_html .= '<option value="SUP'.$id.'">'.$supplier->name.'</option>'.PHP_EOL;

break;

case'LNK':

$link = MenuTopLinksPrestastyle::get($id, $cookie->id_lang);

if(count($link))

$this->_html .= '<option value="LNK'.$id.'">'.$link[0]['label'].'</option>'.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 .= '<li'.$selected.'><a href="'.$product->getLink().'">'.$product->name.'</a></li>'.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 .= '<li'.$selected.'><a href="'.$cms[0]['link'].'">'.$cms[0]['meta_title'].'</a></li>'.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 .= '<li'.$selected.'><a href="'.$link->getManufacturerLink($id, $manufacturer->link_rewrite).'">'.$manufacturer->name.'</a></li>'.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 .= '<li'.$selected.'><a href="'.$link->getSupplierLink($id, $supplier->link_rewrite).'">'.$supplier->name.'</a></li>'.PHP_EOL;

}

break;

case'LNK':

$link = MenuTopLinksPrestastyle::get($id, $cookie->id_lang);

if(count($link))

$this->_menu .= '<li><a href="'.$link[0]['link'].'"'.(($link[0]['new_window']) ? ' target="_blank"': '').'>'.$link[0]['label'].'</a></li>'.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 .= '<option value="CAT'.$categorie->id.'" style="margin-left:'.(($children) ? round(15+(15*(int)$categorie->level_depth)) : 0).'px;">'.$name.'</option>';

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 .= '<li'.$selected.'>';

if(count(explode('.', $categorie->name)) > 1)

$name = str_replace('.', '', strstr($categorie->name, '.'));

else

$name = $categorie->name;

$this->_menu .= '<a href="'.$categorie->getLink().'">'.$name.'</a>';

$childrens = Category::getChildren($id_category, $id_lang);

if(count($childrens))

{

$this->_menu .= '<ul>';

foreach($childrens as $children)

$this->getCategory($children['id_category'], $id_lang);

$this->_menu .= '</ul>';

}

$this->_menu .= '</li>';

}

 

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');

}

}

?>

Edited by elnur (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...