AlexMax13 Опубліковано: 4 лютого Share Опубліковано: 4 лютого Можно ли как-то получить id категории в файле /catalog/controller/startup/seo_url.php Содержимое файла: Скрытый текст <?php class ControllerStartupSeoUrl extends Controller { public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); // remove any empty arrays from trailing if (utf8_strlen(end($parts)) == 0) { array_pop($parts); } foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($part) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'"); if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') { $this->request->get['route'] = $query->row['query']; } } else { $this->request->get['route'] = 'error/not_found'; break; } } if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } // Redirect 301 } elseif (isset($this->request->get['route']) && empty($this->request->post) && !isset($this->request->get['token']) && $this->config->get('config_seo_url')) { $arg = ''; $cat_path = false; $route = $this->request->get['route']; if ($this->request->get['route'] == 'product/product' && isset($this->request->get['product_id'])) { $route = 'product_id=' . (int)$this->request->get['product_id']; } elseif ($this->request->get['route'] == 'product/category' && isset($this->request->get['path'])) { $categorys_id = explode('_', $this->request->get['path']); $cat_path = ''; foreach ($categorys_id as $category_id) { $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE `query` = 'category_id=" . (int)$category_id . "' AND `store_id` = '" . (int)$this->config->get('config_store_id') . "' AND `language_id` = '" . (int)$this->config->get('config_language_id') . "'"); if ($query->num_rows && $query->row['keyword'] /**/ ) { $cat_path .= '/' . $query->row['keyword']; } else { $cat_path = false; break; } } $arg = trim($cat_path, '/'); if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page']; } elseif ($this->request->get['route'] == 'product/manufacturer/info' && isset($this->request->get['manufacturer_id'])) { $route = 'manufacturer_id=' . (int)$this->request->get['manufacturer_id']; if (isset($this->request->get['page'])) $arg = $arg . '?page=' . (int)$this->request->get['page']; } elseif ($this->request->get['route'] == 'information/information' && isset($this->request->get['information_id'])) { $route = 'information_id=' . (int)$this->request->get['information_id']; } elseif (sizeof($this->request->get) > 1) { $args = '?' . str_replace("route=" . $this->request->get['route'].'&', "", $this->request->server['QUERY_STRING']); $arg = str_replace('&', '&', $args); } $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE `query` = '" . $this->db->escape($route) . "' AND `store_id` = '" . (int)$this->config->get('config_store_id') . "' AND `language_id` = '" . (int)$this->config->get('config_language_id') . "'"); if (!empty($query->num_rows) && !empty($query->row['keyword']) && $route) { $this->response->redirect($query->row['keyword'] . $arg, 301); } elseif ($cat_path) { $this->response->redirect($arg, 301); } elseif ($this->request->get['route'] == 'common/home') { $this->response->redirect(HTTP_SERVER . $arg, 301); } } } public function rewrite($link) { $url_info = parse_url(str_replace('&', '&', $link)); $url = ''; $data = array(); parse_str($url_info['query'], $data); foreach ($data as $key => $value) { if (isset($data['route'])) { if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/' . $query->row['keyword']; unset($data[$key]); } } elseif ($key == 'path') { $categories = explode('_', $value); foreach ($categories as $category) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = 'category_id=" . (int)$category . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); if ($query->num_rows && $query->row['keyword']) { $url .= '/' . $query->row['keyword']; } else { $url = ''; break; } } unset($data[$key]); } elseif ($key == 'route') { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE `query` = '" . $this->db->escape($data['route']) . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'"); if ($query->num_rows) /**/ { $url .= '/' . $query->row['keyword']; } } } } if ($url) { unset($data['route']); $query = ''; if ($data) { foreach ($data as $key => $value) { $query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((is_array($value) ? http_build_query($value) : (string)$value)); } if ($query) { $query = '?' . str_replace('&', '&', trim($query, '&')); } } return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query; } else { return $link; } } } Мне нужно для того, чтобы исключить кое какой код только для категории с id 190. Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 4 лютого Share Опубліковано: 4 лютого if (!empty($this->request->get['path']) { $path = explode('_', (string)$this->request->get['path']); $category_id = (int)array_pop($path); if ($category_id == 190) { magic } } Надіслати Поділитися на інших сайтах More sharing options... buslikdrev Опубліковано: 5 лютого Share Опубліковано: 5 лютого $get = $this->request->get; if (isset($get['path']) && is_string($get['path']) && mb_substr($get['path'], -3) == '190') { // id 190 } Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого (змінено) @spectre спасибо, но не работает корректно. Срабатывает для дополнительного языка сайта, но не для основного. вот так работает корректно для обеих версий: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Но напрягает что нужно менять если я изменю seo_url, поэтому хотел именно по id категории upd: понял что ваш вариант не работает в любом случае. пытаюсь решить. Змінено 6 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 7 лютого Share Опубліковано: 7 лютого 07.02.2025 в 00:39, AlexMax13 сказал: Почему это происходит - не понятно вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 7 лютого Автор Share Опубліковано: 7 лютого (змінено) 07.02.2025 в 05:38, spectre сказал: вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Но системе фиолетово. Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию. Даже если проверять на наличие категории и только тогда выполнять - не сработает, потому что нужный нам код выполнится в первом подходе, где нету данных о категории. Да и вставлять код больше некуда. врядли он будет лучше работать за пределами функции))) Змінено 7 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 8 лютого Share Опубліковано: 8 лютого 07.02.2025 в 22:36, AlexMax13 сказал: Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию попросите чат гпт разъяснить вам что такое цикл а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро напишите полную задачу - вам подскажут в какую сторону двигаться Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 13 лютого Автор Share Опубліковано: 13 лютого 08.02.2025 в 08:23, spectre сказал: а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро Да я бы никогда такого не делал, но человеку нужно именно так. Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... buslikdrev Опубліковано: 1 березня Share Опубліковано: 1 березня 07.02.2025 в 00:28, AlexMax13 сказал: @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Да, вы правы. Эта переменная должна содержать только айди или список айди через нижнее подчёркивание. 07.02.2025 в 01:39, AlexMax13 сказал: понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Это значит сначала в базе находит айди города, а потом айди категории. Вам нужно после этого массива (который определяет параметры по ссылке из базы) делать условия. В этом блоке: if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Даже проверку $this->request->get['path'] делать не нужно. А из этого куска можете в переменную выделить свою категорию. if ($url[0] == 'category_id') { if ($url[1] == '190') { $my_cat = 190; } if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } Дальше в итоге if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { if (isset($my_cat)) { unset($this->request->get['geo_city_id']); // параметр удалён, когда категория 190 } $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 3 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить id категории в seo_url Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Всі товари магазину Автор: kJlukOo PAK - Аксесуари для товарів та комплекти Автор: OcEx Список Замовлень PRO Автор: Parallax З цим товаром також купують - Opencart-модуль Автор: vsevolodkarpykov LookBook Автор: 29aleksey × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
buslikdrev Опубліковано: 5 лютого Share Опубліковано: 5 лютого $get = $this->request->get; if (isset($get['path']) && is_string($get['path']) && mb_substr($get['path'], -3) == '190') { // id 190 } Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого (змінено) @spectre спасибо, но не работает корректно. Срабатывает для дополнительного языка сайта, но не для основного. вот так работает корректно для обеих версий: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Но напрягает что нужно менять если я изменю seo_url, поэтому хотел именно по id категории upd: понял что ваш вариант не работает в любом случае. пытаюсь решить. Змінено 6 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 7 лютого Share Опубліковано: 7 лютого 07.02.2025 в 00:39, AlexMax13 сказал: Почему это происходит - не понятно вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 7 лютого Автор Share Опубліковано: 7 лютого (змінено) 07.02.2025 в 05:38, spectre сказал: вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Но системе фиолетово. Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию. Даже если проверять на наличие категории и только тогда выполнять - не сработает, потому что нужный нам код выполнится в первом подходе, где нету данных о категории. Да и вставлять код больше некуда. врядли он будет лучше работать за пределами функции))) Змінено 7 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 8 лютого Share Опубліковано: 8 лютого 07.02.2025 в 22:36, AlexMax13 сказал: Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию попросите чат гпт разъяснить вам что такое цикл а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро напишите полную задачу - вам подскажут в какую сторону двигаться Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 13 лютого Автор Share Опубліковано: 13 лютого 08.02.2025 в 08:23, spectre сказал: а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро Да я бы никогда такого не делал, но человеку нужно именно так. Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... buslikdrev Опубліковано: 1 березня Share Опубліковано: 1 березня 07.02.2025 в 00:28, AlexMax13 сказал: @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Да, вы правы. Эта переменная должна содержать только айди или список айди через нижнее подчёркивание. 07.02.2025 в 01:39, AlexMax13 сказал: понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Это значит сначала в базе находит айди города, а потом айди категории. Вам нужно после этого массива (который определяет параметры по ссылке из базы) делать условия. В этом блоке: if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Даже проверку $this->request->get['path'] делать не нужно. А из этого куска можете в переменную выделить свою категорию. if ($url[0] == 'category_id') { if ($url[1] == '190') { $my_cat = 190; } if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } Дальше в итоге if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { if (isset($my_cat)) { unset($this->request->get['geo_city_id']); // параметр удалён, когда категория 190 } $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 3 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить id категории в seo_url Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення Всі товари магазину Автор: kJlukOo PAK - Аксесуари для товарів та комплекти Автор: OcEx Список Замовлень PRO Автор: Parallax З цим товаром також купують - Opencart-модуль Автор: vsevolodkarpykov LookBook Автор: 29aleksey
AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого (змінено) @spectre спасибо, но не работает корректно. Срабатывает для дополнительного языка сайта, но не для основного. вот так работает корректно для обеих версий: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Но напрягает что нужно менять если я изменю seo_url, поэтому хотел именно по id категории upd: понял что ваш вариант не работает в любом случае. пытаюсь решить. Змінено 6 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options...
AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Надіслати Поділитися на інших сайтах More sharing options...
AlexMax13 Опубліковано: 6 лютого Автор Share Опубліковано: 6 лютого понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 7 лютого Share Опубліковано: 7 лютого 07.02.2025 в 00:39, AlexMax13 сказал: Почему это происходит - не понятно вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 7 лютого Автор Share Опубліковано: 7 лютого (змінено) 07.02.2025 в 05:38, spectre сказал: вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Но системе фиолетово. Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию. Даже если проверять на наличие категории и только тогда выполнять - не сработает, потому что нужный нам код выполнится в первом подходе, где нету данных о категории. Да и вставлять код больше некуда. врядли он будет лучше работать за пределами функции))) Змінено 7 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options... spectre Опубліковано: 8 лютого Share Опубліковано: 8 лютого 07.02.2025 в 22:36, AlexMax13 сказал: Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию попросите чат гпт разъяснить вам что такое цикл а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро напишите полную задачу - вам подскажут в какую сторону двигаться Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 13 лютого Автор Share Опубліковано: 13 лютого 08.02.2025 в 08:23, spectre сказал: а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро Да я бы никогда такого не делал, но человеку нужно именно так. Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... buslikdrev Опубліковано: 1 березня Share Опубліковано: 1 березня 07.02.2025 в 00:28, AlexMax13 сказал: @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Да, вы правы. Эта переменная должна содержать только айди или список айди через нижнее подчёркивание. 07.02.2025 в 01:39, AlexMax13 сказал: понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Это значит сначала в базе находит айди города, а потом айди категории. Вам нужно после этого массива (который определяет параметры по ссылке из базы) делать условия. В этом блоке: if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Даже проверку $this->request->get['path'] делать не нужно. А из этого куска можете в переменную выделить свою категорию. if ($url[0] == 'category_id') { if ($url[1] == '190') { $my_cat = 190; } if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } Дальше в итоге if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { if (isset($my_cat)) { unset($this->request->get['geo_city_id']); // параметр удалён, когда категория 190 } $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 3 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Загальні питання Получить id категории в seo_url
AlexMax13 Опубліковано: 7 лютого Автор Share Опубліковано: 7 лютого (змінено) 07.02.2025 в 05:38, spectre сказал: вы просто не туда вставляете код, если его нужно выполнять только для категории то нужно сначала убедиться что роут это категория и тогда уже проверять path Но системе фиолетово. Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию. Даже если проверять на наличие категории и только тогда выполнять - не сработает, потому что нужный нам код выполнится в первом подходе, где нету данных о категории. Да и вставлять код больше некуда. врядли он будет лучше работать за пределами функции))) Змінено 7 лютого користувачем AlexMax13 Надіслати Поділитися на інших сайтах More sharing options...
spectre Опубліковано: 8 лютого Share Опубліковано: 8 лютого 07.02.2025 в 22:36, AlexMax13 сказал: Она в любом случае первый раз выполняет для всего кода, а второй уже содержит категорию попросите чат гпт разъяснить вам что такое цикл а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро напишите полную задачу - вам подскажут в какую сторону двигаться Надіслати Поділитися на інших сайтах More sharing options... AlexMax13 Опубліковано: 13 лютого Автор Share Опубліковано: 13 лютого 08.02.2025 в 08:23, spectre сказал: а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро Да я бы никогда такого не делал, но человеку нужно именно так. Надіслати Поділитися на інших сайтах More sharing options... 3 weeks later... buslikdrev Опубліковано: 1 березня Share Опубліковано: 1 березня 07.02.2025 в 00:28, AlexMax13 сказал: @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Да, вы правы. Эта переменная должна содержать только айди или список айди через нижнее подчёркивание. 07.02.2025 в 01:39, AlexMax13 сказал: понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Это значит сначала в базе находит айди города, а потом айди категории. Вам нужно после этого массива (который определяет параметры по ссылке из базы) делать условия. В этом блоке: if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Даже проверку $this->request->get['path'] делать не нужно. А из этого куска можете в переменную выделить свою категорию. if ($url[0] == 'category_id') { if ($url[1] == '190') { $my_cat = 190; } if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } Дальше в итоге if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { if (isset($my_cat)) { unset($this->request->get['geo_city_id']); // параметр удалён, когда категория 190 } $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 3 Перейти до списку тем Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
AlexMax13 Опубліковано: 13 лютого Автор Share Опубліковано: 13 лютого 08.02.2025 в 08:23, spectre сказал: а вообще вы делаете какой-то адский костыль вставляя geo city id в сеопро Да я бы никогда такого не делал, но человеку нужно именно так. Надіслати Поділитися на інших сайтах More sharing options...
buslikdrev Опубліковано: 1 березня Share Опубліковано: 1 березня 07.02.2025 в 00:28, AlexMax13 сказал: @buslikdrev также спасибо, но как я понимаю, этот вариант будет считать за истинну все что оканчивается на 190, а не только id категории Да, вы правы. Эта переменная должна содержать только айди или список айди через нижнее подчёркивание. 07.02.2025 в 01:39, AlexMax13 сказал: понял в чем беда. нельзя надеятся на explode('_', (string)$this->request->get['path']); так как он живет своей жизнью. сделал так: if (!empty($this->request->get['path'])) { $udata = explode('_', (string)$this->request->get['path']); $sid = (int)array_pop($udata); } echo '<pre>SID: '; var_dump($sid); echo '</pre>'; if ($sid != 190) { if ($url[0] == 'geo_city_id') { $this->request->get['geo_city_id'] = $url[1]; } } и увидел что запрос дублируется. первый раз я получаю NULL и только вторым 190. https://prnt.sc/YBTPeYVw5Oxj Почему это происходит - не понятно. Но теперь понимаю что единственный вариант исключить этот код: $this->request->get['geo_city_id'] = $url[1]; для категории id 190, это только с помощью seo_url. Т.е. так: if (strpos($this->request->get['_route_'], 'fast_buy') === false && strpos($this->request->get['_route_'], 'quick_buy') === false) { $this->request->get['geo_city_id'] = $url[1]; } Это значит сначала в базе находит айди города, а потом айди категории. Вам нужно после этого массива (который определяет параметры по ссылке из базы) делать условия. В этом блоке: if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Даже проверку $this->request->get['path'] делать не нужно. А из этого куска можете в переменную выделить свою категорию. if ($url[0] == 'category_id') { if ($url[1] == '190') { $my_cat = 190; } if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } Дальше в итоге if (!isset($this->request->get['route'])) { if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { if (isset($my_cat)) { unset($this->request->get['geo_city_id']); // параметр удалён, когда категория 190 } $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/info'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 3
Recommended Posts