Tagmanager2 - ломается фильтр при прохождении через urlencode



  • Подскажите пожалуйста, как сделать чтобы квадратные скобки фильтра переваривались функцией urlencode?
    На сайте конвертер валют, при прохождении через который квадратные скобки и параметр упраздняется - в итоге валюта меняется, а значения фильтров сбрасываются.
    Код сниппета, который формирует строку:

    <?php
    /**
     * Сниппет обеспечивает вывод списка валют
     */
    
    $iStart=microtime(true);
    if(!class_exists('currency')) {
    	$modelPath = $modx->getOption('core_path').'components/currencies/model/';
    	include_once $modelPath.'currency.class.php';
    }
    
    if(!isset($scriptProperties['tpl']))
    	$scriptProperties['tpl']='currenciesList';
    if(!isset($scriptProperties['classActive']))
    	$scriptProperties['classActive']='active';
    if(!isset($scriptProperties['classNormal']))
    	$scriptProperties['classNormal']='normal';
    
    if(isset($scriptProperties['hideOnEmpty']) && $scriptProperties['hideOnEmpty']=='Y') {
    	if(isset($scriptProperties['parentId'])) {
    		$iParentId=$scriptProperties['parentId'];
    	} else {
    		$iParentId=$modx->resource->get('id');
    	}
    	$c = $modx->newQuery('modResource');
    	$c->select('`modResource`.`id`');
    	$c->where(array("template" => $itemTpl,'parent'=>$parent));
        $rows= xPDOObject::_loadRows($modx, 'modResource', $c);
    		if(!$rows->fetch())
    	if(!RequestParser::hasItems($itemsTpl, $iParentId)) return ''; 
    }
    
    
    $obCurrency=currency::getInstance();
    
    $arResult=array();
    
    $arCurrentCurrency=$obCurrency->getCurrent();
    $sOutput='';
    if($arList=$obCurrency->getList()) {
    	$arParams=array_merge($_GET,array(
    		'currencies'=>'set',
    		'curKey'=>'#KEY#',
    	));
      	unset($arParams['c']);
      	unset($arParams['q']);
    	$arRows=array();
    	foreach($arParams as $key=>$value) 
    	  $arRows[]=urlencode($key).'='.urlencode($value);
    	  
    	  
      	 
    	//Если настроено более 0 валют
    	if($modx->resource && $modx->resource->get('id')!=2) {
    	  //$sSetUrl=$modx->makeUrl($modx->resource->get('id'),$modx->context->get('key'),join('&',$arRows));
    	     $sSetUrl=$modx->makeUrl($modx->resource->get('id'),$modx->context->get('key'),join('&',$arRows)); 
    	} else {
    		$sSetUrl=$_SERVER['REQUEST_URI'];
    		$iQPos=strpos($sSetUrl,'?');
    		if($iQPos>0) {
    			$sSetUrl=substr($sSetUrl, 0, $iQPos);
    		}
    		$sSetUrl.='?'.join('&',$arRows);
    	}
    	foreach($arList as $arCurrency) {
    	  	$arResult[$arCurrency['code'].'_set_link']=str_replace(urlencode('#KEY#'),$arCurrency['code'],$sSetUrl); //RUR_set_link
    	  	$arResult[$arCurrency['code'].'_class']=$scriptProperties['classNormal'];
    		if($arCurrentCurrency['code']==$arCurrency['code']) 
    			$arResult[$arCurrency['code'].'_class']=$scriptProperties['classActive'];
    		$arResult[$arCurrency['code'].'_title']=$arCurrency['name'];
    		$arResult[$arCurrency['code'].'_nominal']=$arCurrency['nominal'];
    		$arResult[$arCurrency['code'].'_value']=$arCurrency['value'];
    	}
    	$sOutput=$modx->getChunk($scriptProperties['tpl'],$arResult);
    }
    if(defined('FS_DEBUG'))
    	echo "Общее время подготовки списка валют: ".(microtime(true)-$iStart);
    return $sOutput;
    


  • используется этот сниппет валют, а не из шопкипера по умолчанию, т.к. требуется поправка на конвертацию к курсам валют

    строка
    https://p-avt.ru/fanless/ippc-atvk-j1900.html?f_Diagonal[]=12.1

    после отработки сниппета конвертера приобретает вид
    https://p-avt.ru/fanless/ippc-atvk-j1900.html?page_id=798&f_Diagonal=&_=1496137510083&currencies=set&curKey=RUR

    В итоге фильтр сбрасывает значения (квадратные скобки и параметры теряются)



  • вопрос скорей сводится к следующему:
    как в стороннем сниппете получить эту строчку f_Diagonal[]=12.1 ?
    текущее значение выбранных фильтров


  • Администраторы

    Участник @semenov80 написал в Tagmanager2 - ломается фильтр при прохождении через urlencode:

    вопрос скорей сводится к следующему:
    как в стороннем сниппете получить эту строчку f_Diagonal[]=12.1 ?
    текущее значение выбранных фильтров

    Как-то так:

    $value = !empty( $_GET['f_Diagonal'] ) ? $_GET['f_Diagonal'] : array();
    

    На выходе будет массив.



Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.