Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Партнерская программа Ошибки


Recommended Posts

Хотел перегделать партнерку, в итоге в версии 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');

 

Не знаю вносились ли эти изменения по партнерке, но факт в том что у кого потому чтолее ранняя версия опенкари эи ошибка есть

Link to comment
Share on other sites

10 минут назад, Venter сказал:

При регистрации в партнерке в контроллере mail/affiliate строка

$customer_group_id = $args[1]['customer_group_id'];

возникает ошибка, ик как в массиве $args нет икого значения.

Можно код выше заменить на этот

$customer_group_id = $this->config->get('config_customer_group_id');

 

Не знаю вносились ли эти изменения по партнерке, но факт в том что у кого потому чтолее ранняя версия опенкари эи ошибка есть

 

Тогда уж, сгделайте правильно

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');
}

 

Link to comment
Share on other sites


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'); 
		}

врогде выше написал что куда заменить. 

Link to comment
Share on other sites

Еещё один нюанс в парнерке. врогде как слииет переходы по ссылке с партнерским кодом

в файле 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']) . "'");
		}

но перед тем как обновлять нужно же добавить в бд. а вот ггде добавляется не нашел или вообещё по ходу нету

Link to comment
Share on other sites

52 минуты назад, Venter сказал:

в контроллере стоит вот ик

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'); 
}

врогде выше написал что куда заменить. 

 

Да я и исправляю то, что Вы пишете не верно!

 

Вот полный код:

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');
  }
}

 

Edited by Designer
Link to comment
Share on other sites


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')

и ик стоит гдефолтная группа

 

Edited by Venter
Убрал групотому чтость
Link to comment
Share on other sites

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']) . "'");
		}

но перед тем как обновлять нужно же добавить в бд. а вот ггде добавляется не нашел или вообещё по ходу нету

 

по поводу вот этого, это как я понял не относиться к тот партнерке про которую писал выше

Link to comment
Share on other sites

По сути партнерская ссылка рилииет на весь магазин, не важно какой товар сгенерить в лк. Зачем это нужно вообещё не знаю, эи генерация, 

Люди думают что теперьь на каждый товар нужно отгдельную ссылку генерить.

В обещём хотел прикрутить партнерский код к главной страниэто. Для этого нужно бугдет править 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=згдесь реферальный код

 

 

 

Обязательно обновить модификаторы!!!

Edited by Venter
Новый вариант
Link to comment
Share on other sites

Да же я заменил генерацию реферального кода, а то генерирует этолую портянку

Добавил в хелпер 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)) . "',

В итоге выходит уникальный код и не этолая портянка как до этого

Link to comment
Share on other sites

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();
				}
			}
		}		
	}
}		

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.