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

Передача UTM меток в форме обратной связи

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

Пытаюсь передать utm метки в форме обратной связи. 

Создал в форме скрытые поля:

 <input type="hidden" name="source" class="source" value="<?php echo isset($this->request->get['utm_source']) ? $this->request->get['utm_source'] : 'нэт билэт' ;?>" />

Прописал в контроллере формы нужные строчки.

На почту приходит : нэт билет...

 

Так вот, может кто подскажет, как "выдернуть" utm метки из url ? 

 

Читал, что заносят в куки, потом из кук пилят и распихивают....

 

Рылся в коде seo_pro. Нашел там строки, где сеопро берет урл, тримит, пилит и пихает в массив для подмены, пробовал по аналогии, не пашет...

Может есть у кого рабочий кусочек кода, который позволяет "распилить" урл или вытащить метки из него?

 

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


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

Потому что её в урле то нет

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


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

мож я чего-то не понимаю, но вот урл:

/index.php?route=product/product&path=162&product_id=751?utm_source=istochneg&utm_term=keyword

 и вне опенкарта решение работает:

<input type="hidden" name="source" class="source" value="<?php echo isset($_GET['utm_source']) ? $_GET['utm_source'] : '' ;?>" />

потом передается переманная в обработчик и mail и все приходит

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

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


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

Это в контроллер к товару или где она там у Вас

$data['utm_source'] = isset($this->request->get('utm_source')) ? $this->request->get('utm_source') : ' ... ';

а в форме <?= $utm_source; ?>

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


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

Это в контроллер к товару или где она там у Вас

$data['utm_source'] = isset($this->request->get('utm_source')) ? $this->request->get('utm_source') : ' ... ';

а в форме <?= $utm_source; ?>

 

get не функция, круглые скобки заменить на квадратные. isset не нужен

  • +1 1

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


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

get не функция, круглые скобки заменить на квадратные. isset не нужен

постоянно путаю  :? эти скобки 

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


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

Опять же возвращает пустое значение...

if(!empty($this->request->get['utm_source'])) { 
        $data['utm_source'] = $this->request->get['utm_source']; 
		} else { $data['utm_source'] = '...'; 
							};

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


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

может все-таки нужно обрабатывать сам урл...

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

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


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

 

Опять же возвращает пустое значение...

if(!empty($this->request->get['utm_source'])) { 
        $data['utm_source'] = $this->request->get['utm_source']; 
		} else { $data['utm_source'] = '...'; 
							};

При таком условии значение не может быть пустым по определению

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


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

урл смотрите 

 

route=product/product&path=162&product_id=751?utm_source=istochneg&utm_term=keyword

 

должен быть амперсант 

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


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

Опять же возвращает пустое значение...

if(!empty($this->request->get['utm_source'])) { 
        $data['utm_source'] = $this->request->get['utm_source']; 
		} else { $data['utm_source'] = '...'; 
							};
У вас seo_pro?

В нем есть фикс, чтобы метки не отбрасывались?

Добавите к любой ссылке utm-метку и перейдите по ней. В адресной строке они остались?

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


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

урл смотрите 

 

route=product/product&path=162&product_id=751?utm_source=istochneg&utm_term=keyword

 

должен быть амперсант 

Так амперсанд - это не то, что вы выделили))))

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


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

Да остались метки в строке, я отключил ЧПУ...

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


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

Покажите, что в контроллере. Покажите, что в шаблоне.

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


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

Так амперсанд - это не то, что вы выделили))))

Ну так я выделил знак вопроса 

 

строка должна быть 

http://site.com/index.php?route=product/product&product_id=43 & utm_source=istochneg&utm_term=keyword

А щяс 

http://site.com/index.php?route=product/product&product_id=43 ? utm_source=istochneg&utm_term=keyword

Ну и что бы не гадать сделайте в контролере 

print_r($this->request->get);

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


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

Контроллер формы ( popup_call_phone.php - модуль всплывающей формы )

public function index() {
		$data = array();

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

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

		$data['heading_title'] = $this->language->get('heading_title');
		$data['button_close'] = $this->language->get('button_close');
		$data['button_send'] = $this->language->get('button_send');
		$data['enter_name'] = $this->language->get('enter_name');
		$data['enter_telephone'] = $this->language->get('enter_telephone');
		$data['enter_comment'] = $this->language->get('enter_comment');
        $data['enter_time'] = $this->language->get('enter_time');
        $data['text_select'] = $this->language->get('text_select');
        $data['text_loading'] = $this->language->get('text_loading');

		$data['name'] = ($this->customer->isLogged()) ? $this->customer->getFirstName() : '';
		$data['telephone'] = ($this->customer->isLogged()) ? $this->customer->getTelephone() : '';
		$data['comment'] = '';
		//$data['term'] = '';
		//$data['source'] = '';
        $data['time'] = '';
		if(!empty($this->request->get['utm_source'])) { 
        $data['utm_source'] = $this->request->get['utm_source']; 
		} else { $data['utm_source'] = '...'; 
							}; 
		if(file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/popup_call_phone.tpl')) {
			$view = $this->load->view($this->config->get('config_template') . '/template/module/popup_call_phone.tpl', $data);
		} else {
			$view = $this->load->view('default/template/module/popup_call_phone.tpl', $data);
		}

		$this->response->setOutput($view);
	}

шаблон формы:

<form method="post" enctype="multipart/form-data" id="call-phone-form">
      <div class="payment-info">
	  
	  <input type="hidden" name="source" class="source" value="<?php echo $utm_source;?>" />
  
        <?php if ($popup_call_phone_data['name']) { ?>
        <div>
          <label><?php echo $enter_name; ?><?php if ($popup_call_phone_data['name'] == 2) { ?><span class="required">*</span><?php } ?></label>
          <input name="name" value="<?php echo $name;?>" placeholder="<?php echo $enter_name; ?>" />
        </div>
        <?php } ?>
        <?php if ($popup_call_phone_data['telephone']) { ?>
        <div>
          <label><?php echo $enter_telephone; ?><?php if ($popup_call_phone_data['telephone'] == 2) { ?><span class="required">*</span><?php } ?></label>
          <input name="telephone" value="<?php echo $telephone;?>" placeholder="<?php echo $enter_telephone; ?>" />
        </div>
        <?php } ?>
        <?php if ($popup_call_phone_data['time']) { ?>
        <div>
          <label><?php echo $enter_time; ?><?php if ($popup_call_phone_data['time'] == 2) { ?><span class="required">*</span><?php } ?></label>
          <input name="time" value="<?php echo $time;?>" placeholder="<?php echo $enter_time; ?>" class="datetime" />
        </div>
        <?php } ?>
        <?php if ($popup_call_phone_data['comment']) { ?>
        <div>
          <label><?php echo $enter_comment; ?><?php if ($popup_call_phone_data['comment'] == 2) { ?><span class="required">*</span><?php } ?></label>
          <textarea name="comment" placeholder="<?php echo $enter_comment; ?>"><?php echo $comment;?></textarea>
        </div>
        <?php } ?>
      </div>
    </form>

Урл (именно такой он приходит  и в адресной строке остается): index.php?route=product/product&path=162&product_id=751?utm_source=zasd&utm_medium=jgyy&utm_campaign=kuyy&utm_term=bdish

 

Пробовал запихать в контроллер категории/ товара - безрезультатно...

 

вопрос менял на амперсанд... 

 

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

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

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


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

 

Ну так я выделил знак вопроса 

 

строка должна быть 

http://site.com/index.php?route=product/product&product_id=43 & utm_source=istochneg&utm_term=keyword

А щяс 

http://site.com/index.php?route=product/product&product_id=43 ? utm_source=istochneg&utm_term=keyword

Ну и что бы не гадать сделайте в контролере 

print_r($this->request->get);

Точно. Там вообще метка в продакт_айди ушла.

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


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

Точно. Там вообще метка в продакт_айди ушла.

И я об этом 

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


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

Дело в том, что урл и приходит в таком вот виде:

index.php?route=product/product&path=162&product_id=751?utm_source=istocj&utm_medium=rtrttr&utm_term=trtr&utm_content=&utm_campaign=rtrtrt

пробовал ручками менять на 

index.php?route=product/product&path=162&product_id=751&utm_source=istocj&utm_medium=rtrttr&utm_term=trtr&utm_content=&utm_campaign=rtrtrt

 

Ну так я выделил знак вопроса 

 

строка должна быть 

http://site.com/index.php?route=product/product&product_id=43 & utm_source=istochneg&utm_term=keyword

А щяс 

http://site.com/index.php?route=product/product&product_id=43 ? utm_source=istochneg&utm_term=keyword

Ну и что бы не гадать сделайте в контролере 

print_r($this->request->get);

 

 

Можно подробнее, В любом месте контроллера? А как вывести? (извинюсь, за возможно, ламерский вопрос, но это должно вывести массив, а для этого в шаблоне нужно вывод сделать?

)

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


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

Дело в том, что урл и приходит в таком вот виде:

index.php?route=product/product&path=162&product_id=751?utm_source=istocj&utm_medium=rtrttr&utm_term=trtr&utm_content=&utm_campaign=rtrtrt

пробовал ручками менять на 

index.php?route=product/product&path=162&product_id=751&utm_source=istocj&utm_medium=rtrttr&utm_term=trtr&utm_content=&utm_campaign=rtrtrt

Можно подробнее, В любом месте контроллера? А как вывести? (извинюсь, за возможно, ламерский вопрос, но это должно вывести массив, а для этого в шаблоне нужно вывод сделать?

)

 

в любом и получите весь массив $_GET

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


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

в любом и получите весь массив $_GET

Array   (   [route] => product/product   [path] => 162   [product_id] => 751   [utm_source] => zasd   [utm_medium] => jgyy   [utm_campaign] => kuyy   [utm_term] => bdish   )

 

 

Возвращает нужный массив с метками... 

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


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

Если в контроллере формы указывать, то получаем:

Undefined property: Action::$request in /home/u172474/1xetru/www/catalog/controller/module/popup_call_phone.php on line 1 
Notice: Trying to get property of non-object in <b>/home/u172474/1xetru/www/catalog/controller/module/popup_call_phone.phprray
(
    [route] => module/popup_call_phone
)
Хм... Это теперь на всех модулях (категория, главная, продукт и т.д.) отлавливать отдельно метки? 
Изменено пользователем djnick

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


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

 

Если в контроллере формы указывать, то получаем:

Undefined property: Action::$request in /home/u172474/1xetru/www/catalog/controller/module/popup_call_phone.php on line 1 
Notice: Trying to get property of non-object in <b>/home/u172474/1xetru/www/catalog/controller/module/popup_call_phone.phprray
(
    [route] => module/popup_call_phone
)
Хм... Это теперь на всех модулях (категория, главная, продукт и т.д.) отлавливать отдельно метки? 

попробуйте в самом модуле 

  • +1 1

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


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

Спасибо за оперативные ответы.

 

Не получается в модуле обратной связи, массив GET содержит только  путь до файла модуля...

 

Ситуация вот какая: установлен отдельный модуль - всплывающее модальное окно с формой обратной связи... 

 

Может чего подключить в нём еще надо...

 

Буду пытаться, Еще раз Спасибо.

 

полный код контроллера формы

<?php 
class ControllerModulePopupCallPhone extends Controller {


	public function index() {
		$data = array();

		$this->load->model('catalog/product');
		$this->load->language('module/popup_call_phone');
       
        $popup_call_phone_data = (array)$this->config->get('popup_call_phone_data');
        $data['popup_call_phone_data'] = $popup_call_phone_data;

		$data['heading_title'] = $this->language->get('heading_title');
		$data['button_close'] = $this->language->get('button_close');
		$data['button_send'] = $this->language->get('button_send');
		$data['enter_name'] = $this->language->get('enter_name');
		$data['enter_telephone'] = $this->language->get('enter_telephone');
		$data['enter_comment'] = $this->language->get('enter_comment');
        $data['enter_time'] = $this->language->get('enter_time');
        $data['text_select'] = $this->language->get('text_select');
        $data['text_loading'] = $this->language->get('text_loading');

		$data['name'] = ($this->customer->isLogged()) ? $this->customer->getFirstName() : '';
		$data['telephone'] = ($this->customer->isLogged()) ? $this->customer->getTelephone() : '';
		$data['comment'] = '';
		//$data['term'] = '';
		
        $data['time'] = '';

		if(file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/popup_call_phone.tpl')) {
			$view = $this->load->view($this->config->get('config_template') . '/template/module/popup_call_phone.tpl', $data);
		} else {
			$view = $this->load->view('default/template/module/popup_call_phone.tpl', $data);
		}

		$this->response->setOutput($view);
	}

  public function send() {
    $json = array();

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

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

    $popup_call_phone_data = (array)$this->config->get('popup_call_phone_data');

    if (isset($this->request->post['name'])) {
      if ((isset($popup_call_phone_data['name']) && $popup_call_phone_data['name'] == 2) && (utf8_strlen(trim($this->request->post['name'])) < 1) || (utf8_strlen(trim($this->request->post['name'])) > 32)) {
        $json['error']['field']['name'] = $this->language->get('error_name');
      }
    }
	
    if (isset($this->request->post['time'])) {
      if (isset($popup_call_phone_data['time']) && $popup_call_phone_data['time'] == 2) {
        if (empty($this->request->post['time'])) {
          $json['error']['field']['time'] = $this->language->get('error_time');
        }
      }
    }

    if (isset($this->request->post['telephone'])) {
      if ((isset($popup_call_phone_data['telephone']) && $popup_call_phone_data['telephone'] == 2) && (utf8_strlen($this->request->post['telephone']) < 3) || (utf8_strlen($this->request->post['telephone']) > 32)) {
        $json['error']['field']['telephone'] = $this->language->get('error_telephone');
      }
    }

    if (isset($this->request->post['comment'])) {
      if ((isset($popup_call_phone_data['comment']) && $popup_call_phone_data['comment'] == 2) && (utf8_strlen($this->request->post['comment']) < 3) || (utf8_strlen($this->request->post['comment']) > 500)) {
        $json['error']['field']['comment'] = $this->language->get('error_comment');
      }
    }

    if (!isset($json['error'])) {

      $post_data = $this->request->post;

      if (isset($post_data['name'])) {
        $data[] = array(
          'name'  => $this->language->get('enter_name'),
          'value' => $post_data['name']
        );
      }

      if (isset($post_data['telephone'])) {
        $data[] = array(
          'name'  => $this->language->get('enter_telephone'),
          'value' => $post_data['telephone']
        );
      }

      if (isset($post_data['comment'])) {
        $data[] = array(
          'name'  => $this->language->get('enter_comment'),
          'value' => $post_data['comment']
        );
      }

      if (isset($post_data['time'])) {
        $data[] = array(
          'name'  => $this->language->get('enter_time'),
          'value' => $post_data['time']
        );
      }

      $data_send = array(
        'info' => serialize($data),
      );

      $this->model_module_popup_call_phone->addRequest($data_send);

      $json['output'] = $this->language->get('text_success_send');

      if ($popup_call_phone_data['notify_status']) {

        $html_data['date_added'] = date('m/d/Y h:i:s a', time());
        $html_data['logo']         = $this->config->get('config_url').'image/'.$this->config->get('config_logo');      
        $html_data['store_name']   = $this->config->get('config_name');
        $html_data['store_url']    = $this->config->get('config_url');  
        
        $html_data['text_info']    = $this->language->get('text_info');  
        $html_data['text_date_added'] = $this->language->get('text_date_added');
        $html_data['data_info']    = $data;
        if (file_exists(DIR_TEMPLATE.$this->config->get('config_template').'/template/mail/popup_call_phone_mail.tpl')) {
          $html = $this->load->view($this->config->get('config_template').'/template/mail/popup_call_phone_mail.tpl', $html_data);
        } else {
          $html = $this->load->view('default/template/mail/popup_call_phone_mail.tpl', $html_data);
        }

        if (version_compare(VERSION, '2.0.2', '<')) {
          $mail = new Mail($this->config->get('config_mail'));
        } else {
          $mail = new Mail();
          $mail->protocol = $this->config->get('config_mail_protocol');
          $mail->parameter = $this->config->get('config_mail_parameter');
          $mail->smtp_hostname = (version_compare(VERSION, '2.0.3', '<')) ? $this->config->get('config_mail_smtp_host') : $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($popup_call_phone_data['notify_email']);
        $mail->setFrom($this->config->get('config_email'));
        $mail->setSender($this->config->get('config_name'));
        $mail->setSubject($this->language->get('heading_title')." -- ".$html_data['date_added']);
        $mail->setHtml($html);
        $mail->send();
      }
    }

    $this->response->addHeader('Content-Type: application/json');
    $this->response->setOutput(json_encode($json));
  }
}

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

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


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

Еще помучаю свой мозг сутки, если не допрет, куплю модуль))

 

а подключается он скриптом:

<script type="text/javascript">
        $(function() {
          $('body').prepend('<a onclick="get_popup_call_phone();" id="uptocall-mini"><div class="uptocall-mini-phone"></div></a>');
        });
        function get_popup_call_phone() {  
          $.magnificPopup.open({
            tLoading: '<img src="catalog/view/theme/sstore/stylesheet/popup_call_phone/ring-alt.svg" />',
            items: {
              src: 'index.php?route=module/popup_call_phone',
              type: 'ajax'
            }
          });
        }
        </script>

Так может передать как то можно переменные эти Ajax'ом...

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

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


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

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

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

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

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

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

Войти

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

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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