Jump to content
  • 0

Jak zdefiniować pozycję/wielkość zaczepu (hook'a)


vontrup86

Question

Cześć,

 

rzadko piszę na forum, ale tym razem dostaję białej gorączki, więc proszę Was serdecznie o pomoc. Nie mam wiedzy programistycznej, większość rzeczy związanych z Prestą 'wygooglowałem' sobie. Tak było z tworzeniem nowego hooka (zaczepu). Ok, wszystko fajnie, znalazłem tutorial i stworzyłem zaczep, wyświetla mi się ładnie w panelu administratora > moduły > pozycje, a konkretnie pod nazwą 'przedDisplayTop'.  Hook jest, mogę do niego podpiąć jakiś moduł, ale co z tego, jak nie ma tego nigdzie na stronie i nie ma co się dziwić, bo niby w jaki sposób ma być widoczne skoro nigdzie ani nie zdefiniowałem pozycji hooka, ani jego wielkości (jeśli w ogóle coś takiego się definiuje). I tu pojawia się moje pytanie, w jaki sposób mogę określić miejsce na stronie, w którym ma pojawić się stworzony przez mnie hook z modułem. Np, chciałbym by taki nowy hook ze sliderem był widoczny między panelem lewym i prawym, na górze strony, zaraz pod menu poziomym.

 

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0

Musisz odnaleźć właściwy plik tpl i w nim dodac {hook h='przedDisplayTop'} w twoim przypadku może to być plik header.tpl natomiast hook jest tak szeroki jak kontener w którym się znajduje.

Zrobiłem tak:

1. Najpierw w header.tpl wpisałem kod {hook h='przedDisplayTop'}.

2. Następnie w pliku homeslider.php (bo głównie chodzi mi o umieszczenie w odpowiednim hooku slidera) wpisałem kod:

public function hookprzedDisplayTop($params)

{
  return $this->hookDisplayHome($params); << nie bardzo wiem o co chodzi tutaj, postępowałem zgodnie ze wskazówkami z tej strony
}
3. Następnie w tym samym pliku umieściłem kod $this->registerHook('BeforeFooter') w miejscu 'public function install()'
 
Wynik jest taki, że hook jest widoczny w panelu administratora, mogę podpiąć do niego slider, ale nie jest to w ogóle widoczne na stronie. 
Wszystko byłoby wporządku gdybym np mógł zmienić szerokość kontenera hooka displayTopColumn, w którym domyślnie znajduje się homeslider. W tym momencie jest to cała szerokość strony, a chciałbym by po lewej stronie obok slidera pojawiło się menu boczne, które znajduje się w hooku displayLeftColumn, Pokazałem to na zdjęciu w załączniku.
post-1052329-0-05887600-1495021050_thumb.jpg
Link to comment
Share on other sites

  • 0

Zależy co tam masz w pliku header.tpl jeszcze. Jak to ma być tylko na głównej to możesz spróbować dać w index.tpl.

Dodałem w index {hook h='przedDisplayTop'}, ale nic to nie zmienia. Wydaje mi się, że najlepiej by było zmodyfikować hook displayTopColumn (ten w którym znajduje się slider) tak by nie zajmował całej szerokości strony, wtedy z lewej wskoczyłoby menu boczne. Ewentualnie zrobić nowy kontener na slider o odpowiedniej szerokości, ale nie wiem jak to można zrobić.

Link to comment
Share on other sites

  • 0

Prawdopodobnie w header.tpl ood displayTopColumn masz dopiero wywołanie lewej kolumny stąd trzeba dodać kontener poniżej tego. Dodanie tego w header.tpl spowoduje wywoływanie slidera na wszystkich podstronach a nie tylko na głównej.

Link to comment
Share on other sites

  • 0

Nie wskoczyłoby ponieważ znajduje sie w kontenerze o szerokości 100%, ty prawdopodobnie masz błędy w module dlatego usuń wszystkie zmiany z modułu, a w funkcji install zmień to:

 

if (parent::install() &&
			$this->registerHook('displayHeader') &&
			$this->registerHook('displayTopColumn') &&
			$this->registerHook('actionShopDataDuplication')
		)
zamień na to:

if (parent::install() &&
	$this->registerHook('displayHeader') &&
	$this->registerHook('displayTopColumn') &&
        $this->registerHook('displayPrzedTopColumn') &&
	$this->registerHook('actionShopDataDuplication')
		)
Później dodaj nowy hook:

 

public function hookdisplayPrzedTopColumn($params)
{
	return $this->hookdisplayTopColumn($params);
}
W pliku wywołaj go tak: {hook h="displayPrzedTopColumn"}

 

Po zmianach w plikach możesz spróbować przeinstalować moduł, ważne abyś się upewnił ze jest zaczepiony do odpowiedniego hooka.

Link to comment
Share on other sites

  • 0

Nie wskoczyłoby ponieważ znajduje sie w kontenerze o szerokości 100%, ty prawdopodobnie masz błędy w module dlatego usuń wszystkie zmiany z modułu, a w funkcji install zmień to:

 

if (parent::install() &&
			$this->registerHook('displayHeader') &&
			$this->registerHook('displayTopColumn') &&
			$this->registerHook('actionShopDataDuplication')
		)
zamień na to:

if (parent::install() &&
	$this->registerHook('displayHeader') &&
	$this->registerHook('displayTopColumn') &&
        $this->registerHook('displayPrzedTopColumn') &&
	$this->registerHook('actionShopDataDuplication')
		)
Później dodaj nowy hook:

 

public function hookdisplayPrzedTopColumn($params)
{
	return $this->hookdisplayTopColumn($params);
}
W pliku wywołaj go tak: {hook h="displayPrzedTopColumn"}

 

Po zmianach w plikach możesz spróbować przeinstalować moduł, ważne abyś się upewnił ze jest zaczepiony do odpowiedniego hooka.

 

 

Czy na pewno chodziło Ci o 'displayPrzedTopColumn'? Mój hook zwie się 'przedDisplayTop'

Link to comment
Share on other sites

  • 0

Poza tym już tak robiłem, opisałem to wyżej w kilku punktach i nic się nie zmienia. Pojawia się możliwość dodawania do hooka 'przedDisplayTop' slidera, ale sam hook ze sliderem nie jest widoczny na stronie. 

Link to comment
Share on other sites

  • 0

Jeszcze jedno, bo być może modyfikuje nieodpowiednie pliki.

 

Robię tak, w pliku homeslider.tpl:

 

if (parent::install() &&
    $this->registerHook('displayHeader') &&
    $this->registerHook('displayTopColumn') &&
$this->registerHook('displayPrzedTopColumn') &&
    $this->registerHook('actionShopDataDuplication')
        )
 

 

 

 

W tym samym pliku dodaję:

 

public function hookdisplayPrzedTopColumn($params)
{
    return $this->hookdisplayTopColumn($params);
}

 

 

Następnie w pliku header.php:

 

{hook h="displayPrzedTopColumn"}

 

O to chodzi tak? 

Link to comment
Share on other sites

  • 0

Coś nie działa, znaczy w ogóle nie ma w pozycjach nowego hooka, może jednak mam go dodać do bazy?

Nie wiem czy dobrze wklejam kod {hook h="displayPrzedTopColumn"} do pliku header.php. Wklejam go na końcu, mniej więcej tak jak poniżej:

 

Fragment kodu z pliku header.php:

 

...

<div class="columns-container">
<div id="columns" class="container">
{if $page_name !='index' && $page_name !='pagenotfound'}
{include file="$tpl_dir./breadcrumb.tpl"}
{/if}
 
<div id="slider_row" class="row">
{capture name='displayTopColumn'}{hook h='displayTopColumn'}{/capture}
{if $smarty.capture.displayTopColumn}
<div id="top_column" class="center_column col-xs-12 col-sm-12">{$smarty.capture.displayTopColumn}</div>
{/if}
</div>
 
<div class="row">
{if isset($left_column_size) && !empty($left_column_size)}
<div id="left_column" class="column col-xs-12 col-sm-{$left_column_size|intval}">{$HOOK_LEFT_COLUMN}</div>
{/if}
 
{if isset($left_column_size) && isset($right_column_size)}{assign var='cols' value=(12 - $left_column_size - $right_column_size)}{else}{assign var='cols' value=12}{/if}
<div id="center_column" class="center_column col-xs-12 col-sm-{$cols|intval}">
{/if}
 
{hook h="displayPrzedTopColumn"}
Link to comment
Share on other sites

  • 0

Obok {hook h="displayPrzedTopColumn"} napisz dowolny tekst i zobacz czy sie wyświetla na stronie. Jeśli nie widzisz w pozycjach nowego hooka i w opcji przemieszczania modułu nie widzisz go dla modułu slidera to musisz zresetować moduł do ustawień początkowych, opcja Wyczyść.

Link to comment
Share on other sites

  • 0

Ok, działa, musiałem dodać hooka do bazy, teraz slider pokazuje się w nowym hooku a obok niego po lewej stronie znajduje się menu, wielkie dzięki za pomoc :)

Jeszcze jedno pytanie, obok slidera były dwa banerki, fajnie by było gdyby one tam pozostały. Problem w tym, że one są tak jak poprzednio slider  w 'displayTopColumn' no i teraz pojawiają się powyżej slidera tak jak na załączonym obrazku. Do tego napis NOWOŚCI pojechał na górę, obok slidera.

 

post-1052329-0-90623200-1495039505_thumb.jpg

Link to comment
Share on other sites

  • 0

Offtopic:

 

Zrób sobie również kopie szablonu ponieważ aktualizacja presty nadpisuje wszystkie natywne moduły i szablon, moduły możesz spróbować nadpisać przez override a sam szablon sugeruje zastapić jego kopią pod zmieniona nazwą wtedy aktualizacja go nie ruszy. Więcej nie będę się rozpisywał na ten temat ponieważ nie jest on tematem tego wątku.

  • Like 1
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...