Последние темы


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();
    

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

 

Последние комментарии

  • Вот, может кому-то пригодиться. Скачиваем модуль с оф.сайта яндекс кассы. И в YandexMoneyHook,
    core/components/yandexmoney/model/yandexmoney.class.php и /assets/components/yandexmoney/connector_result.php подключаем пакет shopkeeper3 и выбор заказа по id.
    В общем меняем строки для shk2 на shk3.

    $modx->addPackage('shopkeeper', $modx->getOption('core_path').'components/shopkeeper/model/'); $order = $modx->getObject('SHKorder', $order_id) на $modx->addPackage('shopkeeper3', $modx->getOption('core_path').'components/shopkeeper3/model/'); $order = $modx->getObject('shk_order', $order_id);

    Так же, если не меняли стандартные статусы заказа, то в модули их исчисление начинается с 0, в shk3 с 1. Надо учесть это при обновлении статуса при оплате. (я тупо в БД в таблице с параметрами сниппета YandexMoney поменял нумерацию)

    Читать далее
  • Z

    Спасибо, буду пробовать.

    Читать далее
  • Может такая причина
    http://forum.modx-shopkeeper.ru/topic/717/mysql-5-7-не-работает-query-groupby/4

    Смотрите в журнал ошибок.

    Надо выполнить запрос

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

    Читать далее
  • Z

    Добрый день! Используется шаблон с id 3. Вот скриншот: http://dl3.joxi.net/drive/2018/11/17/0003/2897/236369/69/3dd12003a9.png

    Читать далее