Venter Опубліковано: 9 квітня 2021 Share Опубліковано: 9 квітня 2021 Хотел переделать партнерку, в итоге в версии ocStore 3.0.2.0 нашел ошибки. В контроллере account/tracking.php в методе autocomplete идет генерация ссылки. Если включен СЕОПРО и у продукта есть СЕО ссылка то партнерский код обрезается. Долго не думая, заменил вот это foreach ($results as $result) { $json[] = array( 'name' => strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')), 'link' => $links ); } на вот это foreach ($results as $result) { if( $this->config->get('config_seo_pro') ) { $links = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $result['product_id'])) . '?tracking=' . $tracking; } else { $links = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $result['product_id'] . '&tracking=' . $tracking)); } $json[] = array( 'name' => strip_tags(html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')), 'link' => $links ); } по сути конечно же нужно бы еще проверить есть ли у продукта сео ссылка. думаю кто в теме разработки сделать труда не составит Далее При регистрации в партнерке в контроллере mail/affiliate строка $customer_group_id = $args[1]['customer_group_id']; возникает ошибка, так как в массиве $args нет такого значения. Можно код выше заменить на этот $customer_group_id = $this->config->get('config_customer_group_id'); Не знаю вносились ли эти изменения по партнерке, но факт в том что у кого более ранняя версия опенкарта эта ошибка есть Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 27 минут назад, Designer сказал: Тогда уж, сделайте правильно if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } в контроллере стоит вот так if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getGroupId(); } else { $customer_group_id = $args[1]['customer_group_id']; } заменить на так if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } вроде выше написал что куда заменить. Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) 5 часов назад, Designer сказал: Так я и исправляю то, что Вы пишете не верно! Вот полный код: if ($this->customer->isLogged()) { $customer_group_id = (int)$this->customer->getGroupId(); } else { if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } } Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа Змінено 9 квітня 2021 користувачем Venter Убрал грубость Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 1 час назад, Venter сказал: Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету по поводу вот этого, это как я понял не относиться к той партнерке про которую писал выше Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 27 минут назад, Designer сказал: Тогда уж, сделайте правильно if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } в контроллере стоит вот так if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getGroupId(); } else { $customer_group_id = $args[1]['customer_group_id']; } заменить на так if ($this->customer->isLogged()) { $customer_group_id = $this->customer->getGroupId(); } else { $customer_group_id = $this->config->get('config_customer_group_id'); } вроде выше написал что куда заменить. Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) 5 часов назад, Designer сказал: Так я и исправляю то, что Вы пишете не верно! Вот полный код: if ($this->customer->isLogged()) { $customer_group_id = (int)$this->customer->getGroupId(); } else { if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } } Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа Змінено 9 квітня 2021 користувачем Venter Убрал грубость Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 1 час назад, Venter сказал: Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету по поводу вот этого, это как я понял не относиться к той партнерке про которую писал выше Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) 5 часов назад, Designer сказал: Так я и исправляю то, что Вы пишете не верно! Вот полный код: if ($this->customer->isLogged()) { $customer_group_id = (int)$this->customer->getGroupId(); } else { if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } } Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа Змінено 9 квітня 2021 користувачем Venter Убрал грубость Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 1 час назад, Venter сказал: Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету по поводу вот этого, это как я понял не относиться к той партнерке про которую писал выше Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) 5 часов назад, Designer сказал: Так я и исправляю то, что Вы пишете не верно! Вот полный код: if ($this->customer->isLogged()) { $customer_group_id = (int)$this->customer->getGroupId(); } else { if (isset($args[1]['customer_group_id'])){ $customer_group_id = (int)$args[1]['customer_group_id']; } else { $customer_group_id = (int)$this->config->get('config_customer_group_id'); } } Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа Змінено 9 квітня 2021 користувачем Venter Убрал грубость Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 1 час назад, Venter сказал: Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету по поводу вот этого, это как я понял не относиться к той партнерке про которую писал выше Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV × Уже зареєстровані? Ввійти Реєстрація Ваші замовлення Назад Придбані модулі та шаблони Ваші рахунки Лист очікувань Альтернативні контакти Форум Новини ocStore Назад Офіційний сайт Демо ocStore 3.0.3.2 Демо ocStore 2.3.0.2.4 Завантажити ocStore Документація Історія версій ocStore Блоги Модулі Шаблони Назад Безкоштовні шаблони Платні шаблони Де купувати модулі? Послуги FAQ OpenCart.Pro Назад Демо Купити Порівняння × Створити... Important Information На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність. Я даю згоду
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 1 час назад, Venter сказал: Еще один нюанс в парнерке. вроде как считает переходы по ссылке с партнерским кодом в файле Startup есть такие строки // Tracking Code if (isset($this->request->get['tracking'])) { setcookie('tracking', $this->request->get['tracking'], time() + 3600 * 24 * 1000, '/'); $this->db->query("UPDATE `" . DB_PREFIX . "marketing` SET clicks = (clicks + 1) WHERE code = '" . $this->db->escape($this->request->get['tracking']) . "'"); } но перед тем как обновлять нужно же добавить в бд. а вот где добавляется не нашел или вообще по ходу нету по поводу вот этого, это как я понял не относиться к той партнерке про которую писал выше Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки Покупцям Оплата розширень фізичними особами Оплата розширень юридичними особами Політика повернень Розробникам Регламент розміщення розширень Регламент продажу та підтримки розширень Віртуальний обліковий запис автора Політика просування оголошень API каталогу розширень Вирішення спорів щодо авторських прав Корисна інформація Публічна оферта Політика повернень Політика конфіденційності Платіжна політика Політика передачі особистих даних Політика прозорості Останні розширення SP Telegram повідомлення FREE Автор: spectre Відключити порожні категорії Автор: spectre SEO Автор тексту категорії / фільтра / блогу з датою оновлення контенту + мікророзмітка Автор: radaevich Промо банери в категоріях товарів Автор: IHOR1989 Trend - адаптивний універсальний шаблон Автор: DSV
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 (змінено) По сути партнерская ссылка работает на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообще не знаю, эта генерация, Люди думают что теперь на каждый товар нужно отдельную ссылку генерить. В общем хотел прикрутить партнерский код к главной странице. Для этого нужно будет править catalog/controller/startup/seo_url.php И так, смотрим в метод rewrite и находим строки 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]); } и заменяем на 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( $data['route'] == 'common/home' && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } elseif( !isset($data['route']) && isset($this->request->get['tracking']) ) { $url .= '/'; unset($data[$key]); } В итоге у вас будет два варианта партнерской ссылки на главную страницу 1) sait.ru/index.php?route=common/home&tracking=здесь реферальный код 2) sait.ru/index.php?tracking=здесь реферальный код Обязательно обновить модификаторы!!! Змінено 9 квітня 2021 користувачем Venter Новый вариант Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку Последние темы Последние дополнения Последние новости Вся активність Головна Opencart 3.x Opencart 3.x: Звіти про помилки Партнерская программа Ошибки
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 Так же я заменил генерацию реферального кода, а то генерирует целую портянку Добавил в хелпер system/helper/general.php свою функцию function randStr($len = 8, $default = '') { $arr = array_merge(range(0, 9), range('a', 'z')); shuffle($arr); $arr_to = array_slice($arr, 0, $len); if( empty($default) ) { $default = array(rand(1, 99)); } else { $default = array($default); } $arr_new = array_merge($arr_to, $default); shuffle($arr_new); return implode('', $arr_new); } В модели catalog/model/account/customer.php в методе addAffiliate заменил вот это `tracking` = '" . $this->db->escape(token(64)) . "', на `tracking` = '" . $this->db->escape(randStr(10, $customer_id)) . "', В итоге выходит уникальный код и не целая портянка как до этого Надіслати Поділитися на інших сайтах More sharing options... Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0 Перейти до списку тем Схожі публікації Sitemap не читаем и Гугл не видит Автор: stoparts, 7 травня 2022 сайт мапс sitemap (і ще %d) Теги: сайт мапс sitemap ошибки 3 відповіді 925 переглядів niger 8 травня 2022 Проблема - пустая главная страница Автор: sergiybigun, 28 квітня 2021 ошибки перенос 3 відповіді 705 переглядів sergiybigun 29 квітня 2021 При переносе сайта. Неустранимая ошибка. Автор: Dzhamal, 28 березня 2021 ошибки перенос сайта (і ще %d) Теги: ошибки перенос сайта платно 6 відповідей 986 переглядів Dzhamal 28 березня 2021 Доработка на сайте Автор: 123yuliya, 24 січня 2021 доработка программист (і ще %d) Теги: доработка программист ошибки страницы opencart 3 відповіді 785 переглядів Ksushkin 29 січня 2021 Не дает изменить товар Автор: Stokoles, 23 вересня 2020 товар админка (і ще %d) Теги: товар админка ocsotre ошибки логи 1 відповідь 530 переглядів Tom 23 вересня 2020 Зараз на сторінці 0 користувачів Ні користувачів, які переглядиють цю сторінку
Venter Опубліковано: 9 квітня 2021 Автор Share Опубліковано: 9 квітня 2021 5 часов назад, Venter сказал: Да что тут исправлять а???? Вот это if (isset($args[1]['customer_group_id'])) ЗАЧЕМ???? в массиве нет ключа customer_group_id. в $this->config->get('config_customer_group_id') и так стоит дефолтная группа По поводу получения дефолтной группы в контроллере mail/affiliate.php Немного посовещавшись с mpn2005 в телеграмм чате пришли к выводу что там получение дефолтной группы вообще не к чему В итоге вот весь файл контроллера с удалением не нужного class ControllerMailAffiliate extends Controller { public function index(&$route, &$args, &$output) { $this->load->language('mail/affiliate'); $data['text_welcome'] = sprintf($this->language->get('text_welcome'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $data['text_login'] = $this->language->get('text_login'); $data['text_approval'] = $this->language->get('text_approval'); $data['text_service'] = $this->language->get('text_service'); $data['text_thanks'] = $this->language->get('text_thanks'); $data['approval'] = ''; $data['login'] = $this->url->link('affiliate/login', '', true); $data['store'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'); $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); if ($this->customer->isLogged()) { $mail->setTo($this->customer->getEmail()); } else { $mail->setTo($args[1]['email']); } $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'))); $mail->setText($this->load->view('mail/affiliate', $data)); $mail->send(); } public function alert(&$route, &$args, &$output) { // Send to main admin email if new affiliate email is enabled if (in_array('affiliate', (array)$this->config->get('config_mail_alert'))) { $this->load->language('mail/affiliate'); $data['text_signup'] = $this->language->get('text_signup'); $data['text_website'] = $this->language->get('text_website'); $data['text_firstname'] = $this->language->get('text_firstname'); $data['text_lastname'] = $this->language->get('text_lastname'); $data['text_customer_group'] = $this->language->get('text_customer_group'); $data['text_email'] = $this->language->get('text_email'); $data['text_telephone'] = $this->language->get('text_telephone'); if ($this->customer->isLogged()) { $data['firstname'] = $this->customer->getFirstName(); $data['lastname'] = $this->customer->getLastName(); $data['email'] = $this->customer->getEmail(); $data['telephone'] = $this->customer->getTelephone(); } else { $data['firstname'] = $args[1]['firstname']; $data['lastname'] = $args[1]['lastname']; $data['email'] = $args[1]['email']; $data['telephone'] = $args[1]['telephone']; } $data['website'] = html_entity_decode($args[1]['website'], ENT_QUOTES, 'UTF-8'); $data['company'] = $args[1]['company']; $data['customer_group'] = ''; $mail = new Mail($this->config->get('config_mail_engine')); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($this->config->get('config_email')); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($this->language->get('text_new_affiliate'), ENT_QUOTES, 'UTF-8')); $mail->setText($this->load->view('mail/affiliate_alert', $data)); $mail->send(); // Send to additional alert emails if new affiliate email is enabled $emails = explode(',', $this->config->get('config_mail_alert_email')); foreach ($emails as $email) { if (utf8_strlen($email) > 0 && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } } } } Надіслати Поділитися на інших сайтах More sharing options... Створіть аккаунт або увійдіть для коментування Ви повинні бути користувачем, щоб залишити коментар Створити обліковий запис Зареєструйтеся для отримання облікового запису. Це просто! Зареєструвати аккаунт Вхід Уже зареєстровані? Увійдіть тут. Вхід зараз Share More sharing options... Передплатники 0
Recommended Posts