php 如何在Prestashop 1.7中的TPL文件中检测智能设备?

5f0d552i  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(100)

我想要以下内容:
&我知道我必须从PrestaShop的context.php中获取代码,但我似乎犯了一个错误。getcontext的链接如下:(检测移动终端的代码在这里)https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Context.php

{if isset($products) AND $products}
             {$tabname=rand()+count($products)}
            {if isset($display_mode) && $display_mode == 'carousel'}
                {include file="{$items_owl_carousel_tpl}" items=$products image_size=$image_size}
            {else}
                {if device is MOBILE} /* Correct Code Needed */
                    {include file="{$items_normal_tpl}" items=$products image_size="homepage_default"}
                {else device is NOT MOBILE} /* Correct Code Needed */
                    {include file="{$items_normal_tpl}" items=$products image_size="home_default"}
                {/if}
            {/if}
        {/if}

我应该在IF条件中输入什么代码,以确保它检测到移动的和非移动。
还有IF条件写得是否正确,我应该在这段代码中修改什么?
这是.TPL文件。

4sup72z8

4sup72z81#

尝试使用:

{if Context::getContext()->isMobile() == 1}
    {if Context::getContext()->getDevice() != 2}
        // TABLETTE
    {else}
        // MOBILE
    {/if}
{else}
    // PC
{/if}

问候

mwkjh3gx

mwkjh3gx2#

我强烈建议不要直接在tpl中调用php类。我刚刚引入了关于设备的全局变量,因此从9.x版本开始,您可以用途:

{if $device.is_mobile}
   My mobile logic here
{else if $device.is_tablet}
   My tablet logic here
{/if}

您也可以用途:

{if $device.type == 1}
   My mobile logic here
{/if}
  • 但出于可读性和可维护性的考虑,我不推荐使用它。*

如果这在你的prestashop版本中还不可用,你可以通过覆盖来添加它:

<?php

class FrontController extends FrontControllerCore
{
    protected function assignGeneralPurposeVariables()
    {
        parent::assignGeneralPurposeVariables();

        $this->context->smarty->assign([
            'device' => $this->getTemplateVarDevice(),
        ]);
    }

    protected function getTemplateVarDevice(): array
    {
        return [
            'is_mobile' => $this->context->isMobile(),
            'is_tablet' => $this->context->isTablet(),
            'type' => $this->context->getDevice(),
        ];
    }

}

或者通过prestashop本地钩子,例如:actionFrontControllerSetVariables
参见:https://github.com/PrestaShop/PrestaShop/pull/34024

oaxa6hgo

oaxa6hgo3#

在Prestashop 1.7.8.2它的工作原理是-->

{assign var="dispositivo" value="desktop"}

{if Context::getContext()->isMobile()}

    {assign var="dispositivo" value="mobile"}

{else if  Context::getContext()->isTablet()}

    {assign var="dispositivo" value="tablet"}

{else}

    {assign var="dispositivo" value="desktop"}

{/if}

相关问题