max

max

С нами с 18 августа 2016; Место в рейтинге пользователей: #914
Володя
05 августа 2016, 22:35
21
+5
можно добавить так
создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
    if (!$fenom = $modx->getOption('fenom', $scriptProperties)) {
        return;
    }
    if (!$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/')) {
	    return;
    }
    
    $key = $MobileDetect->config['force_browser_variable'];
    $device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';
	if (empty($device)) {
	    $device = $MobileDetect->getSettings();
    }
    if (empty($device)) {
        $detector = $MobileDetect->getDetector();
        $device = ($detector->isMobile() ? ($detector->isTablet() ? 'tablet' : 'mobile') : 'standard');
        $MobileDetect->saveSettings($device);
    }

    $fenom->addModifier("detector", function ($value) use ($device) {
        return $value == $device;
    });

    break;
}

и теперь в любом месте можно делать так
{if 'mobile'|detector}
mobile
{/if}

{if 'tablet'|detector}
tablet
{/if}

{if 'standard'|detector}
standard
{/if}
Павел Гвоздь
24 августа 2015, 13:51
1
0
Всё-же немного поторопился публиковать сниппет. Перед последней строкой return $return; должно быть вот это:
$MobileDetect->saveSettings( $return );

Итого, более правильный код сниппета вот:
<?php
if( !$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/') ) {return;}


$key = $MobileDetect->config['force_browser_variable'];

$device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';

if( empty($device) )
{
	$device = $MobileDetect->getSettings();
}

if( empty($device) )
{
	$detector = $MobileDetect->getDetector();
	
	if( $detector->isMobile() )
	{
		$return = 'mobile';
	}
	else {
		$return = 'standard';
	}
}
else {
	$return = $device;
}

$MobileDetect->saveSettings( $return ); // ставим печеньку

return $return;

Советую, для корректной работы с мультиязыками использовать системную настройку «session_cookie_path». Значение данной настройки должно быть "/" (без кавычек).