MinifyX ПОСТхук для обработки плейсхолдеров MODX

Приветствую сообщество!

Начал разбираться с более продвинутой версией MinifyX и столкнулся с одной фигней, не могу сформировать ПОСТхук для замены плейсхолдеров MODX.

Например, мне надо в скомпилированном файле скрипта, вот этот плейсхолдер ALIAS, распарсить за менить на текущее поле alias текущего документа, т.е. в теле скрипта он вызванивается так:
url: "assets/main/data/infra-[[+alias]].json"
ПОСТхук из примера выглядит так (ясное дело, что я менял все параметры и вертел вызовом как только мог):
<?php

if ($MinifyX->isJs()) {
    $content = parse($MinifyX->getContent(), ['config' => json_encode(['key'=>$object->getValue(),'user'=>$modx->user->id])]);
    $MinifyX->setContent($content);
}
В результате на выходе должно получиться так:
url: "assets/main/data/infra-index.json"
А получается, что выводит все равно так:
url: "assets/main/data/infra-[[+alias]].json"
Вопрос! Почему и как написать вызов Хука так, чтобы он выполнял свою задачу?
Andrey
19 августа 2019, 14:45
modx.pro
728
0

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

Сергей Шлоков
19 августа 2019, 15:25
0
url: «assets/main/data/infra-index.json»
Откуда взялся index? Вы парсите плейсхолдер «alias», а передаете «config», в котором нет никакого index.
    Andrey
    19 августа 2019, 15:40
    0
    ну я ж написал, что:
    ясное дело, что я менял все параметры и вертел вызовом как только мог
    т.е. менял на то что мне надо было, но ничего не происходило, я ж не совсем бом бом
      Andrey
      19 августа 2019, 17:33
      0
      просто привел запись к первоначальному варианту, чтобы было понятно, что брал её из примера и документации
      Andrey
      20 августа 2019, 10:51
      0
      Совсем никто не поможет :(
        Сергей Шлоков
        20 августа 2019, 13:09
        0
        Я выше написал, что вопрос один, а пример кода другой. Ответ — я же не бом бом. Ни примера вызова сниппета ничего. Лично я не знаю, чем еще помочь.
          Andrey
          20 августа 2019, 14:36
          0
          добро, сейчас перечислю сколько вариантов я перепробовал, просто они очевидные, собственно как я их понял:

          В файле скрипта я вызвал и так:
          url: "assets/main/data/infra-[[+alias]].json"
          и так:
          url: "assets/main/data/infra-[[*alias]].json"
          и как только не экспериментировал… менял скобки, менял название плейсхолдера…

          В файле ХУКа менял так:
          if ($MinifyX->isJs()) {
              $content = parse($MinifyX->getContent(), ['alias' => json_encode(['key'=>$object->getValue(),'resource'=>$modx->resource->alias])]);
              $MinifyX->setContent($content);
          }
          
          if ($MinifyX->isJs()) {
              $content = parse($MinifyX->getContent(), ['alias' => json_encode(['resource'=>$modx->resource->alias])]);
              $MinifyX->setContent($content);
          }
          
          if ($MinifyX->isJs()) {
              $content = parse($MinifyX->getContent(), ['alias' => $modx->resource->alias])]);
              $MinifyX->setContent($content);
          }
          вроде что то еще пробовал, но ничего не выходило.
          Располагал хук до вызова условия (и после):
          <?php
          
          if ($modx->resource->parent == 8) {
              // Добавляем файлы
              $MinifyX->addJsSource("{assets_url}main/js/map.min.js");
          }
          собственно:
          main/js/map.min.js
          файл скрипта куда выполняется замена, который появляется только при условии, что у дочки мамка под номером 8.

          Так понятно надеюсь? Я ж говорю, я ж не совсем бом бом, чтобы сначала не попробовать и заменить на требуемое, собственно мне просто нужен корректный код хука, либо сказать где я копаю не так, что он не работает, может баг, может он так вообще не работает. Спасибо за любую помощь, заранее!

          П.С.
          Библиотеку модхелпер установил, может там надо что то подкрутить, чтобы заработало…
            Сергей Шлоков
            20 августа 2019, 15:25
            +1
            Поавильно последний вариант. Только я бы использовал str_replace вместо parse. А в ифе вызови
            log_error($content);
            И посмотри, что в лог пишется.
              Andrey
              20 августа 2019, 15:53
              0
              <?php
              
              if ($MinifyX->isJs()) {
                  $content = parse($MinifyX->getContent(), ['alias' => $modx->resource->alias]);
                  log_error($content);
                  $MinifyX->setContent($content);
              }
              такой все же не работает, в лог ничего не уходит, журнал пустой, пытался переставить местами ХУКи, тоже не работает:
              'preHooks' => 'modxTagDecoder.php, infraMaps.php'
              и так:
              'preHooks' => 'infraMaps.php, modxTagDecoder.php'
              Так и отдает в скомпилированный файл скрипта:
              url: "assets/main/data/infra-[[+alias]].json"
                Сергей Шлоков
                20 августа 2019, 16:05
                +1
                Это постхук должен быть.
                  Andrey
                  20 августа 2019, 16:24
                  0
                  ага! Все сяб! Заработало, просто я уже как то пробовал в постхук и он чут тупил и всю страницу крухал! Спасибо большое!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10