如何在 Prestashop 的所有页面中显示 Homeslider

How to display Homeslider in all pages in Prestashop

我正在 Prestashop (1.6.1.1.) 中使用主题 Default-Bootstrap 设置网上商店。

我正在使用 "Image slider for your homepage" 模块,但它只显示在主页中。我尝试了不同的方法,但其中任何一个都有效:

这里是homeslider.tpl的代码:

<!--{if $page_name =='index'} -->
<!-- Module HomeSlider -->
    {if isset($homeslider_slides)}
        <div id="homepage-slider">
            {if isset($homeslider_slides.0) && isset($homeslider_slides.0.sizes.1)}{capture name='height'}{$homeslider_slides.0.sizes.1}{/capture}{/if}
            <ul id="homeslider"{if isset($smarty.capture.height) && $smarty.capture.height} style="max-height:{$smarty.capture.height}px;"{/if}>
                {foreach from=$homeslider_slides item=slide}
                    {if $slide.active}
                        <li class="homeslider-container">
                            <a href="{$slide.url|escape:'html':'UTF-8'}" title="{$slide.legend|escape:'html':'UTF-8'}">
                                <img src="{$link->getMediaLink("`$smarty.const._MODULE_DIR_`homeslider/images/`$slide.image|escape:'htmlall':'UTF-8'`")}"{if isset($slide.size) && $slide.size} {$slide.size}{else} width="100%" height="100%"{/if} alt="{$slide.legend|escape:'htmlall':'UTF-8'}" />
                            </a>
                            {if isset($slide.description) && trim($slide.description) != ''}
                                <div class="homeslider-description">{$slide.description}</div>
                            {/if}
                        </li>
                    {/if}
                {/foreach}
            </ul>
        </div>
    {/if}
<!-- /Module HomeSlider -->
<!--{/if}-->

还有一块 header.tpl:

<div class="header-container">
        <header id="header">
            {capture name='displayBanner'}{hook h='displayBanner'}{/capture}
            {if $smarty.capture.displayBanner}
                <div class="banner">
                    <div class="container">
                        <div class="row">
                            {$smarty.capture.displayBanner}
                        </div>
                    </div>
                </div>
            {/if}
            {capture name='displayNav'}{hook h='displayNav'}{/capture}
            {if $smarty.capture.displayNav}
                <div class="nav">
                    <div class="container">
                        <div class="row">
                            <nav>{$smarty.capture.displayNav}</nav>
                        </div>
                    </div>
                </div>
            {/if}
            <div>
                <div class="container">
                    <div class="row">
                        <div id="header_logo">
                            <a href="{if isset($force_ssl) && $force_ssl}{$base_dir_ssl}{else}{$base_dir}{/if}" title="{$shop_name|escape:'html':'UTF-8'}">
                                <img class="logo img-responsive" src="{$logo_url}" alt="{$shop_name|escape:'html':'UTF-8'}"{if isset($logo_image_width) && $logo_image_width} width="{$logo_image_width}"{/if}{if isset($logo_image_height) && $logo_image_height} height="{$logo_image_height}"{/if}/>
                            </a>
                        </div>
                        {if isset($HOOK_TOP)}{$HOOK_TOP}{/if}

                         /*********************************************
                         HERE I'D LIKE TO DISPLAY THE HOMESLIDER MODULE
                         *********************************************/


                        <!--{if $page_name !='index' && $page_name !='pagenotfound'}
                        {include file="$tpl_dir./modules/homeslider/homeslider.tpl"}
                        {/if} -->
                    </div>
                </div>
            </div>
        </header>
    </div>

我希望我已经很好地解释了这个问题,这样你就可以帮助我:)

提前致谢! 亚卡斯

我认为你的方向是正确的,你在模板中找到了条件,但是你检查过模块中的实际钩子了吗?

看到这个:

homslider.php

public function hookdisplayTopColumn($params)
{
    if (!isset($this->context->controller->php_self) || $this->context->controller->php_self != 'index')
        return;
    if (!$this->_prepareHook())
        return false;
    return $this->display(__FILE__, 'homeslider.tpl', $this->getCacheId());
}

所以基本上,您必须对此函数进行覆盖:

/override/modules/homeslider/homeslider.php

<?php

class HomeSliderOverride extends HomeSlider
{
    public function hookdisplayTopColumn($params)
    {
        if (!$this->_prepareHook())
            return false;
        return $this->display(__FILE__, 'homeslider.tpl', $this->getCacheId());
    }
}