Разные чанки писем в 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 опробовал, всё работает, с именем чанка буду доделывать вечером. Большое спасибо за помощь!            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.