Перейти к содержанию
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

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От Mykhaylo
      Добрые люди, помогите разобраться.
      Делаю магазин, настраиваю, наполняю товарами, в данный момент уже более 700 товаров. ocStore 2.3.0.2.3. Сайт не запущен, пока делаю с помощью OpenServer и сайт лежит на винте. Когда закончу с наполнением товаров по основным категориям и настрою основные вещи, буду запускать магазин. Параллельно читаю, изучаю, учусь. Выяснил, что ссылки могут, во-первых дублироваться, во-вторых быть не постоянными. Оба этих момента, в дальнейшем, насколько я понял, повлияют на отображение результатов в поисковиках, и так оставлять точно не нужно.
      Прочитал о встроенных возможностях opencart'a и ЧПУ seo pro. И по мере изучения, вопросов и путаницы становится больше чем ответов =)
      В настоящий момент ссылка на товар "Samsung Galaxy J8 (2018) (SM-J810) (Black) 3/32" выглядит таким образом:
      site/index.php?route=product/product&path=24_80&product_id=764 Хотелось бы, что бы ссылка выглядела так:
      site/samsung-galaxy-j8-2018-sm-j810-black-3-32 или так: site/samsung-galaxy-j8-2018-sm-j810-black-3-32.html или может быть так? (есть ли смысл прописывать категорию в ссылке?) site/category1/category2/samsung-galaxy-j8-2018-sm-j810-black-3-32 А также, видел в других магазинах, что в ссылках ещё дописывают какой-то номер, скорее всего что-то типа порядкового номера, а также добавляют в ссылку ещё и слова, выглядит это так:
      site/samsung-galaxy-j8-2018-sm-j810-black-3-32-4278 или site/samsung-galaxy-j8-2018-sm-j810-black-3-32-moskva-i-oblast-4278 Зачем это сделано, я не понял. Может это как-то улучает позиции в поисковых запросах?
       
       
      Далее, если я включу seo pro, эти ссылки как-то сами создадутся, или их нужно будет прописывать вручную в карточку товара? Что будет с уже созданными карточками?
      Спасибо за ответы.
    • От var200w
      Сайт - http://tkdecor-m.ru/ .
      Сделал там ЧПУ и теперь, все страницы кроме главной отдают код 302.  Главная отдает 200.

      Пример - http://tkdecor-m.ru/potolochnyi-plintus/decor-ek/d20755/ , со старой страницы с параметрами редиректит на новую с кодом 301, здесь проблем нет. Со страницы без / тоже редиректит на новую страницу со слешем 301, тоже все ок.  Но вот финальная страница http://tkdecor-m.ru/potolochnyi-plintus/decor-ek/d20755/ отдает 302. 
       
      Читал про настройки ЧПУ и тд. Делал правки в файле seo_pro, ничего не помогает. 

      Если интересно, пишите цену в личку и сроки) 
    • От odorlega
      https://usvitok.ru/index.php?route=product/category&amp;path=271
      Добрый день. 
      Отвалились ЧПУ. 
      Можете подсказать как быть и что делать? 
      И если с каталогом все более или менее нормально, то! 
       
      https://usvitok.ru/zakazchikam/?newsblog_category_id=7
      Левые статьи отвалились и не реагируют.
       
      Подскажите куда капнуть и что почитать? 
       
      Капнул форум, выяснил что у меня ЧПУ через SeoPro стоит. 
       
      Ужасающий .htaccess - Можете с ним помочь? 
      Подсказать как его переписать, что тут лишнее, и вообще. 
    • От 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-версией.
       
  • Последние посетители   0 пользователей онлайн

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

×

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

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