Jump to content

Blocktopmenu - dodatkowe linki po prawej stronie


Recommended Posts

Czy jest możliwość dodania linków do górnego menu z tym że po prawej stronie? Dodam, że tych po lewej wcale nie chcę się pozbywać :) Menu jest rozciągnięte na 100% width, dlatego miejsca jest dużo, a tak mi się jakoś upodobało, by część linków była po lewej a część - po prawej :)

Link to comment
Share on other sites

jest taka możliwość ale wymaga troche kombinacji, przede wszystkim trzeba by bylo nadać własne ID elementom <LI> (w kodzie php modułu) następnie dla tych ID utworzyć style css z float:right;

 

jakie dokładnie elementy chcesz umieścić po prawej? (ich rodzaj)

Link to comment
Share on other sites

To jest przydatne np. w przypadku używania modułów (np. jakiś moduł galerii, księgi gości czy jakieś inne tego typu ficzery) które tworzą własne podstrony. Wówczas możesz taki moduł podlinkować właśnie za pomocą tego narzędzia. Nic nie stoi na przeszkodzie aby dodać zewnętrze linki np. do firmowego bloga, jakiegoś profilu social media itp.

Generalnie to możliwości wykorzystania tej funkcji jest całe mnóstwo...

 

Ale my tu nie o tym ;)

 

Ok, to w takim razie niezbędne jest wyedytowanie kodu modułu, a dokładniej rzecz ujmując funkcji odpowiedzialnej za generowanie linków CMS. oto i ona:

 

case 'CMS':
$selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
$cms = CMS::getLinks((int)$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 'CMS_CAT':
$category = new CMSCategory((int)$id, (int)$id_lang);
if (count($category))
{
$this->_menu .= '<li id="linkcms_'.(int)$id.'"><a href="'.$category->getLink().'">'.$category->name.'</a>';
$this->getCMSMenuItems($category->id);
$this->_menu .= '</li>'.PHP_EOL;
}
break;

 

zamieniamy powyższy kod na:

case 'CMS':
 $selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
 $cms = CMS::getLinks((int)$id_lang, array($id));
 if (count($cms))
  $this->_menu .= '<li'.$selected.' id="linkcms_'.(int)$id_cms.'"><a href="'.$cms[0]['link'].'">'.$cms[0]['meta_title'].'</a></li>'.PHP_EOL;
 break;
   case 'CMS_CAT':
 $category = new CMSCategory((int)$id, (int)$id_lang);
 if (count($category))
 {
  $this->_menu .= '<li id="linkcms_'.(int)$id.'"><a href="'.$category->getLink().'">'.$category->name.'</a>';
  $this->getCMSMenuItems($category->id);
  $this->_menu .= '</li>'.PHP_EOL;
 }
 break;

 

i odtąd nasze poziome menu i strony CMS umieszczone w menu będą miały własny id="linkcms_ID"; gdzie ID jest numerem identyfikacyjnym.

 

teraz możemy utworzyć style css, np. w pliku global.css:

 

#linkcms_0 {float:right;}

#linkcms_1 {float:right;}

 

 

efekt:

DQESuYi.png

  • Like 1
Link to comment
Share on other sites

Dzięki wielkie. Odwalasz świetną robotę na forum, rzeczywiście istna "legenda" PrestaShop :)

 

A jeśli chciałbym dodać link "ręczny", to domyślnie będzie się wstawiać na lewą stronę menu, tak? Nie chciałbym Cię już zamęczać, by to też konwertować na prawo... chyba że znasz już rozwiązanie.

Link to comment
Share on other sites

nie, w tym przypadku jest konieczna kolejna modyfikacja, która będzie dotyczyła właśnie tych linków dodawanych "ręcznie"

w tym przypadku konieczna będzie kolejna modyfikacja.

 

w blocktopmenu.php masz taki kod:

case 'LNK':
 $link = MenuTopLinks::get((int)$id, (int)$id_lang, (int)$id_shop);
 if (count($link))
 {
  if (!isset($link[0]['label']) || ($link[0]['label'] == ''))
  {
   $default_language = Configuration::get('PS_LANG_DEFAULT');
   $link = MenuTopLinks::get($link[0]['id_linksmenutop'], $default_language, (int)Shop::getContextShopID());
  }
  $this->_menu .= '<li><a href="'.$link[0]['link'].'"'.(($link[0]['new_window']) ? ' target="_blank"': '').'>'.$link[0]['label'].'</a></li>'.PHP_EOL;
 }
 break;

 

linię:

$this->_menu .= '<li><a href="'.$link[0]['link'].'"'.(($link[0]['new_window']) ? ' target="_blank"': '').'>'.$link[0]['label'].'</a></li>'.PHP_EOL;

zmieniamy na:

$this->_menu .= '<li id="zwyklylink'.$link[0]['id_linksmenutop'].'"><a href="'.$link[0]['link'].'"'.(($link[0]['new_window']) ? ' target="_blank"': '').' >'.$link[0]['label'].'</a></li>'.PHP_EOL;

 

 

następnie używamy styli css:

#zwyklylink0 {float:right;}

#zwyklylink2 {float:right;}

#zwyklylink3 {float:right;}

...

itd :)

  • Like 1
Link to comment
Share on other sites

case 'CMS':
$selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
$cms = CMS::getLinks((int)$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 'CMS_CAT':
$category = new CMSCategory((int)$id, (int)$id_lang);
if (count($category))
{
$this->_menu .= '<li id="linkcms_'.(int)$id.'"><a href="'.$category->getLink().'">'.$category->name.'</a>';
$this->getCMSMenuItems($category->id);
$this->_menu .= '</li>'.PHP_EOL;
}
break;

 

zamieniamy powyższy kod na:

case 'CMS':
 $selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
 $cms = CMS::getLinks((int)$id_lang, array($id));
 if (count($cms))
  $this->_menu .= '<li'.$selected.' id="linkcms_'.(int)$id_cms.'"><a href="'.$cms[0]['link'].'">'.$cms[0]['meta_title'].'</a></li>'.PHP_EOL;
 break;
case 'CMS_CAT':
 $category = new CMSCategory((int)$id, (int)$id_lang);
 if (count($category))
 {
  $this->_menu .= '<li id="linkcms_'.(int)$id.'"><a href="'.$category->getLink().'">'.$category->name.'</a>';
  $this->getCMSMenuItems($category->id);
  $this->_menu .= '</li>'.PHP_EOL;
 }
 break;

 

i odtąd nasze poziome menu i strony CMS umieszczone w menu będą miały własny id="linkcms_ID"; gdzie ID jest numerem identyfikacyjnym.

 

teraz możemy utworzyć style css, np. w pliku global.css:

 

#linkcms_0 {float:right;}

#linkcms_1 {float:right;}

 

 

Jest problem:

 

<ul class="sf-menu clearfix">
<li ><a href="http://bamboocraftsman.cn/shop/index.php">Home</a>
 <ul><li ><a href="http://bamboocraftsman.cn/shop/index.php?id_category=2&controller=category&id_lang=1">iPods</a></li>
 <li ><a href="http://bamboocraftsman.cn/shop/index.php?id_category=3&controller=category&id_lang=1">Accessories</a></li>
 <li ><a href="http://bamboocraftsman.cn/shop/index.php?id_category=4&controller=category&id_lang=1">Laptops</a></li></ul></li>
<li id="linkcms_0"><a href="http://bamboocraftsman.cn/shop/index.php?id_cms=1&controller=cms&id_lang=1">Delivery</a></li>
<li id="linkcms_0"><a href="http://bamboocraftsman.cn/shop/index.php?id_cms=2&controller=cms&id_lang=1">Legal Notice</a></li>
<li><a href="http://bamboocraftsman.cn/shop/index.php?id_product=1&controller=product&id_lang=1">iPod Nano</a></li>
</ul>

 

Z linków CMS pojawiły się id, ale dwa takie same - linkcms_0

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

  • 5 months later...

obiekt ten nie ma nadanej klasy ani id, niemożliwe jest nadanie mu własnych styli, teoretycznie ;)

można to objeść gdyż jest on pierwszym elementem na liście, w związku z tym można zastosować style first-child
 

.sf-menu li:first-child a{
background:red!important;
color:black!important;
}

pamietaj, że działają one wyłacznie do pierwszego elementu na liście

Link to comment
Share on other sites

Ale to nie można jakoś tak zmodyfikować styli tego fragmentu:

 

#linkcms_0 {float:right;}
#linkcms_1 {float:right;}

 

żeby linki miały różne kolory? Myślałem że po zmianie kodu w bloktopmenu.php linki te mają właśnie nadane owe ID?

Link to comment
Share on other sites

Tam wyżej był opisany ten problem i pisałeś że kod jest poprawiony ale wkleiłem ten do blocktopmenu.php





case 'CMS':
	 $selected = ($this->page_name == 'cms' && (Tools::getValue('id_cms') == $id)) ? ' class="sfHover"' : '';
	 $cms = CMS::getLinks((int)$id_lang, array($id));
	 if (count($cms))
	  $this->_menu .= '<li'.$selected.' id="linkcms_'.(int)$id_cms.'"><a href="'.$cms[0]['link'].'">'.$cms[0]['meta_title'].'</a></li>'.PHP_EOL;
	 break;
    case 'CMS_CAT':
	 $category = new CMSCategory((int)$id, (int)$id_lang);
	 if (count($category))
	 {
	  $this->_menu .= '<li id="linkcms_'.(int)$id.'"><a href="'.$category->getLink().'">'.$category->name.'</a>';
	  $this->getCMSMenuItems($category->id);
	  $this->_menu .= '</li>'.PHP_EOL;
	 }
	 break;

i problem podwójnego #linkcms_0 nadal występuje (zakładka Aktualności i konkurs). Jak to poprawić?

 

I mam jeszcze problem z zakładką Nasza oferta ale w zasadzie kolor mógłby zostać.  :)

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

  • 3 weeks later...
×
×
  • Create New...