Разные чанки писем в minishop2 для 2-х контекстов

Здравствуйте.
Помогите разобраться как с 2-х разных контекстов (ru и en) перенаправлять на разные чанки писем для менеджеров и для покупателей при оформлении заказа?
Павел
16 июня 2016, 16:23
modx.pro
1
2 526
0

Комментарии: 16

Алексей
17 июня 2016, 09:14
0
1) Приложения->minishop2->Настройки->Статусы заказов
2) Для статуса заказа «новый» (для других аналогично) указываешь название чанка письма менеджеру и покупателю.
3) Создаешь чанк с таким названием в обоих контекстах с разным содержимым
    Владимир Кисилица
    17 июня 2016, 09:20
    +1
    Создаешь чанк с таким названием в обоих контекстах? Вы в этом уверены?
    А так по вопросу, используй лексиконы в чанках
      Алексей
      17 июня 2016, 09:55
      0
      Я ошибся. Мой способ не рабочий. Чанк указывается один, чанки для разных контекстов общие, как то вылетело из головы. Если содержимое писем сильно отличается и лексиконы не помогут, то я использую fenom и условие {if ($modx->context->get('key') == 'web')} {/if}
    Николай Загумённов
    17 июня 2016, 09:26
    0
    Можно попробовать использовать 1 чанк, а все переводы заполнить лексиконами.
      Павел
      17 июня 2016, 10:28
      0
      Спасибо за рекомендации, но лексиконами проблему не решить, т.к. письма существенно отличаются. С femon интересный вариант, но хотелось бы именно иметь разные чанки шаблонов, а как это реализовать не понятно.
        Алексей
        17 июня 2016, 10:38
        0
        еще как вариант создать эти чанки, и подключать их в основной:
        {if ($modx->context->get('key') == 'ru')}
        {include 'chunk1'}
        {/if}
        {if ($modx->context->get('key') == 'en')}
        {include 'chunk2'}
        {/if}
          Воеводский Михаил
          17 июня 2016, 10:41
          +1
          Наследовать msOrderHandler, в нем переопределить функцию changOrderStatus(). В этой функции идет получение названий чанков из свойств методов доставки.
            Павел
            17 июня 2016, 12:41
            -1
            в функции 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);}
            }
            }
            }
            подскажите, как здесь переопределить чанк письма
              Воеводский Михаил
              17 июня 2016, 12:44
              +1
              Во-первых, использовать тэг code для оформления кода.
              Во-вторых, здесь:
              $this->modx->getObject('modChunk', $status->get('body_user'))
              Происходит получение необходимого чанка. Пишите свою логику получения имени чанка.
                Павел
                17 июня 2016, 13:04
                0
                извините, я начинающий программист…
                $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 и т.д., или я чушь написал?

                  Воеводский Михаил
                  17 июня 2016, 13:06
                  0
                  $chunkName = $status->get('body_user');
                  if ($context->getOption('cultureKey')=='en'){
                  	$chunkName .= 'Eng';
                  }
                  $body = 'no chunk set';
                  if ($chunk = $this->modx->getObject('modChunk', $chunkName)) {
                  
                  }
                    Павел
                    17 июня 2016, 13:54
                    0
                    Вот кусок получившегося кода:
                    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, там в письме мусор какой-то
                      Воеводский Михаил
                      17 июня 2016, 14:21
                      0
                      Слишком абстрактно написано, что не работает.
                      Для проверки можно скинуть в лог содержание переменной $chunkName.
          Павел
          17 июня 2016, 14:19
          0
          начал смотреть внимательней $status->get('body_user') содержит не название, а id чанка. А как перейти к названию? Или такого нет?
            Воеводский Михаил
            17 июня 2016, 14:26
            0
            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');
            	}
            }
              Павел
              17 июня 2016, 15:07
              0
              С id опробовал, всё работает, с именем чанка буду доделывать вечером. Большое спасибо за помощь!
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            16