Jump to content
  • 0

Dynamiczne doładowywanie submenu - presta 1.7


wyspazwierzat

Question

Cześć,
Mam taki problem. Chciałbym aby elementy rozwijane (submenu) górnego menu były doładowywane dynamicznie dopiero po najechaniu myszą na dowolny element górnego menu.

Kod za to odpowiedzialny znajduje się w pliku ps_mainmenu.tpl, linia 25-29

{if $node.children|count}
					<div {if $depth === 0} class="popover sub-menu js-sub-menu collapse"{else} class="collapse"{/if} id="top_sub_menu_{$_expand_id}">
						{menu nodes=$node.children depth=$node.depth parent=$node}
					  </div>
              {/if}

Zawartość powyższego div'a chciałbym doładowywać dynamicznie, tak aby przy załadowaniu się strony nie ładowały się odnośniki z submenu. Oczywiście nie chodzi o ukrycie tego w .css itp., tylko żeby tych odnośników nie było w źródle strony.

Próbowałem takiego rozwiązania (nie działa):
1. Wyrzucenie 

{menu nodes=$node.children depth=$node.depth parent=$node}

do nowego pliku .tpl w tym samym folderze submenu.tpl

2. Utworzenie pliku submenu.php w tym samym folderze z zawartością

<?php
require_once("./vendor/smarty/smarty/libs/Smarty.class.php");
$smarty = new Smarty;
$smarty->display("./themes/classic/modules/ps_mainmenu/submenu.tpl");
?>

3. Edycja ps_mainmenu.tpl

              {if $node.children|count}
					<div {if $depth === 0} class="popover sub-menu js-sub-menu collapse"{else} class="collapse"{/if} id="top_sub_menu_{$_expand_id}">
						<span id="sf-submenu"></span>
						<script> 
							$(document).ready(function() {
								$('.dropdown-item').click(function() {
										$('#sf-submenu').load('submenu.php', function() {
											$(this).fadeIn("slow");
										});
								});
							});
						</script>
					  </div>
              {/if}

Czy ktoś ma pomysł jak zrobić takie cudo? Nie udało mi się niestety znaleźć innego rozwiązania. Templatka oczywiście standardowa presty 1.7

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Jeżeli chciałbyś to dynamicznie ładować, musiałbyś utworzyć sobie specjalny controller oraz zapytanie ajaxowe, które będzie ładowało submenu po hoverze. Trochę roboty przy tym będzie, ale mega skomplikowane to nie jest.

Na pewno controller modułu musiałby zawierać odpowiednią zwrotkę do ajaxa, która po prostu zwróci Ci tablicę z elementami, którą obrabiasz sobie i wyrzucasz na front-end, tylko pytanie dalej, czy ma działać to w dwie strony - czyli ładujemy po najechaniu, a po zjechaniu usuwamy te elementy?

+ tak z ciekawości, na co takie rozwiązanie? 

Link to comment
Share on other sites

  • 0

Dzięki za odpowiedź :) Choć miałem nadzieję, że uda się to ogarnąć jakimś stosunkowo łatwym sposobem. O tworzeniu controllerów nie mam niestety pojęcia. 

Jeśli byłbyś w stanie wycenić wdrożenie takiego rozwiązania, to prosiłbym o info na PW.

Po co to? Chce ograniczyć ilość linków wewnętrznych w sklepie, ale nie chce pozbawiać użytkowników łatwej nawigacji.

Link to comment
Share on other sites

  • 0
Dnia 14.11.2020 o 12:24 PM, wyspazwierzat napisał:

Dzięki za odpowiedź :) Choć miałem nadzieję, że uda się to ogarnąć jakimś stosunkowo łatwym sposobem. O tworzeniu controllerów nie mam niestety pojęcia. 

Jeśli byłbyś w stanie wycenić wdrożenie takiego rozwiązania, to prosiłbym o info na PW.

Po co to? Chce ograniczyć ilość linków wewnętrznych w sklepie, ale nie chce pozbawiać użytkowników łatwej nawigacji.

Napisz proszę na [email protected] - tam będzie nam się najłatwiej korespondować, tutaj czasem nie zaglądam parę dni. 

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...