Смена шаблона через плагин

Добрый день, что-то не получается разобрать со сменой шаблона через плагин при загрузке страницы

case 'OnLoadWebDocument':
		$id = $modx->resource->get('id');
		$resource = $modx->getObject('modResource',$id);
		$resource->set('template', 4);
		$resource->save();
break;
Шаблон меняется в админке и все бы хорошо, на на странице сайта указанный шаблон применяется только после второго захода, т.е получается, что смена шаблона происходит после отображения страницы.

В чем проблема, надо вызывать плагин не для OnLoadWebDocument? или в чем-то другом проблема?
Ilya Ev
22 ноября 2019, 16:01
modx.pro
1
1 486
0

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

Баха Волков
22 ноября 2019, 16:22
+2
case 'OnLoadWebDocument':
    $modx->resource->set('template', 4);
    break;
    Ilya Ev
    22 ноября 2019, 17:43
    0
    Это не помогает. Событие не то как я понял.
    но вроде есть решение, может кому нужно. можно менять шаблон на лету
    case 'OnWebPageInit':
    		$resource = $modx->request->getResource($modx->resourceMethod, $modx->resourceIdentifier); 
    		$resource->set('template', 4);
    		$resource->save();
    break;
      Сергей Шлоков
      22 ноября 2019, 19:45
      0
      Кто этот ужас Вам подсказал? @Баха Волков выше написал правильное решение именно для смены шаблона на лету. И не надо ничего писать в базу. Во-первых, +1 запрос на сервер при каждом просмотре страницы. А если уже установлен нужный шаблон? Во-вторых, это уже не «на лету».
        Ilya Ev
        22 ноября 2019, 23:30
        0
        Так в том то и проблема, что вариант не меняет шаблон
        Событие: OnLoadWebDocument
        Запускается непосредственно перед отправкой ответа и после загрузки ресурса.
        После загрузки, как я понял шаблон меняется после его первичного отображения, т.е. при втором визите на страницу.
        Александр Мельник
        22 ноября 2019, 20:45
        0
        Saving Happens Automatically
        No need to run the $resource->save() method as that happens automatically.
        docs.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/ondocformsave
          Олег Щавелев
          22 ноября 2019, 23:37
          0
          Всем привет.
          Посмотри ролик на канале Open MODx он разбирает данный кейс и объясняет как данный принцип работает: MODx. Два шаблона у одного ресурса! Как???

          Я думаю после просмотра сразу станет понятней.
            Ilya Ev
            23 ноября 2019, 13:44
            0
            Да в таком варианте через два события работает, а как быть если нужно сменить шаблон у страницы при событии OnPageNotFound?

            типа того
            case 'OnPageNotFound':
            $section = $modx->getObject('modResource', $qq);
            $section_id = $section->get('id');
            $section_key = $section->get('context_key');
            $modx->sendForward($section_id);
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    9