Jump to content

Nowy template i hook dla blocknewsletter (PS1.6)


limera1n

Recommended Posts

Cześć, na starym sklepie Presty potrzebuję wynieść do hook'a "displayHome" moduł newsletter'a i przebudować go od strony wizualnej.

W blocknewsletter.php dodałem:
 

do konstruktora:
 

if (!$this->isRegisteredInHook('displayHome')){
	$this->registerHook('displayHome');
}
          

dalej:

public function hookDisplayHome($params)
	{
		if (!isset($this->prepared) || !$this->prepared)
			$this->_prepareHook($params);
		$this->prepared = true;
		$this->smarty->assign(array('id_module' => $this->id));


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

Dla testów skopiowałem domyślny szablon blocknewsletter.tpl, zapisałem pod nazwą blocknewsletter_home.tpl i trzymam w tej samej lokacji co domyślny czyli blocknewsletter\views\templates\hook

Efekt dodania do nazwy pliku .tpl końcówki _home kończy się czymś takim: 
image.png.2d31e312cab4acccc8639304736cb59b.png
Wyświetla się HTML, nie wykonuje się kod PHP.

użycie starej nazwy, bez końcówki _home działa prawidłowo:
image.png.c1036ba2bbba46d105886b1377c0f7f6.png


Zmiana nazwy pliku .tpl w przypadku domyślnego hook'a czyli hookDisplayLeftColumn powoduje to samo zachowanie. Czy ktoś doświadczony może zasugerować jakieś rozwiązanie? Zmiany nazw plików .tpl wymagają jakiegoś dodatkowego działania?

Link to comment
Share on other sites

On 4/18/2021 at 10:45 PM, limera1n said:

Cześć, na starym sklepie Presty potrzebuję wynieść do hook'a "displayHome" moduł newsletter'a i przebudować go od strony wizualnej.

W blocknewsletter.php dodałem:
 

do konstruktora:
 


if (!$this->isRegisteredInHook('displayHome')){
	$this->registerHook('displayHome');
}
          

dalej:


public function hookDisplayHome($params)
	{
		if (!isset($this->prepared) || !$this->prepared)
			$this->_prepareHook($params);
		$this->prepared = true;
		$this->smarty->assign(array('id_module' => $this->id));


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

Dla testów skopiowałem domyślny szablon blocknewsletter.tpl, zapisałem pod nazwą blocknewsletter_home.tpl i trzymam w tej samej lokacji co domyślny czyli blocknewsletter\views\templates\hook

Efekt dodania do nazwy pliku .tpl końcówki _home kończy się czymś takim: 
image.png.2d31e312cab4acccc8639304736cb59b.png
Wyświetla się HTML, nie wykonuje się kod PHP.

użycie starej nazwy, bez końcówki _home działa prawidłowo:
image.png.c1036ba2bbba46d105886b1377c0f7f6.png


Zmiana nazwy pliku .tpl w przypadku domyślnego hook'a czyli hookDisplayLeftColumn powoduje to samo zachowanie. Czy ktoś doświadczony może zasugerować jakieś rozwiązanie? Zmiany nazw plików .tpl wymagają jakiegoś dodatkowego działania?

Jeśli działa to znaczy że CSS jest przypisany do jakiejś klasy i dlatego nie wyświetla się tak samo. Zobacz w oryginale gdzie i jaki kod jest pod button i input i skopiuj go i ustaw dla nowego miejsca.

Link to comment
Share on other sites

4 hours ago, c64girl said:

Jeśli działa to znaczy że CSS jest przypisany do jakiejś klasy i dlatego nie wyświetla się tak samo. Zobacz w oryginale gdzie i jaki kod jest pod button i input i skopiuj go i ustaw dla nowego miejsca.

Wiesz w jaki sposób zmiana nazwy pliku .tpl może wpływać na zachowanie CSS na froncie?

Link to comment
Share on other sites

Oprócz wyglądu nie "wykonują" się elementy silnika smarty, nie działają tłumaczenia, nie wywołał się hook GDPR (brak checkboxa pod inputem)

tak wygląda cały kod szablonu blocknewsletter_home.tpl
 

{*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2016 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}

<!-- Block Newsletter module-->

<div id="newsletter_block_left" class="block">
	<h4 class="title_block">{l s='Newsletter' mod='blocknewsletter'}</h4>
	<div class="block_content">
	{if isset($msg) && $msg}
		<p class="{if $nw_error}warning_inline{else}success_inline{/if}">{$msg}</p>
	{/if}
		<form action="{$link->getPageLink('index', true)|escape:'html'}" method="post">
			<p>
				<input class="inputNew" id="newsletter-input" type="text" name="email" size="18" value="{if isset($value) && $value}{$value}{else}{l s='your e-mail' mod='blocknewsletter'}{/if}" />
				<input type="submit" value="ok" class="button_mini" name="submitNewsletter" />
				{hook h='displayGDPRConsent' id_module=$id_module}
				<input type="hidden" name="action" value="0" />
			</p>
		</form>
	</div>
</div>
<!-- /Block Newsletter module-->

<script type="text/javascript">
    var placeholder = "{l s='your e-mail' mod='blocknewsletter' js=1}";
    {literal}
        $(document).ready(function() {
            $('#newsletter-input').on({
                focus: function() {
                    if ($(this).val() == placeholder) {
                        $(this).val('');
                    }
                },
                blur: function() {
                    if ($(this).val() == '') {
                        $(this).val(placeholder);
                    }
                }
            });
        });
    {/literal}
</script>

 

W pliku blocknewsletter.php:
 

return $this->display(__FILE__, 'blocknewsletter_home.tpl');


użycie nazwy blocknewsletter.tpl zamiast blocknewsletter_home.tpl naprawia problem i widok jest prawidłowy (oba pliki - blocknewsletter.tpl oraz blocknewsletter_home.tpl są takie same)

Kompletnie nie mogę zrozumieć z czego wynika problem biorąc pod uwagę że zmienia się tylko nazwa pliku i nic poza tym

error log jest pusty

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

42 minutes ago, limera1n said:

Oprócz wyglądu nie "wykonują" się elementy silnika smarty, nie działają tłumaczenia, nie wywołał się hook GDPR (brak checkboxa pod inputem)

tak wygląda cały kod szablonu blocknewsletter_home.tpl
 


{*
* 2007-2016 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2016 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}

<!-- Block Newsletter module-->

<div id="newsletter_block_left" class="block">
	<h4 class="title_block">{l s='Newsletter' mod='blocknewsletter'}</h4>
	<div class="block_content">
	{if isset($msg) && $msg}
		<p class="{if $nw_error}warning_inline{else}success_inline{/if}">{$msg}</p>
	{/if}
		<form action="{$link->getPageLink('index', true)|escape:'html'}" method="post">
			<p>
				<input class="inputNew" id="newsletter-input" type="text" name="email" size="18" value="{if isset($value) && $value}{$value}{else}{l s='your e-mail' mod='blocknewsletter'}{/if}" />
				<input type="submit" value="ok" class="button_mini" name="submitNewsletter" />
				{hook h='displayGDPRConsent' id_module=$id_module}
				<input type="hidden" name="action" value="0" />
			</p>
		</form>
	</div>
</div>
<!-- /Block Newsletter module-->

<script type="text/javascript">
    var placeholder = "{l s='your e-mail' mod='blocknewsletter' js=1}";
    {literal}
        $(document).ready(function() {
            $('#newsletter-input').on({
                focus: function() {
                    if ($(this).val() == placeholder) {
                        $(this).val('');
                    }
                },
                blur: function() {
                    if ($(this).val() == '') {
                        $(this).val(placeholder);
                    }
                }
            });
        });
    {/literal}
</script>

 

W pliku blocknewsletter.php:
 


return $this->display(__FILE__, 'blocknewsletter_home.tpl');


użycie nazwy blocknewsletter.tpl zamiast blocknewsletter_home.tpl naprawia problem i widok jest prawidłowy (oba pliki - blocknewsletter.tpl oraz blocknewsletter_home.tpl są takie same)

Kompletnie nie mogę zrozumieć z czego wynika problem biorąc pod uwagę że zmienia się tylko nazwa pliku i nic poza tym

error log jest pusty

Naciśnij prawy przycisk myszy na guziku lub inpucie i wybierz zbadaj. Zobacz jakie klasy ma przycisk i input spisz sobie je lub zrób zrzut ekranu. Zobacz potem z _home jeśli klasa np. zmieni się z blocknewsletter na blocknewsletter_home to będzie oznaczało że ta linijka odpowiada też za klasę CSS i musisz dodać lub zmienić w CSS klasę by się to wyświetlało dobrze. Zobacz też zamiast blocknewsletter_home to blocknewsletterhome

  • Like 1
Link to comment
Share on other sites

30 minutes ago, c64girl said:

Naciśnij prawy przycisk myszy na guziku lub inpucie i wybierz zbadaj. Zobacz jakie klasy ma przycisk i input spisz sobie je lub zrób zrzut ekranu. Zobacz potem z _home jeśli klasa np. zmieni się z blocknewsletter na blocknewsletter_home to będzie oznaczało że ta linijka odpowiada też za klasę CSS i musisz dodać lub zmienić w CSS klasę by się to wyświetlało dobrze. Zobacz też zamiast blocknewsletter_home to blocknewsletterhome

Problem namierzony, jak zwykle oczywiste przeoczenie. Okazało się że kopiowałem zły plik .tpl

Kopiowałem plik z modułu który jest "łysy" zamiast plik .tpl z szablonu który ma podstawowe style i JS. Presta prawidłowo wyświetlała szablon który był po prostu nieostylowany.

Twoja prośba o sprawdzenie kodu wynikowego mnie na to naprowadziła, dzięki, zamykam

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