Переместить ccs/js, подгружаемые в head
Как, собственно, переместить ccs/js от AjaxForm в другое место? Они подгружаются в head, а хотелось бы изменить их местоположение…
Комментарии: 14
Это же Василия компонент, вроде. Смотри в параметрах, там должны быть значения где искать эти файлы — удали их и располагай на странице, где необходимо.
Легко сказать, чем сделать ;)
Я никак не могу найти, каким способом они там выводятся — может заработался уже…
Наверное, не я один задавался этим вопросом, поэтому и опубликовал эту запись в надежде на помощь.
Я никак не могу найти, каким способом они там выводятся — может заработался уже…
Наверное, не я один задавался этим вопросом, поэтому и опубликовал эту запись в надежде на помощь.
Да ладно.
[[!AjaxForm?
...
...
&frontend_css=``
&frontend_js=``
]]
Здравствуйте
Я тоже ищу способы как переместить ccs/js, подгружаемые в head к footer.
Может кто-нибудь подскажет? Спасибо.
[[!AjaxForm?
...
...
&frontend_css=``
&frontend_js=``
]]
Думаю, что таким способом можно изменить пути файлов css, js. Но это не решает проблему.Я тоже ищу способы как переместить ccs/js, подгружаемые в head к footer.
Может кто-нибудь подскажет? Спасибо.
Пустые настройки нужны, чтобы отключить загрузку соответствующих файлов при вызове сниппета. Просто подключите нужные файлы в шаблоне вручную.
У Tickets есть такие же системные настройки.
У Tickets есть такие же системные настройки.
/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 Ну или ручками.Но явно костыль.
Добрый день!
А как быть с Tickets и Cityselect?
Они автоматически в head прописывают:
А как быть с 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">
Мне необходимо их тоже перенести в футер.
Этот javascript ни выполняет никаких долгих блокирующих манипуляций. Он просто выставляет переменные. Поэтому его можно оставить.
Мда. Такой совет явно не вяжется с датой регистрации. (
Добрый день!
В Modx Revo имеется ли какой-нибудь плагин как в Wordpress?
Например, такой:
В 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);
}
После установки pdoTools есть возможность использовать феном и блоки в шаблонах. Создаем базовый шаблон, остальные наследуем от него. В базовом создаем блок footer и он будет во всех дочерних. Так же его можно переопределить. Мне кажется что это удобнее чем функция!)))
Здравствуйте, Максим!
Спасибо за ответ! Можете подробнее описать как это сделать?
Спасибо за ответ! Можете подробнее описать как это сделать?
Вот документация показывающая как использовать феном в MODx:
docs.modx.pro/komponentyi/pdotools/parser
Вот документация от разработчика:
github.com/fenom-template/fenom/blob/master/docs/ru/readme.md
Если непонятно, то пишите в личку: vk.com/maxgopher
Объясню и покажу на примере.
docs.modx.pro/komponentyi/pdotools/parser
Вот документация от разработчика:
github.com/fenom-template/fenom/blob/master/docs/ru/readme.md
Если непонятно, то пишите в личку: vk.com/maxgopher
Объясню и покажу на примере.
Грубый способ сделать это, если там нет каких-то настроек и удобных возможностей для этого, написать плагин, который обработает исходный код страницы перед отправкой его в браузер клиента. По событию OnWebPagePrerender исходный код страницы можно получить так:
В $output хранится код. Переопределив переменную, мы изменим исходный код страницы. Можно регулярками удалить вызовы скриптов, и добавить их в footer. Правда если компоненты, скрипты которых мы ходим удалить, тоже используют это событие, то может не сработать.
Попробовал написать плагин, работает для Tickets:
Для других компонентов по тому же принципу.
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
}
Для других компонентов по тому же принципу.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.