Jump to content

Pytanie o architekturę, smarty, hook


work.steve

Recommended Posts

Witam 

Nie rozumiem jak dokładnie działa Presta 1.6. Umyka mi kilka elementów których nie moge zlokalizować. 

Chce przytoczyć jeden przykład resztę mam nadzieje bede ktok po kroku rozpracowywał ręcznie analogicznie do tego 

Aha jeszcze jedno, generalnie radze Sobie z całym zakresem potrzebnym - Tylko to Smarty jest troche nowością no i słaby z JS`ów jestem ale to sie nie przyda akurat tu 

do sedna 
- presta 1.6 - szablon: bootstrap_defaoult

Co bym marzył Sobie zrobić ... 

Ikonki mediów społecznościowych dać koło Loga i potem je edytować... a wiec tak 

w szablonie w modułach mam bloksocial.tpl <- ten plik rozumiem 
mam też plik footer.tpl w nim jest coś takiego jak zaczem $HOOK_FOOTER <- czyli wyświetlenie całej stopki 


i teraz ja chce z tego $hook_footer wyrwać tylko bloksocial i to przenieść do $HOOK_TOP najlepiej w miejsce gdzie teraz jest blokserch_top.tpl ...

Nie da sie tego amienić z poziomu zmiany pozycji w panelu admina


Ale tak podsumowująć, gdzie dokładnie leży mój brak --- Otóż xDD

w którym miejscu, jaki plik jest odpowiedzialny ze $HOOK_FOOTER wyświetla w Sobie pare innych modółów dla przykładu bloksocial.tpl newsletter.tpl itd, itd

Jak przemieszczać te moduły miedzy tymi zaczepami 

Dzieki za odpowiedz z góry, odnosze wrażenie ze jest to moja ostatnia niewiadoma w Presta 

Pozdrawiam 

Link to comment
Share on other sites

Moduły posiadają hooki, ich obsługa jest napisana w głównych kontrolerach modułów. Jeśli moduł posiada napisaną obsługę danego hooka to można go tam przenieść, jeśli nie to należy dopisać taką obsługę.

 

Można również wywoływać tylko konkretne moduły z danego hooka dodając mod='nazwa_modulu'.

Link to comment
Share on other sites

Dzieki za Odpowiedz, ale walcze z Tym tydzień i tak szczerze mówiąc wiem o tym co powiedziałeś w pierwszej części ... o wywołaniu jednego modułu nie wiedziałem

 

Tylko, wytłumasz mi tak łopatologicznie, jedna konkretna ścieżka ... gdzie jest kontroler modułu bloksocial i jak wygląda linijka kodu która pozwala go przyczepić do $HOOK_FOOTER (bo analogicznie bedzie wyglądała dla $HOOK_HEADER itp ?? )

 

Dzieki 

Edited by work.steve (see edit history)
Link to comment
Share on other sites

Kontroler modułu bloksocial jest w modules/blocksocial/ a w nim w funkcji install masz rejestracje hooka:

 

$this->registerHook('displayFooter'));
i to co ma wyświetlać:

 

public function hookDisplayFooter()
	{
		if (!$this->isCached('blocksocial.tpl', $this->getCacheId()))
			$this->smarty->assign(array(
				'facebook_url' => Configuration::get('BLOCKSOCIAL_FACEBOOK'),
				'twitter_url' => Configuration::get('BLOCKSOCIAL_TWITTER'),
				'rss_url' => Configuration::get('BLOCKSOCIAL_RSS'),
				'youtube_url' => Configuration::get('BLOCKSOCIAL_YOUTUBE'),
				'google_plus_url' => Configuration::get('BLOCKSOCIAL_GOOGLE_PLUS'),
				'pinterest_url' => Configuration::get('BLOCKSOCIAL_PINTEREST'),
				'vimeo_url' => Configuration::get('BLOCKSOCIAL_VIMEO'),
				'instagram_url' => Configuration::get('BLOCKSOCIAL_INSTAGRAM'),
			));

		return $this->display(__FILE__, 'blocksocial.tpl', $this->getCacheId());
	}
Link to comment
Share on other sites

Dzięki bardzo, to duża podpowiedz dla mnie, mam nadzieje ze jeszcze kiedyś mi sie przyda tyle ze...

U mnie w kontrolerze okazało sie ze mam i displayHeader i displayFooter, ale w panelu administratora nie moge przenieść tego elementu pod inny zaczep, komunikat ze wszystko ok ale nie ma żadnych zmian < -- to problem 

... ale mam jeszcze p[ytanie, przy eksportowaniu szablonu i importowaniu na innej Preście kontrolery zostaną nadpisane? jeżeli nie to jest gdzieś miejsce na kopie tego kontrolera zeby wyeksportowała sie jego nowa werrsja??

Link to comment
Share on other sites

U mnie w kontrolerze okazało sie ze mam i displayHeader i displayFooter, ale w panelu administratora nie moge przenieść tego elementu pod inny zaczep, komunikat ze wszystko ok ale nie ma żadnych zmian < -- to problem 

 

Pod inny zaczep czyli jaki?

 

 

przy eksportowaniu szablonu i importowaniu na innej Preście kontrolery zostaną nadpisane?

 

Kontrolery modułów tak o ile szablon zawiera te moduły, w innym wypadku nie.

Link to comment
Share on other sites

1. Dla bloku blokSocial - nazwany w Panelu administracyjnym Blok Społecznościowy mam do wyboru

displayFooter

Header (pages html head section) < - Po przeniesieniu w to miejsce nie wyświetla sie 


Edytar połączony przez ftp nie wywalił też zadnej zmiany w pliku header.tpl < -  na moja logike powinny być tu jakieś zmiany ... czy Nie ??

Edited by work.steve (see edit history)
Link to comment
Share on other sites

Nie wiem czy dobrze rozumiem pytanie, jaki hook??

Jeżeli chodzi o tego Header to w moim przypadku 

- Wyświetla Logo 
- Wyszukiwarke (która po odczepieniu nie znikneła, tylko jakby straciła kontakt z css bo nie jest ostylowana jak kiedyś, ale szczętki po niej zostały)
- Koszyk
- Menu 

w pozycjach w PA jest jeszcze 
- Wspominany Blok społecznościowy który sie nie wyświetla
- Dodatkowo to samo zrobiłem z Newsletterem który też sie nie wyświetla


PS. W footer sie wyświetlają, przeniose do header nie ma ich nigdzie, przy badaniu kodu strony nie ma po nich sladu

Link to comment
Share on other sites

Nie czytasz ze zrozumieniem tego co piszę... a pisałem co robi hook footer więc analogicznie należy sprawdzić co robi header.

 

Generalnie hook dispalyHeader służy do ładowania rzeczy w sekcji <head>, jeśli masz podstawy html wiesz do czego służy owa sekcja, a ty chcesz wyświetlić coś w sekcji <body>.

Link to comment
Share on other sites

Pogubiłem sie strasznie ... znam HTML 

Może zacznijmy od początku. powiedz gdzie myśle dobrze, a gdzie sie gumie 

1. W Szablonie mamy dwa plikiheader.tpl i footer.tpl - te pliki generalnie tworzą nam szkielet strony, co dziwne całej strony (przy pierwszym kontakcie szukałem trzeciego pliku pomiędzy)

2. Generalnie te dwa pliki szablonów dają nanm:
*** Sekcje Head o której przed chwilą wspomniałeś, tam są wszystkie meta dane namiary na css, scripty itp < - Tu nie chce nic dodawać bo wiem ze to sie nie wyświerla

*** Dalej Mamy Całą sekcje BODY w której jest div="page" W nim class="header-container" a w nim Sekcja  <HEADER id="header" ... i to tutaj jest logo, nawigacja itp, i tez tutaj chce dodać ikony mediów społecznościowych, 


*** Dalej column_container itp itp - to nie wżne

 

3. Kontroler do Bloku mediów Społecznościowych wyglada tak i co najważniejsze nie zmieniłem w nim ani literki - wiec dlaczego sie działają te media w displayHeader

dodam jeszcze ze wszystko jest na czystej, nowo postawionej preście bo juz stwierdziłem, że może ja cos gdzieś namieszałem 

Ale nie, czysta Presta, pierwsze zadanie, Przenieść Blok społecznościowy tam gdzie koszyk itp - Nie widać go :[spam-filter]{

if (!defined('_CAN_LOAD_FILES_'))
	exit;

class blocksocial extends Module
{
	public function __construct()
	{
		$this->name = 'blocksocial';
		$this->tab = 'front_office_features';
		$this->version = '1.2.2';
		$this->author = 'PrestaShop';

		$this->bootstrap = true;
		parent::__construct();

		$this->displayName = $this->l('Social networking block');
		$this->description = $this->l('Allows you to add information about your brand\'s social networking accounts.');
		$this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.6.99.99');
	}

	public function install()
	{
		return (parent::install() AND Configuration::updateValue('BLOCKSOCIAL_FACEBOOK', '') &&
			Configuration::updateValue('BLOCKSOCIAL_TWITTER', '') &&
			Configuration::updateValue('BLOCKSOCIAL_RSS', '') &&
			Configuration::updateValue('BLOCKSOCIAL_YOUTUBE', '') &&
			Configuration::updateValue('BLOCKSOCIAL_GOOGLE_PLUS', '') &&
			Configuration::updateValue('BLOCKSOCIAL_PINTEREST', '') &&
			Configuration::updateValue('BLOCKSOCIAL_VIMEO', '') &&
			Configuration::updateValue('BLOCKSOCIAL_INSTAGRAM', '') &&
			$this->registerHook('displayHeader') &&
			$this->registerHook('displayFooter'));
	}

	public function uninstall()
	{
		//Delete configuration
		return (Configuration::deleteByName('BLOCKSOCIAL_FACEBOOK') AND
			Configuration::deleteByName('BLOCKSOCIAL_TWITTER') AND
			Configuration::deleteByName('BLOCKSOCIAL_RSS') AND
			Configuration::deleteByName('BLOCKSOCIAL_YOUTUBE') AND
			Configuration::deleteByName('BLOCKSOCIAL_GOOGLE_PLUS') AND
			Configuration::deleteByName('BLOCKSOCIAL_PINTEREST') AND
			Configuration::deleteByName('BLOCKSOCIAL_VIMEO') AND
			Configuration::deleteByName('BLOCKSOCIAL_INSTAGRAM') AND
			parent::uninstall());
	}

	public function getContent()
	{
		// If we try to update the settings
		$output = '';
		if (Tools::isSubmit('submitModule'))
		{
			Configuration::updateValue('BLOCKSOCIAL_FACEBOOK', Tools::getValue('blocksocial_facebook', ''));
			Configuration::updateValue('BLOCKSOCIAL_TWITTER', Tools::getValue('blocksocial_twitter', ''));
			Configuration::updateValue('BLOCKSOCIAL_RSS', Tools::getValue('blocksocial_rss', ''));
			Configuration::updateValue('BLOCKSOCIAL_YOUTUBE', Tools::getValue('blocksocial_youtube', ''));
			Configuration::updateValue('BLOCKSOCIAL_GOOGLE_PLUS', Tools::getValue('blocksocial_google_plus', ''));
			Configuration::updateValue('BLOCKSOCIAL_PINTEREST', Tools::getValue('blocksocial_pinterest', ''));
			Configuration::updateValue('BLOCKSOCIAL_VIMEO', Tools::getValue('blocksocial_vimeo', ''));
			Configuration::updateValue('BLOCKSOCIAL_INSTAGRAM', Tools::getValue('blocksocial_instagram', ''));
			$this->_clearCache('blocksocial.tpl');
			Tools::redirectAdmin($this->context->link->getAdminLink('AdminModules').'&configure='.$this->name.'&tab_module='.$this->tab.'&conf=4&module_name='.$this->name);
		}

		return $output.$this->renderForm();
	}

	public function hookDisplayHeader()
	{
		$this->context->controller->addCSS(($this->_path).'blocksocial.css', 'all');
	}

	public function hookDisplayFooter()
	{
		if (!$this->isCached('blocksocial.tpl', $this->getCacheId()))
			$this->smarty->assign(array(
				'facebook_url' => Configuration::get('BLOCKSOCIAL_FACEBOOK'),
				'twitter_url' => Configuration::get('BLOCKSOCIAL_TWITTER'),
				'rss_url' => Configuration::get('BLOCKSOCIAL_RSS'),
				'youtube_url' => Configuration::get('BLOCKSOCIAL_YOUTUBE'),
				'google_plus_url' => Configuration::get('BLOCKSOCIAL_GOOGLE_PLUS'),
				'pinterest_url' => Configuration::get('BLOCKSOCIAL_PINTEREST'),
				'vimeo_url' => Configuration::get('BLOCKSOCIAL_VIMEO'),
				'instagram_url' => Configuration::get('BLOCKSOCIAL_INSTAGRAM'),
			));

		return $this->display(__FILE__, 'blocksocial.tpl', $this->getCacheId());
	}

	public function renderForm()
	{
		$fields_form = array(
			'form' => array(
				'legend' => array(
					'title' => $this->l('Settings'),
					'icon' => 'icon-cogs'
				),
				'input' => array(
					array(
						'type' => 'text',
						'label' => $this->l('Facebook URL'),
						'name' => 'blocksocial_facebook',
						'desc' => $this->l('Your Facebook fan page.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('Twitter URL'),
						'name' => 'blocksocial_twitter',
						'desc' => $this->l('Your official Twitter account.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('RSS URL'),
						'name' => 'blocksocial_rss',
						'desc' => $this->l('The RSS feed of your choice (your blog, your store, etc.).'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('YouTube URL'),
						'name' => 'blocksocial_youtube',
						'desc' => $this->l('Your official YouTube account.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('Google+ URL:'),
						'name' => 'blocksocial_google_plus',
						'desc' => $this->l('Your official Google+ page.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('Pinterest URL:'),
						'name' => 'blocksocial_pinterest',
						'desc' => $this->l('Your official Pinterest account.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('Vimeo URL:'),
						'name' => 'blocksocial_vimeo',
						'desc' => $this->l('Your official Vimeo account.'),
					),
					array(
						'type' => 'text',
						'label' => $this->l('Instagram URL:'),
						'name' => 'blocksocial_instagram',
						'desc' => $this->l('Your official Instagram account.'),
					),
				),
				'submit' => array(
					'title' => $this->l('Save'),
				)
			),
		);

		$helper = new HelperForm();
		$helper->show_toolbar = false;
		$helper->table =  $this->table;
		$lang = new Language((int)Configuration::get('PS_LANG_DEFAULT'));
		$helper->default_form_language = $lang->id;
		$helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') ? Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG') : 0;
		$helper->identifier = $this->identifier;
		$helper->submit_action = 'submitModule';
		$helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false).'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name;
		$helper->token = Tools::getAdminTokenLite('AdminModules');
		$helper->tpl_vars = array(
			'fields_value' => $this->getConfigFieldsValues(),
			'languages' => $this->context->controller->getLanguages(),
			'id_language' => $this->context->language->id
		);

		return $helper->generateForm(array($fields_form));
	}

	public function getConfigFieldsValues()
	{
		return array(
			'blocksocial_facebook' => Tools::getValue('blocksocial_facebook', Configuration::get('BLOCKSOCIAL_FACEBOOK')),
			'blocksocial_twitter' => Tools::getValue('blocksocial_twitter', Configuration::get('BLOCKSOCIAL_TWITTER')),
			'blocksocial_rss' => Tools::getValue('blocksocial_rss', Configuration::get('BLOCKSOCIAL_RSS')),
			'blocksocial_youtube' => Tools::getValue('blocksocial_youtube', Configuration::get('BLOCKSOCIAL_YOUTUBE')),
			'blocksocial_google_plus' => Tools::getValue('blocksocial_google_plus', Configuration::get('BLOCKSOCIAL_GOOGLE_PLUS')),
			'blocksocial_pinterest' => Tools::getValue('blocksocial_pinterest', Configuration::get('BLOCKSOCIAL_PINTEREST')),
			'blocksocial_vimeo' => Tools::getValue('blocksocial_vimeo', Configuration::get('BLOCKSOCIAL_VIMEO')),
			'blocksocial_instagram' => Tools::getValue('blocksocial_instagram', Configuration::get('BLOCKSOCIAL_INSTAGRAM')),
		);
	}

}



			
		
Link to comment
Share on other sites

trzeba zacząc od tego co rozumiesz przez "nie działają te media",

nie działają tzn. plik nie jest dołączony w sekcji <head> sklepu ?

 

z tego:

 

Ale nie, czysta Presta, pierwsze zadanie, Przenieść Blok społecznościowy tam gdzie koszyk itp - Nie widać go 

 

oraz z przedstawionego kodu wynika, że oczekujesz wyświetlić linki społecznościowe  - nie zostało zrobione nic aby umieścić moduł w tym miejscu.

 

dodatkowo najprawdopodobniej liczysz, żę pojawią się one w displayHeader. Jak już zostało wspomniane - displayHeader: w tym module ładuje wyłacznie plik css, nie ma tam żadnej funkcji wyświetlania jakichkolwiek treści.

Link to comment
Share on other sites

Za "wyświetlanie" - czyli dodanie styli css i skryptów do sekcji <head> .. </head/) odpowiedzialna jest funkcja
 

public function hookDisplayHeader()
{
    $this->context->controller->addCSS(($this->_path).'blocksocial.css', 'all');
}


wynikiem jej działania będzie dodanie do sekcji head wpisu:
 

<link rel="stylesheet" href="/themes/default-bootstrap/css/modules/blocksocial/blocksocial.css" type="text/css" media="all" />


Jeżeli chcesz wyświetlić moduł blocksocial (kod html tego modułu) w nagłówku strony tam gdzie znajduje się koszyk, musiasz w module utworzyć funkcje hookDisplayTop() np. w ten sposób:
 

public function hookDisplayTop()
{
    return $this->hookDisplayFooter();
    
}

    
Standardowo blok koszyka jest wyświetlany w tym hook'u (displayTop).


Samo utworzenie funkcji nie spowoduje wyświetlanie bloku społecznościowego w tym hook'u, należy jeszcze przenieść ten moduł to tego hook'a (Moduły->Pozycje->Przemieszczenie modułu).

Jeżeli chcesz żeby ten moduł był automatycznie dołączany do hook'a displayTop musisz do funkcji install dodać $this->registerHook('displayTop')) - będzie to wymagało zresetowania modułu (ponownej instalacji)

 

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