Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 10 Ответов
  • 1318 Просмотров
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
Всем привет. У меня на сайте при покупке генерируются ключи для программ. Нанимал фрилансера и он мне сделал, чтобы в письмо, отправляемое покупателю, вкладывался xml-файл. У меня была версия ЖШ 4.6. Недавно пришлось делать обновление до версии ЖШ 4.16 и естественно файл к письму перестал прикладываться.
Я проштудировал файлы старой версии и нашел это решение в файле /com_jshopping/models/checkout.php. В методе sendOrderEmail было добавлено следующее:
Код: php
//send mail client
if ($order->email){
$mailer = JFactory::getMailer();
$mailer->setSender(array($mailfrom, $fromname));
$mailer->addRecipient($order->email);
$mailer->setSubject( sprintf(_JSHOP_NEW_ORDER, $order->order_number, $order->f_name." ".$order->l_name));
$mailer->setBody($message_client);

$user = JFactory::getUser();
$file = tempnam(sys_get_temp_dir(), '');
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElement('ActiveKeys');
$root->setAttribute('UserLogin', $user->username);
$root->setAttribute('check', 'mpak');
foreach ($order->products as $prod) {
$el = $doc->createElement('key');
$el->setAttribute('Name', $prod->attributes_values[2]);
$el->setAttribute('AvailCad', $prod->attributes_values[1]);
$el->setAttribute('ActiveKey', $prod->product_hash);
$root->appendChild($el);
}
$doc->appendChild($root);
$xmlData = $doc->saveXML();
file_put_contents($file, $xmlData);
if ($order->order_status == 6) {
error_reporting(E_ALL);
$mailer->addAttachment($file, "{$user->username}_ModPlus ActiveKeys.xml");
}
if ($pdfsend && $jshopConfig->order_send_pdf_client){
$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$order->pdf_file);
}
$mailer->isHTML(true);
$send = $mailer->Send();
}
После обновления ЖШ многое было "разнесено" по методам и разным файлам. Полазив по ним я нашел вроде то, что нужно в файле /com_jshopping/models/ordermail.php и перенес туда добавление файла:
Код: php
public function sendMail($type, $recipient, $message, $vendor = null){
$app = JFactory::getApplication();
$jshopConfig = JSFactory::getConfig();
$dispatcher = JDispatcher::getInstance();

$mailfrom = $app->getCfg('mailfrom');
$fromname = $app->getCfg('fromname');
$pdfsend = $this->getPdfSend();
$manuallysend = $this->getManuallysend();
$subject = $this->getSubjectMail($type, $this->order);
$pdfsendtype = $this->getPdfSendType($type);

$mailer = JFactory::getMailer();
$mailer->setSender(array($mailfrom, $fromname));
$mailer->addRecipient($recipient);
$mailer->setSubject($subject);
$mailer->setBody($message);
/* for attach file*/
$user = JFactory::getUser();
$file = tempnam(sys_get_temp_dir(), '');
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElement('ActiveKeys');
$root->setAttribute('UserLogin', $user->username);
foreach ($order->products as $prod) {
$el = $doc->createElement('key');
$el->setAttribute('Name', $prod->attributes_values[2]);
$el->setAttribute('AvailProductExternalVersion', $prod->attributes_values[1]);
$el->setAttribute('ActiveKey', $prod->product_hash);
$root->appendChild($el);
}
$doc->appendChild($root);
$xmlData = $doc->saveXML();
file_put_contents($file, $xmlData);
if ($order->order_status == 6) {
error_reporting(E_ALL);
$mailer->addAttachment($file, "{$user->username}_ModPlus ActiveKeys.xml");
}
/*end of attach file*/
if ($pdfsendtype){
$mailer->addAttachment($jshopConfig->pdf_orders_path."/".$this->order->pdf_file);
}
$mailer->isHTML(true);
$dispatcher->trigger($this->getSendMailTriggerType($type),
array(&$mailer, &$this->order, &$manuallysend, &$pdfsend, &$vendor, &$this->vendors_send_message, &$this->vendor_send_order));

return $mailer->Send();
}

Думаю, понятно к чему я клоню - ничего не работает )) На мой взгляд все верно сделано, но могу ошибаться. Может кто заметит в чем проблема?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
надо наверное потихонечку php-синтаксис учить :) $order - это что? посмотрите, как было и как стало.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
надо наверное потихонечку php-синтаксис учить :) $order - это что? посмотрите, как было и как стало.
Спасибо за наводку. Поменял $order на $this->order - теперь файл создается и прикладывается к письму. Но осталась проблемка - нет имени пользователя.
Если я правильно понимаю синтаксис (так то схоже с C#, который мне ближе), то я определяю переменную "пользователь" этой строчкой:
Код: php
$user = JFactory::getUser();
Почитал в справке:
Цитировать
For every request in Joomla!, there is one user. Information about this user is readily available through the Joomla! framework in the form of an object. To get this object for the current user, use the following member function of JFactory
Т.е. по сути написано правильно, однако $user->username не работает
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
написано правильно. если username пуст, то может на этом этапе юзер не залогинен?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
написано правильно. если username пуст, то может на этом этапе юзер не залогинен?
В принципе, есть в этом логика... А можно из заказа ($this->order) выдернуть ссылку на пользователя? Там ведь должен быть его id. А JFactory::getUser() использовать с указанием конкретного id.
Где можно посмотреть какие переменные входят в order?
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
можно. если заказ был совершен залогиненым юзером, то он там есть. JFactory::getUser(id). в базе в таблице #__jshopping_orders проще всего.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
можно. если заказ был совершен залогиненым юзером, то он там есть. JFactory::getUser(id). в базе в таблице #__jshopping_orders проще всего.
Это проще, когда умеешь ))))
Я конечно попробовал что-то наваять, погуглив вопрос, но, естественно, ничего не получилось
Код: php
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query
->select($db->quoteName('user_id'))
->from($db->quoteName('#__jshopping_orders'))
->where($db->quoteName('order_id').' LIKE '.$this->order_id);
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$results = $db->loadObjectList();
$user = JFactory::getUser($results);
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
Получилось! )))
Код: php
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
$query
->select($db->quoteName('user_id'))
->from($db->quoteName('#__jshopping_orders'))
->where($db->quoteName('order_id')." = ".$db->quote($this->order_id));
// Reset the query using our newly populated query object.
$db->setQuery($query);
// Load the results as a list of stdClass objects (see later for more options on retrieving data).
$results = $db->loadResult();
$user = JFactory::getUser($results);
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
так этого ничего не надо :) вы зачем спрашивали
Цитировать
Где можно посмотреть какие переменные входят в order?
просто так, посмотреть? :)
Код
$this->order->user_id
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
А вы однако шутник  ;D
Я повелся на ваш ответ, наклепал кучу кода чтения из БД, а решением было $user = JFactory::getUser($this->order->user_id);
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Вложение файла в письмо при покупке
« Ответ #10 : 22.04.2017, 19:13:27 »
ну вообще :) вы спросили - где посмотреть. я сказал где. откуда я знал что это вам надо чтобы запросы броситься писать, а не обратится к тому, что увидели? :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка при правке данных клиента и попытке отправить письмо из заказа

Автор ecolora

Ответов: 40
Просмотров: 1368
Последний ответ 17.09.2022, 20:06:26
от marksetter
Как в JoomShopping редактировать письмо отправляемое автоматически?

Автор Ne01eX

Ответов: 47
Просмотров: 9134
Последний ответ 12.09.2022, 11:46:36
от kit2m2
Изменить письмо-заказ

Автор mesmer

Ответов: 14
Просмотров: 5780
Последний ответ 22.07.2021, 17:12:30
от ureel
При покупке одного товара, автоматически добавить другой

Автор frag79

Ответов: 9
Просмотров: 1109
Последний ответ 14.12.2019, 12:14:41
от frag79
Расположение файла скрипта на сервере

Автор r0m4n

Ответов: 3
Просмотров: 517
Последний ответ 12.12.2019, 16:32:28
от kit2m2