te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>php - how do i solve a shopware6 error variable order is not found - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

php - how do i solve a shopware6 error variable order is not found - Stack Overflow

programmeradmin3浏览0评论

I am working within a script to send emails using a template created on my shopware6 admin.

When I send with order variables like this:

<p>Order Number: {{ order.orderNumber }}</p>
<p>Customer Name: {{ order.orderCustomer.firstName }} {{ order.orderCustomer.lastName }}</p>
<p>Delivery Status: {{ order.deliveries.first.stateMachineState.translated.name }}</p>

In my shopware6 i get this error

[business_events] mail.sent.error ["source" => "core","environment" => "dev","additionalData" => ["exception" => """ Shopware\Core\Framework\Adapter\Twig\Exception\StringTemplateRenderingException: Failed rendering string template using Twig: Variable "order" does not exist in

but without the order variables the mail is sent.

My belief is that I am passing it correctly as below:

protected function reminderMail($fname, $email, $order, $context)
        {
        
            $salesChannelConfig = $this->systemConfigService->get('core.defaultSalesChannel');
            $salesChannelId = isset($salesChannelConfig['salesChannel'][0]) ? $salesChannelConfig['salesChannel'][0] : null;

            $mailTemplate = $this->mailTemplateRepository->search(
                (new Criteria(['£££'])), // Search by ID
                $context
            )->get('£££'); // Get the template by ID
    
            if (!$mailTemplate) {
                throw new \RuntimeException('Mail template not found');
            }

     // dd($order);
            // Prepare the data bag
            $dataBag = new DataBag();
            $recipients = [
                $email => $fname,
                // Add more recipients as needed
            ];
            $dataBag->set('recipients', $recipients);
            $dataBag->set('senderName', 'Your Sender Name');
            $dataBag->set('contentHtml', $mailTemplate->getContentHtml());
            $dataBag->set('contentPlain', $mailTemplate->getContentPlain());
            $dataBag->set('subject', $mailTemplate->getSubject());
            $dataBag->set('salesChannelId',  $salesChannelId);
    
            // Add any additional data you want to pass to the template
            $dataBag->set('data', $order);
            
    
            // Send the email
            $this->mailService->send($dataBag->all(), $context);
        }

Please help

I am working within a script to send emails using a template created on my shopware6 admin.

When I send with order variables like this:

<p>Order Number: {{ order.orderNumber }}</p>
<p>Customer Name: {{ order.orderCustomer.firstName }} {{ order.orderCustomer.lastName }}</p>
<p>Delivery Status: {{ order.deliveries.first.stateMachineState.translated.name }}</p>

In my shopware6 i get this error

[business_events] mail.sent.error ["source" => "core","environment" => "dev","additionalData" => ["exception" => """ Shopware\Core\Framework\Adapter\Twig\Exception\StringTemplateRenderingException: Failed rendering string template using Twig: Variable "order" does not exist in

but without the order variables the mail is sent.

My belief is that I am passing it correctly as below:

protected function reminderMail($fname, $email, $order, $context)
        {
        
            $salesChannelConfig = $this->systemConfigService->get('core.defaultSalesChannel');
            $salesChannelId = isset($salesChannelConfig['salesChannel'][0]) ? $salesChannelConfig['salesChannel'][0] : null;

            $mailTemplate = $this->mailTemplateRepository->search(
                (new Criteria(['£££'])), // Search by ID
                $context
            )->get('£££'); // Get the template by ID
    
            if (!$mailTemplate) {
                throw new \RuntimeException('Mail template not found');
            }

     // dd($order);
            // Prepare the data bag
            $dataBag = new DataBag();
            $recipients = [
                $email => $fname,
                // Add more recipients as needed
            ];
            $dataBag->set('recipients', $recipients);
            $dataBag->set('senderName', 'Your Sender Name');
            $dataBag->set('contentHtml', $mailTemplate->getContentHtml());
            $dataBag->set('contentPlain', $mailTemplate->getContentPlain());
            $dataBag->set('subject', $mailTemplate->getSubject());
            $dataBag->set('salesChannelId',  $salesChannelId);
    
            // Add any additional data you want to pass to the template
            $dataBag->set('data', $order);
            
    
            // Send the email
            $this->mailService->send($dataBag->all(), $context);
        }

Please help

Share Improve this question edited 2 days ago ADyson 62k16 gold badges75 silver badges89 bronze badges Recognized by PHP Collective asked Feb 18 at 0:27 chap manchap man 558 bronze badges 4
  • $dataBag->set('data', $order); - shouldn't you be passing this under the identifier order instead of data? – C3roe Commented 2 days ago
  • @C3roe Thanks, but regrdless of using order as the keyholder there, the data is not recognised on the template page – chap man Commented 2 days ago
  • So is $mailTemplate->getContentHtml() what actually renders the mail template? In that case, you'd have to somehow pass the values to that one then, I suppose? – C3roe Commented 2 days ago
  • @C3roe from what i see "$mailTemplate->getContentHtml()" is responsible for binding the value of the html data field on the template. – chap man Commented 2 days ago
Add a comment  | 

1 Answer 1

Reset to default 1

For anyone who has got this issue. I got it to work by passing it like this

Having the template data key and then sending the parameters one by one

$templateData = [];
                $templateData = [
                    'orderNumber' => $order->getOrderNumber(),
                ];
                $this->mailService->send($dataBag->all(), $context, $templateData);
发布评论

评论列表(0)

  1. 暂无评论