К содержанию

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

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

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

Марат Марабар
Марат Марабар Проверенный
04 июня 2016, 20:26
Это же Василия компонент, вроде. Смотри в параметрах, там должны быть значения где искать эти файлы — удали их и располагай на странице, где необходимо.
    vmpr_7
    vmpr_7 Старожил
    04 июня 2016, 20:36
    Легко сказать, чем сделать ;)
    Я никак не могу найти, каким способом они там выводятся — может заработался уже…
    Наверное, не я один задавался этим вопросом, поэтому и опубликовал эту запись в надежде на помощь.
      Марат Марабар
      Марат Марабар Проверенный
      04 июня 2016, 20:41
      Да ладно.

      [[!AjaxForm?
      	...
      	...
      	&frontend_css=``
      	&frontend_js=``
      ]]
    Zulya
    Zulya Старожил
    03 марта 2019, 01:05
    Здравствуйте
    [[!AjaxForm?
    	...
    	...
    	&frontend_css=``
    	&frontend_js=``
    ]]
    Думаю, что таким способом можно изменить пути файлов css, js. Но это не решает проблему.
    Я тоже ищу способы как переместить ccs/js, подгружаемые в head к footer.
    Может кто-нибудь подскажет? Спасибо.
      Сергей Шлоков
      Сергей Шлоков Эксперт
      04 марта 2019, 07:21
      Пустые настройки нужны, чтобы отключить загрузку соответствующих файлов при вызове сниппета. Просто подключите нужные файлы в шаблоне вручную.
      У Tickets есть такие же системные настройки.
      Василий Одинцов
      03 марта 2019, 07:21
      /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
        Zulya Старожил
        03 марта 2019, 12:15
        Добрый день!
        А как быть с 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
          Этот javascript ни выполняет никаких долгих блокирующих манипуляций. Он просто выставляет переменные. Поэтому его можно оставить.
          Сергей Шлоков
          Сергей Шлоков Эксперт
          04 марта 2019, 07:26
          Мда. Такой совет явно не вяжется с датой регистрации. (
          Zulya
          Zulya Старожил
          03 марта 2019, 13:22
          Добрый день!
          В 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
            После установки pdoTools есть возможность использовать феном и блоки в шаблонах. Создаем базовый шаблон, остальные наследуем от него. В базовом создаем блок footer и он будет во всех дочерних. Так же его можно переопределить. Мне кажется что это удобнее чем функция!)))
              Zulya
              Zulya Старожил
              03 марта 2019, 13:30
              Здравствуйте, Максим!
              Спасибо за ответ! Можете подробнее описать как это сделать?
          Николай
          Николай Проверенный
          03 марта 2019, 14:21
          Грубый способ сделать это, если там нет каких-то настроек и удобных возможностей для этого, написать плагин, который обработает исходный код страницы перед отправкой его в браузер клиента. По событию 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