Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Как вывести поле "имя" в почтовом шаблоне "Сообщение пользователю о поступлении товара"

  • 28 августа, пятница
  • Здравствуйте, не могу разобраться, как вывести поле с типом "имя" с формы обратной связи (input type="text" name="username") в почтовом шаблоне "Сообщение пользователю о поступлении товара" в модуле каталога. В админке в списке ожидании поле "имя" выводится. В БД я создал строку username, потом в файле shop.admin.php прописал в массив $message[$row["lang_id"]] строку username в приватной функции send_mail_waitlist:
    Код
    /**
    * Отправляет уведомления о поступлении товара
    * @return void
    */
    private function send_mail_waitlist($params = array())
    {
    if (! $this->diafan->is_save_rewrite)
    {
    $this->diafan->get_rewrite();
    }

    Показать весь код

    if(empty($_POST["no_buy"]))
    {
    if($params)
    {
    asort($params);
    $param = serialize($params);
    }
    else
    {
    $param = '';
    }
    include_once ABSOLUTE_PATH.'includes/mail.php';
    $email = ($this->diafan->configmodules("emailconf", 'shop', $this->diafan->oldrow["site_id"])
    && $this->diafan->configmodules("email", 'shop', $this->diafan->oldrow["site_id"])
    ? $this->diafan->configmodules("email", 'shop', $this->diafan->oldrow["site_id"]) : '' );

    $result = DB::query("SELECT * FROM {shop_waitlist} WHERE trash='0' AND good_id=%d".($param ? " AND (param='%s' OR param='%s')" : ''), $this->diafan->save, $param, 'a:0:{}');
    while($row = DB::fetch_array($result))
    {
    if(! empty($GLOBALS["send_mail_waitlist"][$row["mail"]]))
    continue;

    $GLOBALS["send_mail_waitlist"][$row["mail"]] = true;

    if(! isset($subject[$row["lang_id"]]))
    {
    $subject[$row["lang_id"]] =
    str_replace(
    array (
    '%title',
    '%url'
    ), array (
    TITLE,
    BASE_URL
    ),
    $this->diafan->configmodules('subject_waitlist', 'shop', $this->diafan->oldrow["site_id"], $row["lang_id"]));

    $name = $row["lang_id"] == _LANG ? $_POST["name"] : $this->diafan->oldrow["name".$row["lang_id"]];
    $link = BASE_PATH;
    $username = $row["lang_id"] == _LANG ? $_POST["username"] : '';

    foreach($this->diafan->languages as $l)
    {
    if($row["lang_id"] == $l["id"] && ! $l["base_site"])
    {
    $link .= $l["shortname"].'/';
    }
    }
    $link .= $this->diafan->_route->link($this->diafan->save_site_id, "shop", $_POST["cat_id"], $this->diafan->save);
    if($params)
    {
    $i = 0;
    foreach($params as $k => $v)
    {
    if($v)
    {
    $link .= ($i ? '&' : '?').'p'.$k.'='.$v;
    $i++;
    }
    }
    }

    $message[$row["lang_id"]] = str_replace(
    array (
    '%title',
    '%url',
    '%good',
    '%link',
    '%username',
    ), array (
    TITLE,
    BASE_URL,
    $name,
    $link,
    $username,
    ), $this->diafan->configmodules('message_waitlist', 'shop', $this->diafan->oldrow["site_id"], $row["lang_id"]));
    }
    send_mail($row["mail"], $subject[$row["lang_id"]], $message[$row["lang_id"]], $email);
    }
    DB::free_result($result);
    DB::query("DELETE FROM {shop_waitlist} WHERE trash='0' AND good_id=%d".($param ? " AND (param='%s' OR param='%s')" : ''), $this->diafan->save, $param, 'a:0:{}');
    }
    }


    Добавил макрос в почтовом шаблоне %username, но во входящем сообщении это поле приходит пустое. Попробовал посмотреть в сторону includes/mail.php,может быть там должны были быть какие-то параметры, но там не разобрался.

    Кто разбирался с такой задачей, помогите пожалуйста с решением.
  • 01 сентября, вторник
  • Люди, ну помогите плиз. Ответ без внимания находится уже сколько дней. Я понимаю, что все занятые, но неужто никто не сталкивался с такой реализацией? Я бы и сам нашел, но это не вордпресс или битрикс, к примеру, где свободной инфы в инете куча
  • 01 сентября, вторник
  • У вас все так запутанно, что трудно что-то понять. Наверное поэтому и нет ответов.

    Для начала: в конструкторе форм обратной связи тип поля "имя" отсутствует.
    Далее: вы все же об обратной связи говорите или об уведомлениях из магазина?
    Ну и далее: при поступлении информации о заказе имя (если таковое присутствует в форме) в письме приходит. Т.е. непонятна суть ваших телодвижений.

    Попробуйте попроще объяснить, что именно вы делаете и для чего это нужно. После чего коллеги, возможно, подтянутся.
    • 02 сентября, среда
    • Александра, имеется ввиду уведомления о поступлении товара на склад из магазина. В общем такая суть - есть поле input type="text" name="username". В админ панели в списке ожидании мне удалось сделать вывод этого поля, и хотелось бы сделать вывод этого поля в виде макроса %username в почтовом шаблоне письма о поступлении товара на склад.
      • 02 сентября, среда
      • А, т.е. Вы сделали поле input в админке, заполняете его при отправке уведомления и хотите, чтобы этот _POST подставлялся в письмо?
        • 03 сентября, четверг , редакция: 03 сентября, четверг
        • Виталий, да. переменная $_POST["username"] подставлялась в письмо-уведомление о поступлении товара на склад из магазина
          • 03 сентября, четверг
          • Если это имя где то присутствует в базе, то вытащите его оттуда и всех делов.
            • 04 сентября, пятница
            • так главный вопрос как вытащить? Имя хранится в таблице diafan_shop_waitlist
              • 04 сентября, пятница , редакция: 04 сентября, пятница
              • Как оно там хранится там поля только:

                id good_id user_id lang_id mail created param trash

                или для авторизованного пользователя по его ID достать хотите. Если да то:
                Код
                DB::query_result("SELECT fio FROM {users} WHERE id = (SELECT user_id FROM {shop_waitlist} WHERE id = d%)", ID элемента)
  • 01 сентября, вторник
  • Цитата
    Добавил макрос в почтовом шаблоне %username,
    Конечно, его же в POST нет.
    Что именно туда подставляться должно? Имя? А где оно? В листе ожиданий же только мыло. Имени просто храниться негде, и брать неоктуда

Новости

  • 18 мая
  • С 1 июня 2020 стоимость продления месяца аренды в облачном сервисе Diafan.Cloud немного увеличится: бизнес-визитка – 680 рублей; интернет-магазин – 1180 рублей.Система скидок неизменна: 3 месяца – 10%, 6 месяцев – 20%, 12 месяцев – 30%. Если вы уже пользуетесь этим тарифом, до 31 мая у вас есть возможность продлить его без ограничений и на прежних условиях. На любой период: месяц, два, три, год или пять лет – как посчитаете нужным. А также мы ввели технические тикеты. Подробнее

Блоги

  • 16.11.2019
  • Достаточно широкой проблемой, которая вызывает множество вопросов, обращений в тех.поддержку и тем на форуме, является обновление, а именно ошибки, с ним связанные. Корни проблем, возникающих при этом, совершенно различны, но наиболее часто причина в кастомизации. И хоть определение это слишком широкое, всё же процедура выявления проблемы вполне стандартизована и проста. Об этом и пойдёт речь в статье.

Форум