задавать вывод скриптов и стилей от макета в нужном месте

Часто в шаблонах бывает так (а также при оптимизации): часть скриптов подключается в шапке, часть в футере, чтоб не мешали загрузке. Скрипты, которые мы вставляем на JS вкладку макета часто должны вызываться после! подгрузки всех скриптов.
Но если мы в макет вставляем вот такую схему, то из вкладки JS скрипты подключаются в первый вывод, а не в последний. если нельзя вызывать в последнем (хотя по мне так это логично), то сделайте настройку , при указании которой скрипты с вкладки JS подгрузятся именно в этом выводе). С CSSми я бы сделала точно также, потому как Prepend не всегда позволяет добиться нужной последовательности.
<html>
<header>
<?php
Core_Page::instance()
->js('скрипт')
->js('скрипт')
->js('скрипт')
->js('скрипт')
->showJs();
?>
</header>
<body>
...
контент
..
<?php
Core_Page::instance()
->js('скрипт')
->js('скрипт')
->showJs();
?>
</body>
</html>

Puma 25.02.2019
9
482
14

Комментарии

  • На самом деле у Core_Page есть два метода, clearCss() и clearJs(), используя эти методы вы очищаете список и добавляете файлы в нужной вам последовательности и в нужных блоках.

    26.02.2019 16:02:16
    hostcms

    clearJs() пыталась использовать
    у меня тупо пропадали скрипты из того кода в котром я указала этот метод
    и нигде нет описания и примеров его работы

    26.02.2019 18:05:29
    Puma

    это не решает раздельного подключения скриптов в макете в секции head и перед закрытием body

    26.02.2019 17:43:06
    EZ-Web

    Почему не решает? После каждого showJs() массив показанных очищается и можете добавлять новые в другом месте.

    26.02.2019 17:46:19
    hostcms

    если одновременно подключать скрипты и в header и перед /body, то как сделать так, чтобы скрипт из макета подключался ТОЛЬКО перед /body

    26.02.2019 17:55:42
    EZ-Web

    без showJs() скрипты не подключаются?
    с showJs() обязательно подключается и скрипт из макета?
    если ответы на оба вопроса положительные, то подключить скрипты в хидере и в боди возможно только при двойном подключении скрипта из макета (в двух местах).

    26.02.2019 17:53:44
    EZ-Web

    0) Вначале делаем Core_Page::instance()->clearJs(); это удалит скрипты от макетов, добавленные системой автоматически.
    1) Добавляем все скрипты в нужном нам порядке, в нужном блоке явно подключаем скрипт от макета(ов).
    2) Вызываем ->showJs() когда закончили формировать список. Для формирования нового блока, начинаем с п. 1.

    > если одновременно подключать скрипты и в header и перед /body, то как сделать так, чтобы скрипт из макета подключался ТОЛЬКО перед /body
    Не поверите, но ответ: подключать его только в нужном блоке.

    26.02.2019 19:15:22
    hostcms

    ГОТОВЫЕ рабочие примеры - на демойсайт или в описание!!!

    28.02.2019 13:37:35
    EZ-Web

    короче опытным путем выяснила
    что если вы head в первом вызове пишем вот так:
    <?php
    Core_Page::instance()
    ->clearJs()
    ->PrependJs('/js/jquery-migrate-1.4.1.min.js')
    ->PrependJs('/js/jquery.js')
    ->showJs()
    ?>
    то скрипты из макета вообще не выводятся ни в одном выводе

    и мы тупо должны подставлять из ссылкой в нужный вызов
    ну как то дебильно

    28.02.2019 21:21:57
    Puma

    хоть бы подставлялись тогда в следующий вызов
    если в нем нет clearjs
    а тому кому они совсем не нужны (или бесят ссылки на пустые файлы)
    тогда везде будут clearjs ставить

    28.02.2019 21:23:18
    Puma

    Тупо? А почему в следующий? А давайте будем подставлять в номер блока, который будем вычислять как остаток деления фазы луны на 4?

    28.02.2019 21:27:12
    hostcms

    а как же наследование скриптов по дереву макетов? без clearJs() хорошо хорошо бы подключать скрипты из макетов как обычно, без явного указания

    01.03.2019 02:51:34
    EZ-Web

    вот вот и я о том же

    26.02.2019 18:04:39
    Puma
  • прямо из головы мысль украли ;)

    хотел тоже самое написать.
    может быть стоит передать в ->showJs() параметр?
    ->showJs(true) - включать в показ скрипт из директории макета
    ->showJs(false) - не включать, компрессировать и подключать только указанные выше скрипты
    ->showJs() - обрабатывать как ->showJs(true)

    26.02.2019 15:54:27
    EZ-Web