Разные чанки писем в minishop2 для 2-х контекстов
Здравствуйте.
Помогите разобраться как с 2-х разных контекстов (ru и en) перенаправлять на разные чанки писем для менеджеров и для покупателей при оформлении заказа?
Помогите разобраться как с 2-х разных контекстов (ru и en) перенаправлять на разные чанки писем для менеджеров и для покупателей при оформлении заказа?
Комментарии: 16
1) Приложения->minishop2->Настройки->Статусы заказов
2) Для статуса заказа «новый» (для других аналогично) указываешь название чанка письма менеджеру и покупателю.
3) Создаешь чанк с таким названием в обоих контекстах с разным содержимым
2) Для статуса заказа «новый» (для других аналогично) указываешь название чанка письма менеджеру и покупателю.
3) Создаешь чанк с таким названием в обоих контекстах с разным содержимым
Создаешь чанк с таким названием в обоих контекстах? Вы в этом уверены?
А так по вопросу, используй лексиконы в чанках
А так по вопросу, используй лексиконы в чанках
Я ошибся. Мой способ не рабочий. Чанк указывается один, чанки для разных контекстов общие, как то вылетело из головы. Если содержимое писем сильно отличается и лексиконы не помогут, то я использую fenom и условие {if ($modx->context->get('key') == 'web')} {/if}
Можно попробовать использовать 1 чанк, а все переводы заполнить лексиконами.
Спасибо за рекомендации, но лексиконами проблему не решить, т.к. письма существенно отличаются. С femon интересный вариант, но хотелось бы именно иметь разные чанки шаблонов, а как это реализовать не понятно.
еще как вариант создать эти чанки, и подключать их в основной:
{if ($modx->context->get('key') == 'ru')}
{include 'chunk1'}
{/if}
{if ($modx->context->get('key') == 'en')}
{include 'chunk2'}
{/if}
{if ($modx->context->get('key') == 'ru')}
{include 'chunk1'}
{/if}
{if ($modx->context->get('key') == 'en')}
{include 'chunk2'}
{/if}
Наследовать msOrderHandler, в нем переопределить функцию changOrderStatus(). В этой функции идет получение названий чанков из свойств методов доставки.
в функции changeOrderStatus() вот кусок кода, отвечающий за отправку письма заказчику:
if ($status->get('email_user')) {
/* @var modUserProfile $profile */
if ($profile = $this->modx->getObject('modUserProfile', array('internalKey' => $order->get('user_id')))) {
$subject = '';
if ($chunk = $this->modx->newObject('modChunk', array('snippet' => $status->get('subject_user')))){
$chunk->setCacheable(false);
$subject = $this->processTags($chunk->process($pls));
}
$body = 'no chunk set';
if ($chunk = $this->modx->getObject('modChunk', $status->get('body_user'))) {
$chunk->setCacheable(false);
$body = $this->processTags($chunk->process($pls));
}
$email = $profile->get('email');
if (!empty($subject) && preg_match('/^[^@а-яА-Я]+@[^@а-яА-Я]+(?<!\.)\.[^\.а-яА-Я]{2,}$/m', $email)) {
if (!($lang=='en')){
$this->sendEmail($email, $subject, $body);}
}
}
}
подскажите, как здесь переопределить чанк письма
if ($status->get('email_user')) {
/* @var modUserProfile $profile */
if ($profile = $this->modx->getObject('modUserProfile', array('internalKey' => $order->get('user_id')))) {
$subject = '';
if ($chunk = $this->modx->newObject('modChunk', array('snippet' => $status->get('subject_user')))){
$chunk->setCacheable(false);
$subject = $this->processTags($chunk->process($pls));
}
$body = 'no chunk set';
if ($chunk = $this->modx->getObject('modChunk', $status->get('body_user'))) {
$chunk->setCacheable(false);
$body = $this->processTags($chunk->process($pls));
}
$email = $profile->get('email');
if (!empty($subject) && preg_match('/^[^@а-яА-Я]+@[^@а-яА-Я]+(?<!\.)\.[^\.а-яА-Я]{2,}$/m', $email)) {
if (!($lang=='en')){
$this->sendEmail($email, $subject, $body);}
}
}
}
подскажите, как здесь переопределить чанк письма
Во-первых, использовать тэг code для оформления кода.
Во-вторых, здесь:
Во-вторых, здесь:
$this->modx->getObject('modChunk', $status->get('body_user'))
Происходит получение необходимого чанка. Пишите свою логику получения имени чанка.
извините, я начинающий программист…
$chunk = $this->modx->getObject('modChunk', $status->get('body_user'))
if ($context->getOption('cultureKey')=='en'){
$chunk[modChunk].=Eng;}
Если для контекста en мы переопределяем чанки на tpl.msEmail.new.userEng, tpl.msEmail.paid.userEng и т.д., или я чушь написал?$chunkName = $status->get('body_user');
if ($context->getOption('cultureKey')=='en'){
$chunkName .= 'Eng';
}
$body = 'no chunk set';
if ($chunk = $this->modx->getObject('modChunk', $chunkName)) {
}
Вот кусок получившегося кода:
if ($status->get('email_user')) {
/* @var modUserProfile $profile */
if ($profile = $this->modx->getObject('modUserProfile', array('internalKey' => $order->get('user_id')))) {
$subject = '';
if ($chunk = $this->modx->newObject('modChunk', array('snippet' => $status->get('subject_user')))){
$chunk->setCacheable(false);
$subject = $this->processTags($chunk->process($pls));
}
$chunkName = $status->get('body_user');
if ($context->getOption('cultureKey')=='en'){
$chunkName .= 'Eng';
}
$body = 'no chunk set';
if ($chunk = $this->modx->getObject('modChunk', $chunkName)) {
$chunk->setCacheable(false);
$body = $this->processTags($chunk->process($pls));
}
$email = $profile->get('email');
if (!empty($subject) && preg_match('/^[^@а-яА-Я]+@[^@а-яА-Я]+(?<!\.)\.[^\.а-яА-Я]{2,}$/m', $email)) {
$this->sendEmail($email, $subject, $body);
}
}
}
письмо на новый заказ приходит, но это явно не содержимое чанка tpl.msEmail.new.userEng, там в письме мусор какой-то
Слишком абстрактно написано, что не работает.
Для проверки можно скинуть в лог содержание переменной $chunkName.
Для проверки можно скинуть в лог содержание переменной $chunkName.
начал смотреть внимательней $status->get('body_user') содержит не название, а id чанка. А как перейти к названию? Или такого нет?
chunkId = $status->get('body_user');
if ($context->getOption('cultureKey')=='en' and $chunk = $this->modx->getObject('modChunk', $chunkId)){
$chunkNameEng = $chunk->get('name'). 'Eng';
if ($chunkEng = $this->modx->getObject('modChunk', array('name' => $chunkEngName))) {
$chunkId = $chunkEng->get('id');
}
}
С id опробовал, всё работает, с именем чанка буду доделывать вечером. Большое спасибо за помощь!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.