Перейти к содержанию
vstubborn

[Решено] Режется get (?umt) в категориях после 3 уровня (SEO PRO)

Рекомендуемые сообщения

Доброго времени суток!

Столкнулся с необычной ситуацией:
при входе с example.ru/category1/category2/category3/?utm_medium=......
Через несколько секунд идёт редирект на example.ru/category1/category2/category3/

Не спишите отправлять меня в тему по решению обрезки UTM  , я там уже был и все эти изменения по дефолту есть в файле)

Теперь самое интересное : прекрасно работает example.ru/category1/category2/?utm_medium=  и  example.ru/product/?utm_medium=

Кэшы все чистил, всё посмотрел. Стоит SEO PRO opencartjazz, пока думаю на него, больше из модулей, которые могут так шалить с URL ничего не нашел.
По коду контроллера сео про видно, что вывод ничем не ограничен, обычный foreach(). Так что не знаю, куда ещё полезть. В .htaccess тоже нет проблем.

Пробовал радикальный метод, обрезать категории до последней по примеру

заменив в контроллере seo pro
 

   foreach ($categories as $category) {
        $queries[] = 'category_id=' . $category;
    }
    unset($data[$key]);

на

 

  $queries[] = 'category_id=' . end($categories);
    unset($data[$key]);

Для вывода только последнего элемента массива подкатегорий. Но результат: с начала страница грузиться нормально, а через 1-2 сек. редирект на example.ru/undefined
Но страница сама по себе отображается нормально.



Подскажите пожалуйста, как сделать так, чтобы не обрезались UTM после подкатегории 3 уровня. Вообще нормально Opencart  работает c подктегориями выше 3, есть какие-то ограничения, поделитесь опытом?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через несколько секунд идет... ищите скрипт, который редиректит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Через несколько секунд идет... ищите скрипт, который редиректит

Большое спасибо за наводку.

Инспектором сети выявил, что последним подгружается  adv_ajax filter. Скорее всего он и редиректит. На страницах с аналогичной вложенность без фильтра проблем нет.

Буду искать дальше, но думаю это он. Может быть у кого-то есть опыт борьбы с этим зверем. По моему он входил в комплект поставки с темой.

Просмотрев код контроллера фильтра пока не вижу никаких проблем.

Прилагаю код контроллера, возможно у кого-то найдутся мысли как зафиксить.

class ControllerModuleAdvajaxfilter extends Controller {

private $k = 1;

public function index($setting)

{

$this->load->language('module/adv_ajaxfilter');

$data['text_tax'] = $this->language->get('text_tax');

$data['button_cart'] = $this->language->get('button_cart');

$data['button_wishlist'] = $this->language->get('button_wishlist');

$data['button_compare'] = $this->language->get('button_compare');

$data['text_price_range'] = $this->language->get('text_price_range');

$data['text_manufacturers'] = $this->language->get('text_manufacturers');

$data['text_categories'] = $this->language->get('text_categories');

$data['text_attributes'] = $this->language->get('text_attributes');

$data['text_all'] = $this->language->get('text_all');

$data['clear_filter'] = $this->language->get('clear_filter');

$data['text_instock'] = $this->language->get('text_instock');

$data['text_range'] = $this->language->get('text_range');

$data['heading_title'] = $this->language->get('heading_title');

$data['pds_sku'] = $this->language->get('pds_sku');

$data['pds_upc'] = $this->language->get('pds_upc');

$data['pds_location'] = $this->language->get('pds_location');

$data['pds_model'] = $this->language->get('pds_model');

$data['pds_brand'] = $this->language->get('pds_brand');

$data['pds_stock'] = $this->language->get('pds_stock');

$data['symbol_right'] = $this->currency->getSymbolRight();

$data['symbol_left'] = $this->currency->getSymbolLeft();

$this->load->model('setting/setting');

$advsettings = $this->model_setting_setting->getSetting('adv_ajaxfilter');

if (isset($advsettings['adv_ajaxfilter_module'])) {

$data['setting'] = $advsettings['adv_ajaxfilter_module'][0];

}

else{

$data['setting'] = array();

}

$adv_ajaxfilter_setting = $this->config->get('adv_ajaxfilter_setting');

$cat_id = false;

$data['path'] = "";

if(isset($this->request->get['path'])) {

$data['path'] = $this->request->get['path'];

$parts = explode('_', (string)$this->request->get['path']);

$cat_id = array_pop($parts);

}

$man_id = false;

if(isset($this->request->get['manufacturer_id'])) {

$man_id = $this->request->get['manufacturer_id'];

$_data = array(

'filter_manufacturer_id' => $this->request->get['manufacturer_id']

);

} else {

$_data = array(

'filter_category_id' => $cat_id,

'filter_sub_category' => false

);

}

$this->load->model('catalog/product');

$product_total = $this->model_catalog_product->getTotalProducts($_data);

if($product_total < 2) {

return;

}

$data['category_id'] = $cat_id;

$_data = array('category_id' => $cat_id, 'manufacturer_id' => $man_id);

$this->load->model('module/adv_ajaxfilter');

$this->load->model('tool/image');

$data['manufacturers'] = false;

if(isset($this->request->get['manufacturer_id'])) {

$data['manufacturer_id'] = $this->request->get['manufacturer_id'];

} else {

if($adv_ajaxfilter_setting['display_manufacturer'] != 'none') {

$data['manufacturers'] = $this->model_module_adv_ajaxfilter->getManufacturers($_data);

$data['display_manufacturer'] = $adv_ajaxfilter_setting['display_manufacturer'];

$data['expanded_manufacturer'] = isset($adv_ajaxfilter_setting['expanded_manufacturer']) ? 1 : 0;

foreach($data['manufacturers'] as $key => $manufacturer) {

$data['manufacturers'][$key]['image'] = $this->model_tool_image->resize($manufacturer['image'], 64, 32);

}

}

}

$data['options'] = $this->model_module_adv_ajaxfilter->getOptions($_data);

foreach($data['options'] as $i => $option) {

if(!isset($adv_ajaxfilter_setting['display_option_' . $option['option_id']])) {

$adv_ajaxfilter_setting['display_option_' . $option['option_id']] = 'none';

}

$display_option = $adv_ajaxfilter_setting['display_option_' . $option['option_id']];

if($display_option != 'none') {

$data['options'][$i]['display'] = $display_option;

$data['options'][$i]['expanded'] = isset($adv_ajaxfilter_setting['expanded_option_' . $option['option_id']]) ? 1 : 0;

foreach($data['options'][$i]['option_values'] as $j => $option_value) {

$data['options'][$i]['option_values'][$j]['thumb'] = $this->model_tool_image->resize($data['options'][$i]['option_values'][$j]['image'], 20, 20);

}

} else {

unset($data['options'][$i]);

}

}

$data['categories'] = false;

if($adv_ajaxfilter_setting['display_categories'] != 'none') {

$data['display_categories'] = $adv_ajaxfilter_setting['display_categories'];

$data['categories'] = $this->model_module_adv_ajaxfilter->getSubCategories($_data);

$data['expanded_categories'] = isset($adv_ajaxfilter_setting['expanded_categories']) ? 1 : 0;

}

$data['attributes'] = $this->model_module_adv_ajaxfilter->getAttributes($_data);

foreach($data['attributes'] as $j => $attr_group) {

foreach($attr_group['attribute_values'] as $attr_id => $attr) {

if(!isset($adv_ajaxfilter_setting['display_attribute_' . $attr_id])) {

$adv_ajaxfilter_setting['display_attribute_' . $attr_id] = 'none';

}

$display_attribute = $adv_ajaxfilter_setting['display_attribute_' . $attr_id];

if($display_attribute != 'none') {

if($display_attribute == 'slider') {

$values = $data['attributes'][$j]['attribute_values'][$attr_id]['values'];

$first = $values[0];

$data['attributes'][$j]['attribute_values'][$attr_id]['suffix'] = preg_replace("/^-?[0-9 .,]*/", '', $first);

$values = array_map('floatval', $values);

$values = array_unique($values);

sort($values);

$data['attributes'][$j]['attribute_values'][$attr_id]['values'] = $values;

}

$data['attributes'][$j]['attribute_values'][$attr_id]['display'] = $display_attribute;

$data['attributes'][$j]['attribute_values'][$attr_id]['expanded'] = isset($adv_ajaxfilter_setting['expanded_attribute_' . $attr_id]) ? 1 : 0;

} else {

unset($data['attributes'][$j]['attribute_values'][$attr_id]);

if(!$data['attributes'][$j]['attribute_values']) {

unset($data['attributes'][$j]);

}

}

}

}

$data['filter_groups'] = array();

$this->load->model('catalog/category');

$fltr_grps = $this->model_catalog_category->getCategoryFilters($cat_id);

$data['display_filters'] = $adv_ajaxfilter_setting['display_filters'];

$data['expanded_filters'] = isset($adv_ajaxfilter_setting['expanded_filters']) ? 1 : 0;

if ($fltr_grps) {

foreach ($fltr_grps as $fltr_grp) {

$filter_data = array();

foreach ($fltr_grp['filter'] as $filter) {

$_data = array(

'filter_category_id' => $cat_id,

'filter_filter' => $filter['filter_id']

);

$filter_data[] = array(

'filter_id' => $filter['filter_id'],

'name' => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($_data) . ')' : '')

);

}

$data['filter_groups'][] = array(

'filter_group_id' => $fltr_grp['filter_group_id'],

'name' => $fltr_grp['name'],

'filter' => $filter_data

);

}

}

$data['price_slider'] = $adv_ajaxfilter_setting['price_slider'];

$data['attr_group'] = $adv_ajaxfilter_setting['attr_group'];

$data['instock_checked'] = isset($adv_ajaxfilter_setting['instock_checked']) ? 1 : 0;

$data['instock_visible'] = isset($adv_ajaxfilter_setting['instock_visible']) ? 1 : 0;

if($data['options'] || $data['manufacturers'] || $data['attributes'] || $data['price_slider']) {

$this->document->addScript('catalog/view/javascript/jquery-ui/jquery-ui.js');

$this->document->addScript('catalog/view/javascript/jquery.plugins.adv.js');

$this->document->addScript('catalog/view/javascript/adv_ajaxfilter.js');

$this->document->addStyle('catalog/view/javascript/jquery-ui/css/jquery-ui.css');

$this->document->addStyle('catalog/view/theme/default/stylesheet/adv_ajaxfilter.css');

$this->document->addStyle('catalog/view/theme/default/stylesheet/jquery.loadmask.css');

}

$adv_ajaxfilter_setting['adv_ajaxfilter_afterload'] ="";

$data['adv_ajaxfilter_container'] = $adv_ajaxfilter_setting['adv_ajaxfilter_container'];

$data['adv_ajaxfilter_afterload'] = html_entity_decode($adv_ajaxfilter_setting['adv_ajaxfilter_afterload'], ENT_QUOTES, 'UTF-8');

if(isset($this->request->get['route'])) {

$data['old_route'] = $this->request->get['route'];

}

else {

$data['old_route'] ="";

}

if(isset($this->request->get['search'])) {

$data['search'] = $this->request->get['search'];

}

else {

$data['search'] ="";

}

$data['route'] = '';

if(isset($this->request->get['route'])){

$data['route'] = $this->request->get['route'];

}

$data['url'] = $this->url->link('product/adv_ajaxfilter', '');

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/adv_ajaxfilter.tpl')) {

return $this->load->view($this->config->get('config_template') . '/template/module/adv_ajaxfilter.tpl', $data);

} else {

return $this->load->view('default/template/module/adv_ajaxfilter.tpl', $data);

}

}

public function getProducts() {

$this->load->language('module/adv_ajaxfilter');

$adv_ajaxfilter_setting = $this->config->get('adv_ajaxfilter_setting');

if((float)$adv_ajaxfilter_setting['tax'] > 0) {

$this->k = 1 + (float)$adv_ajaxfilter_setting['tax'] / 100;

}

if (!empty($this->request->get['page'])) {

$page = $this->request->get['page'];

} else if (!empty($this->request->post['page'])) {

$page = $this->request->post['page'];

} else {

$page = 1;

}

if (isset($this->request->get['limit'])) {

$limit = $this->request->get['limit'];

} else if (isset($this->request->post['limit'])) {

$limit = $this->request->post['limit'];

} else {

$limit = $this->config->get('config_product_limit');

}

if(isset($this->request->post['sort'])) {

$sort = $this->request->post['sort'];

} else if (isset($this->request->post['sort'])) {

$sort = $this->request->post['sort'];

} else {

$sort = 'p.sort_order';

}

if(isset($this->request->post['order'])) {

$order = $this->request->post['order'];

} else if (isset($this->request->post['order'])) {

$order = $this->request->post['order'];

} else {

$order = 'ASC';

}

$this->load->model('module/adv_ajaxfilter');

$this->load->model('catalog/product');

$this->load->model('tool/image');

$man = false;

if(isset($this->request->post['manufacturer'])) {

$man = $this->trim_array_values($this->request->post['manufacturer']);

if(!count($man)) {

$man = false;

}

}

$man_id = false;

if(isset($this->request->post['manufacturer_id'])) {

$man_id = $this->request->post['manufacturer_id'];

$man = array($man_id);

}

$option_value = false;

if(isset($this->request->post['option_value'])) {

$option_value = $this->trim_array_values($this->request->post['option_value']);

if(!count($option_value)) {

$option_value = false;

}

}

$attr_value = array();

if(isset($this->request->post['attribute_value'])) {

$attr_value = $this->trim_array_values($this->request->post['attribute_value']);

if(!count($attr_value)) {

$attr_value = array();

}

}

$instock = false;

if(isset($this->request->post['instock'])) {

$instock = true;

}

$cats = false;

if(isset($this->request->post['categories'])) {

$cats = $this->trim_array_values($this->request->post['categories']);

if(!count($cats)) {

$cats = false;

}

}

$cat_id = 0;

if(isset($this->request->post['category_id'])) {

$cat_id = $this->request->post['category_id'];

}

if(!$cats && $cat_id) {

$cats = array($cat_id);

}

$attr_slider = isset($this->request->post['attr_slider']) ? $this->request->post['attr_slider'] : false;

$filter = false;

if(isset($this->request->post['filter'])) {

$filter = $this->trim_array_values($this->request->post['filter']);

if(!count($filter)) {

$filter = false;

}

}

$data = array(

'instock' => $instock,

'option_value' => $option_value,

'manufacturer' => $man,

'attribute_value' => $attr_value,

'categories' => $cats,

'attr_slider' => $attr_slider,

'filter' => $filter,

'min_price' => $this->request->post['min_price'] / $this->k,

'max_price' => $this->request->post['max_price'] / $this->k,

'start' => ($page - 1) * $limit,

'limit' => $limit,

'sort' => $sort,

'order' => $order

);

if(isset($this->request->post['manufacturer_id']) || ($adv_ajaxfilter_setting['display_manufacturer'] == 'none')) {

$totals_mans = false;

} else {

$totals_mans = $this->model_module_adv_ajaxfilter->getTotalManufacturers($data);

}

$totals_options = $this->model_module_adv_ajaxfilter->getTotalOptions($data);

$totals_atrs = $this->model_module_adv_ajaxfilter->getTotalAttributes($data);

foreach($attr_value as $attr_id => $values) {

foreach($totals_atrs as $i => $attr) {

if($attr['id'] == $attr_id) {

unset($totals_atrs[$i]);

}

}

$temp_data = $data;

unset($temp_data['attribute_value'][$attr_id]);

foreach($this->model_module_adv_ajaxfilter->getTotalAttributes($temp_data) as $attr){

if($attr['id'] == $attr_id) {

$totals_atrs[] = $attr;

}

}

}

$totals_cats = $this->model_module_adv_ajaxfilter->getTotalCategories($data, $cat_id);

$results = $this->model_module_adv_ajaxfilter->getProducts($data);

$min_price = false;

$max_price = false;

if(isset($this->request->post['getPriceLimits']) && $this->request->post['getPriceLimits']) {

$priceLimits = $this->model_module_adv_ajaxfilter->getPriceLimits(array('category_id' => $cat_id, 'manufacturer_id' => $man_id));

$min_price = $priceLimits['min_price'];

$max_price = $priceLimits['max_price'];

}

$this->request->get['path'] = isset($this->request->post['path']) ? $this->request->post['path'] : '';

// Product Option Image PRO module <<

// >> Product Option Image PRO module

$product_total = $this->model_module_adv_ajaxfilter->getTotalProducts($data);

$pagination = new Pagination();

$pagination->total = $product_total;

$pagination->page = $page;

$pagination->limit = $limit;

$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&page={page}');

$pagination_result = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));

$min_price = $this->currency->convert($min_price * $this->k, $this->config->get('config_currency'), $this->currency->getCode());

$max_price = $this->currency->convert($max_price * $this->k, $this->config->get('config_currency'), $this->currency->getCode());

$result_html = $this->getProductsTmpl($results, $product_total);

$json = json_encode(array( 'result_html' => $result_html,

'min_price' => $min_price,

'max_price' => $max_price,

'pagination' => $pagination->render(),

'pagination_result' => $pagination_result,

'totals_data' => array('manufacturers' => $totals_mans,

'options' => $totals_options,

'attributes' => $totals_atrs,

'categories' => $totals_cats)));

$this->response->setOutput($json);

}

private function getProductsTmpl($results, $product_total) {

$this->load->language('product/category');

$data['text_refine'] = $this->language->get('text_refine');

$data['text_empty'] = $this->language->get('text_empty');

$data['text_quantity'] = $this->language->get('text_quantity');

$data['text_manufacturer'] = $this->language->get('text_manufacturer');

$data['text_model'] = $this->language->get('text_model');

$data['text_price'] = $this->language->get('text_price');

$data['text_tax'] = $this->language->get('text_tax');

$data['text_points'] = $this->language->get('text_points');

$data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));

$data['text_display'] = $this->language->get('text_display');

$data['text_list'] = $this->language->get('text_list');

$data['text_grid'] = $this->language->get('text_grid');

$data['text_sort'] = $this->language->get('text_sort');

$data['text_limit'] = $this->language->get('text_limit');

$data['button_cart'] = $this->language->get('button_cart');

$data['button_wishlist'] = $this->language->get('button_wishlist');

$data['button_compare'] = $this->language->get('button_compare');

$data['button_continue'] = $this->language->get('button_continue');

if (file_exists('catalog/view/theme/cosyone/js/countdown/jquery.countdown_' . $this->language->get('code') . '.js')) {

$this->document->addScript('catalog/view/theme/cosyone/js/countdown/jquery.countdown_' . $this->language->get('code') . '.js');

} else {

$this->document->addScript('catalog/view/theme/cosyone/js/countdown/jquery.countdown_en.js');

}

$this->load->language('common/cosyone');

$data['text_category_expire'] = $this->language->get('text_category_expire');

$data['cosyone_category_thumb'] = $this->config->get('cosyone_category_thumb');

$data['cosyone_grid_category'] = $this->config->get('cosyone_grid_category');

$data['cosyone_category_refine'] = $this->config->get('cosyone_category_refine');

$data['cosyone_category_per_row'] = $this->config->get('cosyone_category_per_row');

$data['cosyone_rollover_effect'] = $this->config->get('cosyone_rollover_effect');

$data['cosyone_percentage_sale_badge'] = $this->config->get('cosyone_percentage_sale_badge');

$cosyone_quicklook = $this->config->get('cosyone_text_ql');

if(empty($cosyone_quicklook[$this->language->get('code')])) {

$data['cosyone_text_ql'] = false;

} else if (isset($cosyone_quicklook[$this->language->get('code')])) {

$data['cosyone_text_ql'] = html_entity_decode($cosyone_quicklook[$this->language->get('code')], ENT_QUOTES, 'UTF-8');

}

$data['cosyone_brand'] = $this->config->get('cosyone_brand');

$data['cosyone_product_countdown'] = $this->config->get('cosyone_product_countdown');

$data['cosyone_product_hurry'] = $this->config->get('cosyone_product_hurry');

$data['cosyone_default_view'] = $this->config->get('cosyone_default_view');

$data['products'] = array();

foreach ($results as $result) {

if ($result['image']) {

$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));

} else {

$image = false;

}

if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {

$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$price = false;

}

if ((float)$result['special']) {

$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));

} else {

$special = false;

}

if ($this->config->get('config_tax')) {

$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);

} else {

$tax = false;

}

if ($this->config->get('config_review_status')) {

$rating = (int)$result['rating'];

} else {

$rating = false;

}

// Cosyone custom code starts

if ((float)$result['special']) {

$sales_percantage = ((($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')))-($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))))/(($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')))/100));

} else {

$sales_percantage = false;

}

if ((float)$result['special']) {

$special_info = $this->model_catalog_product->getSpecialPriceEnd($result['product_id']);

$special_date_end = strtotime($special_info['date_end']) - time();

} else {

$special_date_end = false;

}

$images = $this->model_catalog_product->getProductImages($result['product_id']);

if(isset($images[0]['image']) && !empty($images[0]['image'])){

$images =$images[0]['image'];

} else {

$images = false;

}

// Cosyone end

$data['products'][] = array(

'option_images' => $this->model_module_product_option_image_pro->getCategoryImages( $result['product_id'], "related_products" ),

'product_id' => $result['product_id'],

'thumb' => $image,

'name' => $result['name'],

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',

'price' => $price,

'special' => $special,

// Cosyone custom code starts

'sales_percantage' => number_format($sales_percantage, 0, ',', '.'),

'special_date_end' => $special_date_end,

'thumb_hover' => $this->model_tool_image->resize($images, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),

'brand_name' => $result['manufacturer'],

'quickview' => $this->url->link('product/quickview', 'product_id=' . $result['product_id'], '', 'SSL'),

'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1,

// Cosyone custom code ends

'tax' => $tax,

'rating' => $result['rating'],

'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),

'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])

);

}

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/adv_ajaxfilter_products.tpl')) {

return $this->load->view($this->config->get('config_template') . '/template/module/adv_ajaxfilter_products.tpl', $data);

} else {

return $this->load->view('default/template/module/adv_ajaxfilter_products.tpl', $data);

}

}

private function trim_array_values(array $array) {

foreach($array as $key => $value) {

if(is_array($value)) {

$array[$key] = $this->trim_array_values($value);

if(!count($array[$key])) {

unset($array[$key]);

}

} elseif(is_string($value)) {

$value = trim($value);

if(!$value) {

unset($array[$key]);

}

}

}

return $array;

}

}

?>

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер здесь не причем

 

Именно js-скрипт...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контроллер здесь не причем

 

Именно js-скрипт...

Сразу даже и не задумался о том, что кто-то то будет пытаться править url через js.

Попробовал сменить adv_ajax filter из древнего бекапа и всё отлично заработало.

Сравнил два файла и увидел, что в них очень много отличий и явно, что кто-то копипастил без знания дела.

Внутри комменты по русски и кодировка windows, a не utf-8)

Так что лишний раз нужно быть внимательным, что меняют контентщики и сеошники.

Задумка у того, кто делал исправления была интересная- модифицировать урл фильтра, чтобы он был красивым, а не как в стандартном виде. Но увы, только работает до 4 вложенности.

Я лично, не смог отловить баг в коде и довольствовался тем, что всё работает с бекапа.

Итого: всё дело было в js файле фильтра, который кто-то неудачно правил.

P.S Если у кого-то есть спортивный интерес сравнить исходник с правленым файлом или попробовать отловить баг, пишите в тему или обращайтесь в ЛС- добавлю файлы.

В принципе, тему можно закрывать.

Изменено пользователем vstubborn

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сразу даже и не задумался о том, что кто-то то будет пытаться править url через js.

Попробовал сменить adv_ajax filter из древнего бекапа и всё отлично заработало.

Сравнил два файла и увидел, что в них очень много отличий и явно, что кто-то копипастил без знания дела.

Внутри комменты по русски и кодировка windows, a не utf-8)

Так что лишний раз нужно быть внимательным, что меняют контентщики и сеошники.

Задумка у того, кто делал исправления была интересная- модифицировать урл фильтра, чтобы он был красивым, а не как в стандартном виде. Но увы, только работает до 4 вложенности.

Я лично, не смог отловить баг в коде и довольствовался тем, что всё работает с бекапа.

Итого: всё дело было в js файле фильтра, который кто-то неудачно правил.

P.S Если у кого-то есть спортивный интерес сравнить исходник с правленым файлом или попробовать отловить баг, пишите в тему или обращайтесь в ЛС- добавлю файлы.

В принципе, тему можно закрывать.

 

Привет,  у меня почти таже проблема - может подскажете что делать? 

Версия 1.5.х

 

Не редиректит в случаях, когда это каталог или подкаталог

https://massagecenter.ru/?utm_source=yandexmarket&utm_term=65 
https://massagecenter.ru/massagnye-krovati/?utm_source=yandexmarket&utm_term=65
https://massagecenter.ru/massagnye-kresla/anatomico/?utm_source=yandexmarket&utm_term=65 
Но если это товар, то НЕ работает

https://massagecenter.ru/massazhery/dlya-nog/massager-dlya-nog-canoo-3.html?utm_source=yandexmarket&utm_medium=cpc&utm_term=74'>https://massagecenter.ru/massazhery/dlya-nog/massager-dlya-nog-canoo-3.html?utm_source=yandexmarket&utm_medium=cpc&utm_term=74
идет сразу переадресация на

https://massagecenter.ru/massazhery/dlya-nog/massager-dlya-nog-canoo-3.html
В какую сторону смотреть ? Эту ветку читал https://opencartforum.com/topic/24946-решено-seo-pro-режет-ссылку/ Изменено пользователем intsite

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От SergeTkach
      Скачать/Купить дополнение


      Полный путь в ссылке производителя (фикс для SEO PRO)
      Данный фикс делает полные ссылки для производителей.
       
      По умолчанию SEO PRO генерирует ссылки отдельно взятого производителя так, что в URL отсутствует родительская страница (brands). Это вряд ли повлияет на SEO Вашего сайта, но раньше Google рекомендаовал делать именно так (была PDF-инструкция "Руководство по поисковой оптимизации для начинающих"). В данный момент такой рекомендации не обнаружено - https://support.google.com/webmasters/answer/7451184?hl=ru#hierarchy
       
      В общем, раз уж модификатор существует по просьбе отдельно взятого клиента, то решил его выложить
       
      Внимание!
      Данный фикс работает только для ветки 2.x и только при использовании модуля SEO PRO!
       
      ---
      Раз уж мы задели тему ЧПУ, то посмотрите еще одно мое бесплатное расширение - SEO URL Generator FREE, для автоматического заполнения ЧПУ в момент работы с товаром в админке. Для массовой генерации ссылок одним нажатием кнопки - воспользуйтесь PRO-версией.
       
      Добавил SergeTkach Добавлено 26.10.2018 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика http://sergetkach.com/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore 2.3 OpenCart.Pro, ocShop Opencart.pro 2.3  
    • От SergeTkach
      Данный фикс делает полные ссылки для производителей.
       
      По умолчанию SEO PRO генерирует ссылки отдельно взятого производителя так, что в URL отсутствует родительская страница (brands). Это вряд ли повлияет на SEO Вашего сайта, но раньше Google рекомендаовал делать именно так (была PDF-инструкция "Руководство по поисковой оптимизации для начинающих"). В данный момент такой рекомендации не обнаружено - https://support.google.com/webmasters/answer/7451184?hl=ru#hierarchy
       
      В общем, раз уж модификатор существует по просьбе отдельно взятого клиента, то решил его выложить
       
      Внимание!
      Данный фикс работает только для ветки 2.x и только при использовании модуля SEO PRO!
       
      ---
      Раз уж мы задели тему ЧПУ, то посмотрите еще одно мое бесплатное расширение - SEO URL Generator FREE, для автоматического заполнения ЧПУ в момент работы с товаром в админке. Для массовой генерации ссылок одним нажатием кнопки - воспользуйтесь PRO-версией.
       
    • От GrindBalls
      Здравствуйте! Подскажите молодому и неопытному почему после установки SeoPro страница с категориями товаров не открывается нормально, вместо них программный код. Товары, информационные страницы, регистрация, заказ все работает правильно, если оставить стандартные настройки, то категории работают. Сайт kigurumix.ru
      Настройки:
      версия opencart 2.3
      Включить Seopro: да
      Включить с категориями: да
      Префикс: .html
      Язык шаблона английский, но переведен на русский. 
      Кэш чистил
      почистил дубли в phpMyAdmin и удалил ненужные товары которые шли с шаблоном
      урлы заполнены есть на всех товарах и категориях
      файл .htaccess в нормальном формате, текст:
      SetOutputFilter DEFLATE SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip Header unset ETag FileETag None <FilesMatch "(?i)^.*\.(ico|flv|jpg|jpeg|png|gif|js|css)$"> Header unset Last-Modified Header set Expires "Fri, 21 Dec 2100 00:00:00 GMT" Header set Cache-Control "public, no-transform" </FilesMatch> <IfModule mod_expires.c> ExpiresActive on # Perhaps better to whitelist expires rules? Perhaps. ExpiresDefault "access plus 1 month" # cache.appcache needs re-requests in FF 3.6 (thx Remy ~Introducing HTML5) ExpiresByType text/cache-manifest "access plus 0 seconds" # Your document html ExpiresByType text/html "access plus 0 seconds" # Data ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" # RSS feed ExpiresByType application/rss+xml "access plus 1 hour" # Favicon (cannot be renamed) ExpiresByType image/x-icon "access plus 1 week" # Media: images, video, audio ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # HTC files (css3pie) ExpiresByType text/x-component "access plus 1 month" # Webfonts ExpiresByType font/truetype "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS and JavaScript ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" <IfModule mod_headers.c> Header append Cache-Control "public" </IfModule> </IfModule> # 1.To use URL Alias you need to be running apache with mod_rewrite enabled. # 2. In your opencart directory rename htaccess.txt to .htaccess. # For any support issues please visit: http://www.opencart.com Options +FollowSymlinks # Prevent Directoy listing Options -Indexes # Prevent Direct Access to files <FilesMatch "(?i)((\.tpl|\.ini|\.log|(?<!robots)\.txt))"> Order deny,allow Deny from all </FilesMatch> # SEO URL Settings RewriteEngine On # If your opencart installation does not run on the main web folder make sure you folder it does run in ie. / becomes /shop/ RewriteBase / RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] RewriteRule ^googlebase.xml$ index.php?route=feed/google_base [L] RewriteRule ^system/download/(.*) index.php?route=error/not_found [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|js|css) RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA] ### Additional Settings that may need to be enabled for some servers ### Uncomment the commands by removing the # sign in front of it. ### If you get an "Internal Server Error 500" after enabling any of the following settings, restore the # as this means your host doesn't allow that. # 1. If your cart only allows you to add one item at a time, it is possible register_globals is on. This may work to disable it: # php_flag register_globals off # 2. If your cart has magic quotes enabled, This may work to disable it: # php_flag magic_quotes_gpc Off # 3. Set max upload file size. Most hosts will limit this and not allow it to be overridden but you can try # php_value upload_max_filesize 999M # 4. set max post size. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # php_value post_max_size 999M # 5. set max time script can take. uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # php_value max_execution_time 200 # 6. set max time for input to be recieved. Uncomment this line if you have a lot of product options or are getting errors where forms are not saving all fields # php_value max_input_time 200 # 7. disable open_basedir limitations # php_admin_value open_basedir none  
    • От freelancer
      599.00 руб
      Скачать/Купить дополнение


      модуль управления seo_pro для opencart
      автоматическая установка SeoPro для движков Opencart версии 2.3
      редактирование урлов из админки авто очистка кеша SeoPro подсказки почему чпу не работает  
      в некоторых случаях бывает что seo_pro с кешем работает медленнее, потому как уходит куча времени на работу с файлом кеша, потому добавил seo_pro без кеша для 2.3
      Добавил freelancer Добавлено 09.07.2015 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3 ocStore Несовместим OpenCart.Pro, ocShop  
    • От freelancer
      автоматическая установка SeoPro для движков Opencart версии 2.3
      редактирование урлов из админки авто очистка кеша SeoPro подсказки почему чпу не работает  
      в некоторых случаях бывает что seo_pro с кешем работает медленнее, потому как уходит куча времени на работу с файлом кеша, потому добавил seo_pro без кеша для 2.3
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.