Автоуведомление в получении и прочтении писем

Тема в разделе "Обо всём", создана пользователем vikaharkov, 13 дек 2016.

  1. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Не-а..

     
  2. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Бекап знаю. Чукча не боится бекап. И Вика не боится бекап. Кнопку нажать и бекап на компе. Каждый два дня делаю бекап, и сразу, если чего меняю важного. Ой, не только бекап - весь сайт копирую с хостинга в архив вместе с бекап.
     
  3. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    :(
    Чукча хитрый...
     
  4. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Беру Подсказку зала

    Народ, в сообщении №12 Чукча не указал какую-то переменную. В конце он об этом сообщил
    Какую переменную он не указал?
     
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    наверно не указал откуда брать $last_letter_id
    Ведь таблицу создали, письмо подготовили, ссылку формируете, а вот с каким номером id письмо крыжить в базе, неизвестно.
     
  6. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
  7. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Что ж. Продолжим, раз есть ответ...

    итак

    Код:
    $data['text_footer'] = $this->url->link('tool/read_mal', 'letter_id=' . $last_letter_id);
    Да, именно, на этом остановились, но теперь нам нужна

    $last_letter_id

    Где ее взять?

    Как где? - это результат вставки последней записи в базу.
    Ух? Не.. у нас все есть
    Код:
        public function getLastId() {
            return $this->db->getLastId();
        }
    (для самостоятельного изучения - где этот код лежит?)
    Ответ должен прозвучать
    Но нам же все же нужно ее вставить.
    Куда? В таблицу. Где?

    Нужен метод
    чтож пишем

    Код:
        public function addLetter() {
    $sql = "INSERT INTO `" . DB_PRRFIX . "letter` SET status = 0";
    $this->db->query($sql);
            return $this->db->getLastId();
        }
    
    Почему я пишу отдельно код запроса.
    Мне так удобно. - так прозрачней.

    Код есть, но как вызвать?

    Создаем файлик модели
    tool/letter.php
    Код:
    <?php
    class ModelToolLetter extends Model {
        public function addLetter() {
           
    $sql = "INSERT INTO `" . DB_PRRFIX . "letter` SET status = 0";
    $this->db->query($sql);
            return $this->db->getLastId();
        }
    }
    
    И теперь вызываем..

    Код:
    $this->load->model('tool/letter');
    $this->model_tool_letter->addLetter();
    Фух.. кажется все.


    Но нет!!!!
    Где это NNNN и куда его вставлять?

    Пред вызовом шаблона.

    Где это?
    Ну вот же оно!!!
    Код:
    $mail->setHtml($this->load->view('mail/order', $data));
    И так должны получит.
    Код:
    $this->load->model('tool/letter');
    $data['letter_id' = $this->model_tool_letter->addLetter();
    $mail->setHtml($this->load->view('mail/order', $data));

    На этом еще одна часть закончена.


    Для продолжения лекции :)
    Нужно ответить на вопрос.. И этого достаточно?
    Это Минимально достаточно.

    Но малоэффективно.
    Потому что малоинформативно.

    Поэтому вопрос

    Чего в супе не хватает?
    ИНФОРМАЦИИ о письме!!!!

    Где эта информация должна храниться?
    Что там должно быть? И это Второй вопрос перед следующим "занятием"
     
    Ravilr, RoS и Romans нравится это.
  8. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Признаюсь честно, думала-гадала и хотела отправлять ответ с другой переменной - $my_image_url
    Как-то её вставили в файл template/mail/order.tpl но нигде до этого о такой переменной не нахожу упоминания, ей, как я думала, не задано никакого значения.

    Ну шо ж, ошиблась, так ошиблась в своих догадках. Зато узнала (из литературы), что переменные, это те буковки в php коде, перед которыми стоит знак $
     
  9. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Браво!!!
    Ведь действительно про ссылочку вроде забыли

    Но она на самом деле есть :)

    только скрылась под другим именем
    $data['text_footer'] = $this->url->link('tool/read_mal'

    а нужно
    $data['my_image_url'] = $this->url->link('tool/read_mal'
     
  10. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Кстати, подумала тут вот чего...

    Хоть это с виду и выглядит коллективным творчеством, но на самом деле это не так. Судя по аморфной реакции зала, принимать участие желающих не очень. Вот и предлагаю - учитывая большую востребованность в таком дополнении (рекламная ответная инфа - открытие сообщений после рассылки - интересна большинству компаний) - завершающую стадию модификации провести в закрытом режиме и тем, кто принял участие в разработке дополнения (кроме меня - не претендую) сообща или единолично выставить готовое решение в магазине за денюжку. Это будет вполне честно и справедливо, как думаю. Со своей стороны гарантирую (зуб даю :) ), что никогда не выложу это решение на публику, если оно обретет реальное воплощение и им со мною поделятся.

    Не, ну а чё, капитализм он такооой...
     
    Последнее редактирование: 14 дек 2016
  11. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    не пережЁвывайте..
    Востребованность такого модуля - невелика.

    Принимать участие? Читают. Раз читают - значит кому-то это нужно.
    Молчат?
    Ну... или все понятно, или ни хрена не понятно, но стесняются спросить :)

    Основная цель

    Это показать процесс разработки
    Какие методы применяются в работе
    Где находится работа с базой, какие файлы, почта и т.д

    На самом деле, если решение и появится в релизе, то оно будет немного другим. с другими привязками.
    Что наверное верно.
    Но на данном этапе.. остановимся на направлении такой реализации.
     
  12. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Последнее вероятней. Но в следующий раз я попрошу Звонок другу. У меня тут есть один програмист в друзьях. Посмотрю, чего он гад молчит :)
     
  13. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Если говорить языком программистов - то пока нет такого кода в аналах Опенкарт.
    Есть похожие в шести местах (системные библиотеки), но именно такого - нет.

    (релиз 2.3.0.2)
     
  14. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Означает ли это удобство плюс один запрос к БД? Или это ничтожно мало влияет на производительность?
     
  15. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Да, действитльно, нет
    но есть другое
    Код:
        public function getLastId() {
            return $this->adaptor->getLastId();
        }
    Но это не важно, важно то что есть метод!!! getLastId
    Который и вернет номер последней вставленной строки

    Не.. в OC, с какого-то дуба принято все лепить сразу в метдов
    $this->db->query("И здесь пошел одностроковый запрос с подключением 5 таблиц")
    Который читать невозможно а тем более отладить
    Приходится его каждый раз форматировать, чтобы понять что все таки хотел сказать Даниель (зачастую - ничего хорошего :) )

    А разбиение
    строка запроса
    вызов запроса

    Никак на производительность не повлияет, и возможно даже на наносекунды обойдет. Но это тема совсем другая, и это совсем не в тему, и это.. изучается на лекциях построения компиляторов.

    Любой код должен быть красивым.
    Когда код красивый он легко читается
    Если он легко читается, то в нем, достаточно легко найти ошибку
    И вывод
    Когда код красивый - он правильный :)
     
  16. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Вааще-то в этом абзаце два вопроса, а не один.

    1. Где эта информация должна храниться?
    Фиг её знает. Наверно в БД.

    2. Что там должно быть?
    - № заказа, дата заказа, ФИО клиента (?)
    - емайл клиента
    - дата прочтения (открытия) письма

    Обычно сервисы показывают и другую информацию - IP адрес, ОС, Браузер... (см под катом)
    Но думаю, это уже реально лишнее, это уже похоже на сбор информации, которая не относится к задачам уведомления.

    Буфер обмена01.jpg
     
  17. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    Этот да, тут
    system\library\db.php
     
  18. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    В данном случае вывод не полный. Одной красоты недостаточно.
    Вот более полный
    "Когда код красивый и работает - он правильный"

    Предлагаю меня повысить в ранге - вы делаете умную работу, а я вас буду корректировать (буду корректировщицей :) ).
    (тока пожалуйста, ассоциации с Анкой-пулемётчицей не проводить :) )
     
  19. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Да-да
    Ну.. на мой взгляд немного не так, но суть понятна
    Тип письма - уведомление о новом заказе, уведомление о статусе заказа, другой идентификатор
    Тема письма
    Тело письма
    Дата отправки
    Получатель
    Дата прочтение
    Статус.

    Т..е в случае недоставки, непрочтения, можно типа повторить отправку.
     
  20. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Красивый код - практически всегда работает
    А если не работает - он не красивый :)
    Но красота кода - на вкус и цвет фломастеры разные.