$location .= cw_clean_url_get_additional_query($url['query'], $params_query); cw_header_location($location, true, false, 301); } } elseif ($REQUEST_METHOD == 'GET' && !defined('IS_AJAX') && !empty($_GET['att'])) { parse_str($url['query'], $arr); $clean_url = cw_call('cw_clean_url_generate_filter_url', array(array('ns' => $url['path']), array('att' => $arr['att']))); if (!empty($clean_url)) { unset($arr['att']); $has_additional_query = FALSE; if (is_array($arr)) { foreach ($arr as $_v) { if (!empty($_v)) { $has_additional_query = TRUE; break; } } } $location = $clean_url . ($has_additional_query ? '?' . http_build_query($arr) : ''); cw_header_location($location, true, false, 301); } else { cw_header_location($url['path'], true, false); } } elseif ($REQUEST_METHOD == 'GET' && !defined('IS_AJAX') && !empty($url['query'])) { $redirect_url = cw_clean_url_get_redirect_url_in_owner_urls($url['query'], $lang); if (!empty($redirect_url)) { $location = $current_location . '/' . $redirect_url; cw_header_location($location, true, false, 301); } } } }
/** * * @param array $params - additional function params * [ns] - navigation script * [clean_urls] - array of clean urls can be supplied by pre-hooks to build final url * @param array $query - query params * @param bool $full - add or not navigation script to returned url * * @return string url */ function cw_clean_url_generate_filter_url($params, $query, $full = true) { global $tables, $current_language, $config, $current_location, $current_host_location; global $cw_attributes; $main_attribute_id = cw_clean_url_get_uniting_attribute_id(); $attribute_values_attribute_id = cw_clean_url_get_attribute_values_attribute_id(); $language = !empty($current_language) ? $current_language : $config['default_customer_language']; if (empty($query) || !is_array($query)) { return ''; } $addition_params = array(); $clean_urls = array(); if (!empty($params['clean_urls'])) { $clean_urls = $params['clean_urls']; } foreach ($query as $varname => $element) { if (is_array($element)) { foreach ($element as $attribute_id => $attribute_value) { if ($attribute_id == 'price') { // If price is shown as ranges, then process it as usual attribute $a = cw_call('cw_attributes_filter', array(array('field' => 'price'), true)); if (in_array($a['pf_display_type'], array('P', 'E', 'W', 'G'))) { $attribute_id = $a['attribute_id']; } } if (is_numeric($attribute_id)) { $att = $cw_attributes['all'][$attribute_id]; $attribute_type = $att['active'] == 1 && $att['pf_is_use'] == 1 ? $att['type'] : false; if (in_array($attribute_type, array("selectbox", "multiple_selectbox")) || in_array($attribute_type, array("decimal", "integer")) && in_array($att['pf_display_type'], array('P', 'E', 'W', 'G'))) { if (is_numeric($attribute_value[0])) { $clean_url = cw_call('cw_attribute_get_value', array($attribute_values_attribute_id, $attribute_value[0], $language)); if (!empty($clean_url)) { $clean_urls[] = $clean_url; } } else { $clean_url = cw_call('cw_attribute_get_value', array($attribute_values_attribute_id, $attribute_id, $language)); if (!empty($clean_url)) { $clean_urls[] = $clean_url . '-' . $attribute_value[0]; } } } elseif (in_array($attribute_type, array("text", "date", "yes_no", "decimal", "integer"))) { $clean_url = cw_call('cw_attribute_get_value', array($main_attribute_id, $attribute_id, $language)); if (!empty($clean_url)) { if (isset($attribute_value['min']) && isset($attribute_value['max'])) { $clean_urls[] = $clean_url . '-' . $attribute_value['min'] . '-' . $attribute_value['max']; } else { $clean_urls[] = $clean_url . '-' . $attribute_value[0]; } } } elseif (in_array($attribute_type, array("manufacturer-selector"))) { $clean_url = cw_call('cw_attribute_get_value', array($main_attribute_id, $attribute_id, $language)); $att = cw_call('cw_attributes_filter', array(array('field' => 'clean_url', 'item_type' => 'M', 'addon' => 'clean_urls'), true)); $clean_url_value = cw_call('cw_attribute_get_value', array($att['attribute_id'], $attribute_value[0], $language)); if (!empty($clean_url) && !empty($clean_url_value)) { $clean_urls[] = $clean_url . '-' . $clean_url_value; } } } elseif ($attribute_id == 'price') { // price $att = cw_call('cw_attributes_filter', array(array('field' => 'price', 'pf_is_use' => '1'), true)); $attribute_id = $att['attribute_id']; $clean_url = cw_call('cw_attribute_get_value', array($main_attribute_id, $attribute_id, $language)); if (!empty($clean_url) && isset($attribute_value['min']) && isset($attribute_value['max'])) { $clean_urls[] = $clean_url . '-' . $attribute_value['min'] . '-' . $attribute_value['max']; } } elseif ($attribute_id == 'substring') { //substring $clean_urls[] = 'substring-' . $attribute_value; } } } else { $addition_params[$varname] = $element; } } if (!empty($clean_urls)) { if ($full) { $url_info = parse_url($params['ns']); $redirect_url = cw_clean_url_get_redirect_url_in_owner_urls($url_info['query'], $language); if (!empty($redirect_url)) { return trim($current_location . '/' . $redirect_url, '/') . '/' . implode('/', $clean_urls) . '?' . http_build_query($addition_params); } else { return '/' . trim($url_info['path'], '/') . '/' . implode('/', $clean_urls) . '?' . http_build_query($addition_params); } } else { return implode('/', $clean_urls) . '?' . http_build_query($addition_params); } } return ''; }