Переместить ccs/js, подгружаемые в head

Как, собственно, переместить ccs/js от AjaxForm в другое место? Они подгружаются в head, а хотелось бы изменить их местоположение…
vmpr_7
04 июня 2016, 15:50
modx.pro
1 774
0

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

Марат Марабар
04 июня 2016, 20:26
0
Это же Василия компонент, вроде. Смотри в параметрах, там должны быть значения где искать эти файлы — удали их и располагай на странице, где необходимо.
    vmpr_7
    04 июня 2016, 20:36
    -1
    Легко сказать, чем сделать ;)
    Я никак не могу найти, каким способом они там выводятся — может заработался уже…
    Наверное, не я один задавался этим вопросом, поэтому и опубликовал эту запись в надежде на помощь.
Zulya
03 марта 2019, 01:05
0
Здравствуйте
[[!AjaxForm?
	...
	...
	&frontend_css=``
	&frontend_js=``
]]
Думаю, что таким способом можно изменить пути файлов css, js. Но это не решает проблему.
Я тоже ищу способы как переместить ccs/js, подгружаемые в head к footer.
Может кто-нибудь подскажет? Спасибо.
    Сергей Шлоков
    04 марта 2019, 07:21
    0
    Пустые настройки нужны, чтобы отключить загрузку соответствующих файлов при вызове сниппета. Просто подключите нужные файлы в шаблоне вручную.
    У Tickets есть такие же системные настройки.
    Василий Одинцов
    03 марта 2019, 07:21
    +1
    /core/components/ajaxform/model/ajaxform/
    'frontend_css' => '[[+assetsUrl]]css/default.css',
    'frontend_js' => '[[+assetsUrl]]js/default.js',
    Как вариант, удалить оттуда и использовать Counters: modstore.pro/packages/other/counters или regScript: modstore.pro/packages/utilities/regscript Ну или ручками.
    Но явно костыль.
      Zulya
      03 марта 2019, 12:15
      0
      Добрый день!
      А как быть с Tickets и Cityselect?
      Они автоматически в head прописывают:
      <link rel="stylesheet" href="/assets/components/cityselect/vendor/bootstrap-popover/css/bootstrap-popover-x.min.css" type="text/css">
      <link rel="stylesheet" href="/assets/components/cityselect/vendor/selectize/css/selectize.bootstrap3.css" type="text/css">
      <link rel="stylesheet" href="/assets/components/cityselect/css/web/default.min.css?v=15325965" type="text/css">
      <script type="text/javascript">citySelectConfig={"actionUrl":"\/assets\/components\/cityselect\/action.php","assetsUrl":"\/assets\/components\/cityselect\/","ctx":"web","version":"2.0.10-beta"};</script>
      <script type="text/javascript">TicketsConfig={"ctx":"web","jsUrl":"\/assets\/components\/tickets\/js\/web\/","cssUrl":"\/assets\/components\/tickets\/css\/web\/","actionUrl":"\/assets\/components\/tickets\/action.php","close_all_message":"\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435","tpanel":0,"enable_editor":1};</script>
      <script type="text/javascript">TicketsConfig.editor={ticket: {onTab: {keepDefault:false, replaceWith:"	"},
              markupSet: [
                  {name:"Bold", className: "btn-bold", key:"B", openWith:"<b>", closeWith:"</b>" },
                  {name:"Italic", className: "btn-italic", key:"I", openWith:"<i>", closeWith:"</i>"  },
                  {name:"Underline", className: "btn-underline", key:"U", openWith:"<u>", closeWith:"</u>" },
                  {name:"Stroke through", className: "btn-stroke", key:"S", openWith:"<s>", closeWith:"</s>" },
                  {separator:"---------------" },
                  {name:"Bulleted List", className: "btn-bulleted", openWith:"	<li>", closeWith:"</li>", multiline:true, openBlockWith:"<ul>\n", closeBlockWith:"\n</ul>"},
                  {name:"Numeric List", className: "btn-numeric", openWith:"	<li>", closeWith:"</li>", multiline:true, openBlockWith:"<ol>\n", closeBlockWith:"\n</ol>"},
                  {separator:"---------------" },
                  {name:"Quote", className: "btn-quote", openWith:"<blockquote>", closeWith:"</blockquote>"},
                  {name:"Code", className: "btn-code", openWith:"<code>", closeWith:"</code>"},
                  {name:"Link", className: "btn-link", openWith:"<a href=\"[![Link:!:http://]!]\">", closeWith:"</a>" },
                  {name:"Picture", className: "btn-picture", replaceWith:"<img src=\"[![Source:!:http://]!]\" />" },
                  {separator:"---------------" },
                  {name:"Cut", className: "btn-cut", openWith:"<cut/>" }
              ]},comment: {onTab: {keepDefault:false, replaceWith:"	"},
              markupSet: [
                  {name:"Bold", className: "btn-bold", key:"B", openWith:"<b>", closeWith:"</b>" },
                  {name:"Italic", className: "btn-italic", key:"I", openWith:"<i>", closeWith:"</i>"  },
                  {name:"Underline", className: "btn-underline", key:"U", openWith:"<u>", closeWith:"</u>" },
                  {name:"Stroke through", className: "btn-stroke", key:"S", openWith:"<s>", closeWith:"</s>" },
                  {separator:"---------------" },
                  {name:"Quote", className: "btn-quote", openWith:"<blockquote>", closeWith:"</blockquote>"},
                  {name:"Code", className: "btn-code", openWith:"<code>", closeWith:"</code>"},
                  {name:"Link", className: "btn-link", openWith:"<a href=\"[![Link:!:http://]!]\">", closeWith:"</a>" },
                  {name:"Picture", className: "btn-picture", replaceWith:"<img src=\"[![Source:!:http://]!]\" />" }
              ]}};</script>
      <link rel="stylesheet" href="/assets/components/tickets/js/web/editor/editor.css" type="text/css">
      <link rel="stylesheet" href="/assets/components/tickets/css/web/default.css" type="text/css">
      <link rel="stylesheet" href="/assets/components/ajaxform/css/default.css" type="text/css">
      <link rel="stylesheet" type="text/css" href="/assets/components/tickets/js/web/lib/prettify/prettify.css">
      Мне необходимо их тоже перенести в футер.
        Сергей Шлоков
        04 марта 2019, 07:25
        0
        Этот javascript ни выполняет никаких долгих блокирующих манипуляций. Он просто выставляет переменные. Поэтому его можно оставить.
        Сергей Шлоков
        04 марта 2019, 07:26
        0
        Мда. Такой совет явно не вяжется с датой регистрации. (
        Zulya
        03 марта 2019, 13:22
        0
        Добрый день!
        В Modx Revo имеется ли какой-нибудь плагин как в Wordpress?
        Например, такой:
        function footer_enqueue_scripts() {
            remove_action('wp_head', 'wp_print_scripts');
            remove_action('wp_head', 'wp_print_head_scripts', 9);
            remove_action('wp_head', 'wp_enqueue_scripts', 1);
            add_action('wp_footer', 'wp_print_scripts', 5);
            add_action('wp_footer', 'wp_enqueue_scripts', 5);
            add_action('wp_footer', 'wp_print_head_scripts', 5);
        }
          Максим
          03 марта 2019, 13:27
          +1
          После установки pdoTools есть возможность использовать феном и блоки в шаблонах. Создаем базовый шаблон, остальные наследуем от него. В базовом создаем блок footer и он будет во всех дочерних. Так же его можно переопределить. Мне кажется что это удобнее чем функция!)))
        Николай
        03 марта 2019, 14:21
        0
        Грубый способ сделать это, если там нет каких-то настроек и удобных возможностей для этого, написать плагин, который обработает исходный код страницы перед отправкой его в браузер клиента. По событию OnWebPagePrerender исходный код страницы можно получить так:

        switch ($modx->event->name) {
            case 'OnWebPagePrerender':
                $output = &$modx->resource->_output;
                break;
        }

        В $output хранится код. Переопределив переменную, мы изменим исходный код страницы. Можно регулярками удалить вызовы скриптов, и добавить их в footer. Правда если компоненты, скрипты которых мы ходим удалить, тоже используют это событие, то может не сработать.

        Попробовал написать плагин, работает для Tickets:

        <?php
        
        if($modx->event->name == "OnWebPagePrerender") {
            $output = &$modx->resource->_output;
            
            preg_match('#<script type="text/javascript">if \(typeof TicketsConfig == "undefined"\).+?</script>#s', $output, $matches);      // находим первый вызов js-скрипта Tickets
            $script1 = $matches[0];                                                                                                         // помещаем его в переменную            
            $output = str_replace($script1, '', $output);                                                                                   // удаляем его со страницы
            
            preg_match('#<script type="text/javascript">TicketsConfig\.editor.+?</script>#s', $output, $matches);                           // вызов 2-го скрипта
            $script2 = $matches[0];
            $output = str_replace($script2, '', $output);
            
            preg_match('#<script type="text/javascript">TicketsConfig.formBefore.+?</script>#s', $output, $matches);                        // 3-го скрипта
            $script3 = $matches[0];
            $output = str_replace($script3, '', $output);   
            
            $output = str_replace('</body>', "$script1\r\n$script2\r\n$script3\r\n</body>", $output);                                                  // все 3 вызова помещаем перед закрывающим тегом body
        }

        Для других компонентов по тому же принципу.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          14