如下。。。 没找到这个文件
顺便我想问个问题,YII框架在一些配置更新以后,会去生成一些代码吗?。。。
说详细一点,那个appfront?吗?还是apphtml5,还是vue端?
把问题描述清楚了,一次到位描述清楚
把报错信息写全了,就截图搞了个头
发送邮件是在 @fecshop/service/email/Order.php
public function sendCreateEmail($orderInfo) { //获取订单的产品信息, 及修改相关信息 $orderInfo['products'] = Yii::$service->order->item->getByOrderId($orderInfo['order_id']); $orderInfo['shipping_method_name'] = $orderInfo['shipping_method_en_name'].'/'.$orderInfo['shipping_method_ch_name'].'('.$orderInfo['shipping_method'].')'; $orderInfo['payment_method'] = ucfirst($orderInfo['payment_method']); $toEmail = $orderInfo['customer_email']; if (Yii::$app->user->isGuest) { $emailThemeInfo = $this->emailTheme['guestCreate']; } else { $emailThemeInfo = $this->emailTheme['loginedCreate']; } if (isset($emailThemeInfo['enable']) && $emailThemeInfo['enable']) { $mailerConfigParam = ''; if (isset($emailThemeInfo['mailerConfig']) && $emailThemeInfo['mailerConfig']) { $mailerConfigParam = $emailThemeInfo['mailerConfig']; } if (isset($emailThemeInfo['widget']) && $emailThemeInfo['widget']) { $widget = $emailThemeInfo['widget']; } if (isset($emailThemeInfo['viewPath']) && $emailThemeInfo['viewPath']) { $viewPath = $emailThemeInfo['viewPath']; } if ($widget && $viewPath) { list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $orderInfo); $sendInfo = [ 'to' => $toEmail, 'subject' => $subject, 'htmlBody' => $htmlBody, 'senderName'=> Yii::$service->store->currentStore, ]; //var_dump($sendInfo);exit; Yii::$service->email->send($sendInfo, $mailerConfigParam); return true; } } }
然后你看代码:
list($subject, $htmlBody) = Yii::$service->email->getSubjectAndBody($widget, $viewPath, '', $orderInfo);
在@fecshop/service/Email.php中代码:
/** * @property $widget | String,邮件模板中的动态数据的提供部分的class * @property $viewPath | String,邮件模板中的显示数据的html部分。 * @property $langCode 当前的语言 * @proeprty $params 传递给 $widget 对应的class,用于将数据传递过去。 * 根据提供的动态数据提供者$widget 和 view路径$viewPath,语言$langCode,以及其他参数$params(这个数组会设置到$widget对应的class的params变量中) * 最终得到邮件标题和邮件内容 * 如果当前语言的邮件模板不存在,则使用默认语言的模板。 * 关于函数参数的例子值,可以参看配置文件 @fecshop/config/services/Email.php */ public function getSubjectAndBody($widget, $viewPath, $langCode = '', $params = []) { if (!$langCode) { $langCode = Yii::$service->store->currentLangCode; } if (!$langCode) { Yii::$service->helper->errors->add('langCode is empty'); return; } $defaultLangCode = Yii::$service->fecshoplang->defaultLangCode; // 得到body部分的配置数组 $bodyViewFile = $viewPath.'/body_'.$langCode.'.php'; $bodyViewFilePath = Yii::getAlias($bodyViewFile); if (!file_exists($bodyViewFilePath)) { //如果当前语言的模板不存在,则使用默认语言的模板。 $bodyViewFile = $viewPath.'/body_'.$defaultLangCode.'.php'; $bodyViewFilePath = Yii::getAlias($bodyViewFile); } $bodyConfig = [ 'class' => $widget, 'view' => $bodyViewFilePath, ]; if (!empty($params)) { $bodyConfig['params'] = $params; } // 得到subject部分的配置数组 $subjectViewFile = $viewPath.'/subject_'.$langCode.'.php'; $subjectViewFilePath = Yii::getAlias($subjectViewFile); if (!file_exists($subjectViewFilePath)) { $subjectViewFile = $viewPath.'/subject_'.$defaultLangCode.'.php'; $subjectViewFilePath = Yii::getAlias($subjectViewFile); } $subjectConfig = [ 'class' => $widget, 'view' => $subjectViewFilePath, ]; if (!empty($params)) { $subjectConfig['params'] = $params; } $emailSubject = $this->getHtmlContent($subjectConfig); $emailBody = $this->getHtmlContent($bodyConfig); return [$emailSubject, $emailBody]; //$emailSubject = Yii::$service->page->widget->render($subjectConfigKey,$parentThis); //$emailBody = Yii::$service->page->widget->render($bodyConfigKey,$parentThis); }
在上面代码中找到这个部分:
$defaultLangCode = Yii::$service->fecshoplang->defaultLangCode; // 得到body部分的配置数组 $bodyViewFile = $viewPath.'/body_'.$langCode.'.php'; $bodyViewFilePath = Yii::getAlias($bodyViewFile); if (!file_exists($bodyViewFilePath)) { //如果当前语言的模板不存在,则使用默认语言的模板。 $bodyViewFile = $viewPath.'/body_'.$defaultLangCode.'.php'; $bodyViewFilePath = Yii::getAlias($bodyViewFile); }
你应该就看明白了,如果找不到文件,只有一种可能,你把网站的默认语言改成zh了,而不是默认的en。 fecshop里面只有en的邮件模板文件,其他语言的email找不到,就会找en的,现在你把默认语言改成了zh,那肯定会去找zh的邮件模板文件,找不到而报错
zh
en
email
解决办法:
http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_email.html
这个文档,找到这里邮件模板配置介绍,以及邮件多语言原理
邮件模板配置介绍,以及邮件多语言原理
进行邮件重写,在本地建立邮件view文件,然后在配置中做指向。
如果你不想发送邮件,你可以直接在email services config中将配置
// 登录用户发送邮件的模板的设置。 'loginedCreate' => [ 'enable' => true, // 邮件内容的动态数据提供部分 'widget' => 'fecshop\services\email\widgets\order\create\Body', // 邮件内容的view部分 'viewPath' => '@fecshop/services/email/views/order/create/logined', // 如果不定义 mailerConfig,则会使用email service里面的默认配置 'mailerConfig' => 'default', ],
将其改成 'enable' => false 来关掉邮件的发送
'enable' => false
@Terry #3楼 哦 忘记了 在appfront
@PHPJAVAGOC #4楼 仔细看上面的留言,自己就会明白