1
0
Эх сурвалжийг харах

Ticket #2882 - Issues with 'Location Radius' field.

AntonLV 6 жил өмнө
parent
commit
e77174226d

+ 2 - 1
inc/classes/BxDolMetatags.php

@@ -613,7 +613,8 @@ class BxDolMetatags extends BxDolFactory implements iBxDolFactoryObject
         $aRet = array();
         $iAdress = count($aAdress);
         for($i = 0; $i < $iAdress; $i++)
-            $aRet[$sPrefix . $aKeys[$i]] = $aAdress[$i];
+            if(isset($aKeys[$i]))
+                $aRet[$sPrefix . $aKeys[$i]] = $aAdress[$i];
 
         return $aRet;
     }

+ 8 - 2
template/scripts/BxBaseSearchExtended.php

@@ -113,8 +113,14 @@ class BxBaseSearchExtended extends BxDolSearchExtended
 
                 switch($oForm->aInputs[$aField['name']]['type']) {
                     case 'location':
+                    case 'location_radius':
                         $aParams['cond'][$aField['name']] = $mixedValue['string'];
-                        $aParams['cond'] = array_merge($aParams['cond'], BxDolMetatags::locationsParseComponents($mixedValue['array'], $aField['name']));
+
+                        $aLocationComponents = BxDolMetatags::locationsParseComponents($mixedValue['array'], $aField['name']);
+                        if($oForm->aInputs[$aField['name']]['type'] == 'location_radius' && count($mixedValue['array']) > count($aLocationComponents))
+                            $aLocationComponents[$aField['name'] . '_rad'] = array_pop($mixedValue['array']);
+
+                        $aParams['cond'] = array_merge($aParams['cond'], $aLocationComponents);
                         break;
 
                     default:
@@ -240,7 +246,7 @@ class BxBaseSearchExtended extends BxDolSearchExtended
                 )
             );
 
-            if(in_array($aField['search_type'], array('location')))
+            if(in_array($aField['search_type'], array('location', 'location_radius')))
                 $aForm['inputs'][$aField['name']]['manual_input'] = true;
         }
 

+ 9 - 9
template/scripts/BxBaseSearchExtendedForm.php

@@ -35,17 +35,18 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
                 'string' => parent::getCleanValue($sName), 
                 'array' => BxDolMetatags::locationsRetrieveFromForm($sName, $this)
             );
-        
-        if($bType && $this->aInputs[$sName]['type'] == 'location_radius'){
-            $aTmp = BxDolMetatags::locationsRetrieveFromForm($sName, $this);   
-            $sValue = bx_get($sName . '_rad');
-            $iValue = is_numeric($sValue) ? (int)$sValue : 0;
-            array_push($aTmp, $iValue);
+
+        //--- Process field with 'Location Radius' type. 
+        if($bType && $this->aInputs[$sName]['type'] == 'location_radius') {
+            $aLocation = BxDolMetatags::locationsRetrieveFromForm($sName, $this);
+            $aLocation[] = (int)$this->getLocationVal($this->aInputs[$sName], 'rad');
+
             return array(
                 'string' => parent::getCleanValue($sName), 
-                'array' => $aTmp
+                'array' => $aLocation
             );
         }
+
         //--- Process field with 'Date Range Age' and 'Date-Time Range Age' type.
         if($bType && in_array($this->aInputs[$sName]['type'], array('datepicker_range_age', 'datetime_range_age'))) {
             $bTypeDateTime = $this->aInputs[$sName]['type'] == 'datetime_range_age';
@@ -157,8 +158,7 @@ class BxBaseSearchExtendedForm extends BxTemplFormView
         $aInputRadius = $aInput;
         $aInputRadius['type'] = 'text';
         $aInputRadius['name'] = $aInputRadius['name'] . '_rad';
-        $sValue = bx_get($aInputRadius['name']);
-        $aInputRadius['value'] = is_numeric($sValue) ? $sValue : '';
+        $aInputRadius['value'] = $this->getLocationVal($aInput, 'rad');
         $aInputRadius['attrs']['placeholder'] = _t('_sys_form_input_location_radius_label');
 
         return $this->oTemplate->parseHtmlByName('form_field_location_radius.html', array (