Передача параметра в качестве элемента URI в CI не приводит к автоматическому преобразованию его в переменную, ожидаемую функцией.
Я предлагаю следующее:
public function Track_Open_Email ($email)
{
// this will take https://domain.tld/controller/track_open_email/email_address and
assign email_address to $email:
$email = $this->uri->segment(3);
$this->Email_model->Set_Track_Open_Email($email , $data);
}
Имейте в виду, что этот точный код требует предварительной загрузки помощника по URL и имеет небольшое предостережение: поскольку вы проверяете только адрес электронной почты, если выесли одному и тому же получателю отправлено несколько разных писем, то при прочтении одного из них все они будут помечены как прочитанные.
Я бы рекомендовал передавать другой параметр (например, <img src="'. base_url().'Email/Track_Open_Email/'.$toEmail.'/.$email_id.'" width="80" height="80" />
) для каждого отдельного почтового сообщения, чтобы при синтаксическом анализе $this->uri->segment(3)
и $this->uri->segment(4)
и назначив каждому отдельное значение, вы можете пометить только это конкретное письмо как прочитанное:
public function Track_Open_Email ($email)
{
// this will take https://domain.tld/controller/track_open_email/email_address/email_id and
assign email_address to $email:
$email = $this->uri->segment(3);
$email_id = $this->uri->segment(4);
// now pass both params to the Set_Track_Open_Email model:
$params = array('email'=>$email, 'email_id'=>$email_id);
$this->Email_model->Set_Track_Open_Email($params , $data);
}
Наконец, в модели запустите запрос на обновление, используя оба параметра (вы получите к ним доступкак $params['email']
и $params['email_id']
и пометьте только конкретное письмо, прочитанное этим конкретным пользователем.
Для ясности: $email_id
должно иметь значение, которое однозначно идентифицирует "кампанию" из-за отсутствия лучшего словаТаким образом, если сегодня вы отправите электронное письмо всем своим 10000 пользователям, информирующее их о чем-то, то эти 10000 отправленных электронных писем будут иметь тот же email_id (это может быть что угодноg: одноразовый номер, хеш с датой отправки или что-то еще, если ни одно другое письмо не имеет такой же).Если завтра вы отправите еще одно электронное письмо своим пользователям, оно будет иметь другой email_id.Что вы делаете с этим?Если я читаю ваше первое письмо, я отмечаюсь как прочитавшее первое письмо, а не оба.Вторым преимуществом является то, что вы можете отслеживать открытые тарифы для каждого письма отдельно.