Тема: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

Разрабатывал модуль и с толкнулся с такой задачей. Хотел вывести свой JS скрипт в главный шаблон между тэгами <head></head> из контролёра модуля или после его. Функционал написаный разработчиками мне предоставлял лишь прикрепить файл JS, который лежит на сервере. Этот вариант мне не подошёл, так как код JS я генерирую автоматичеки с нужными мне параметрами в контролере. А мне надо было передать уже готовый скрипт JS с тэгами <script></script> в заголовок страницы.

Я поступил следующим образом:
1. Открыл модуль у которого название CMSFactory лежит в папке application/modules/
2. В этом модуле есть файл - assetManager
3. Открываю его для редактирования, после - этого кода

    /**
     * @return assetManager
     * @access public
     * @author a.gula
     * @param string $script
     * @param boolean $useCompress
     * @param string $position after|before
     * @return \CMSFactory\assetManager
     * @copyright ImageCMS (c) 2013, a.gula <a.gula@imagecms.net>
     */
    public function registerJsScript($script, $useCompress = FALSE, $position = 'after', $type = 'text/javascript') {
        /** Start. Load JS script into template */
        if ($useCompress) {
            \CI_Controller::get_instance()->template->registerJsScript("<script type='$type'>" . $this->compressJs($script) . '</script>', $position);
        } else {
            \CI_Controller::get_instance()->template->registerJsScript("<script type='$type'>" . $script . '</script>', $position);
        }

        return $this;
    }

4. Пишу свой новый метод, который будет передавать мой скрипт в главный шаблон сайта, в подвал или хейдер:

Код моего метода:

    public function registerJsData($datascript, $position = 'before') {
          \CI_Controller::get_instance()->template->registerJsScript("".$datascript."", $position);  
        return $this; 
    }

5. Сохраняю.
6. Теперь использую в любом модуле, где мне надо вывести данные в шаблон используя контролёр.
7. Вызывать можно так, передав скрипт JS в тэгах <script>Тут какой то мой код ява скрипта</script> :



В комтролёре создаю переменную 

$myscript = "<script>Тут какой то мой код ява скрипта</script>";

// Вызов Айпи для генерации шаблона и передачу в него параметров, вызываю в контролёре любого модуля:
\CMSFactory\assetManager::create()
           //  Наш новый метод, который передаёт в шаблон наш скрипт, скрипт передаёт ранее созданная переменная:
            ->registerJsData($myscript)
            // Подключение стилей шаблона
            ->registerStyle('style')
            // Передача данных в шаблон
            ->setData(array('page'=> $page))
           // Шаблон внутренней страницы (!!!это не главный шаблон всего сайта!!!)
            ->render('page');
    }

После этих действий код явы будет выводится в главный шаблон.

Параметры в методе registerJsData(), $position = 'before' можно менять, это определяет где будет вывод произходить в шаблоне в параметрах head или после него.

Надеюсь, разработчики добавят данный метод в новой ветки скрипта. А моё потраченное время не останется без внимания. smile

Сделаю обновления вашего магазина до актуальной версии системы со вем переносом ваших товаров, просьба писать в приват.
https://novabench.com/image/742206.png

2

Re: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

Здравствуйте. А чем такой способ не подошол?

$myscript = "Тут какой то мой код ява скрипта";

\CMSFactory\assetManager::create()
           //  Наш новый метод, который передаёт в шаблон наш скрипт, скрипт передаёт ранее созданная переменная:
            ->registerJsScript($myscript)
            // Подключение стилей шаблона
            ->registerStyle('style')
            // Передача данных в шаблон
            ->setData(array('page'=> $page))
           // Шаблон внутренней страницы (!!!это не главный шаблон всего сайта!!!)
            ->render('page');
ImageCMS PHP Team Lead
https://github.com/imagecms/ImageCMS - ночные сборки корпорейта
https://scrutinizer-ci.com/g/imagecms/ImageCMS/badges/quality-score.png?b=development https://codeclimate.com/github/imagecms/ImageCMS/badges/gpa.svg

Thumbs up Thumbs down

3

Re: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

Совершенно верно, в старых версиях так и выводил

$this->template->registerJsScript($myscript);
Когда то разрабатывал модули для ImageCMS Corporate

4

Re: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

gula.andrij пишет:

Здравствуйте. А чем такой способ не подошол?

$myscript = "Тут какой то мой код ява скрипта";

\CMSFactory\assetManager::create()
           //  Наш новый метод, который передаёт в шаблон наш скрипт, скрипт передаёт ранее созданная переменная:
            ->registerJsScript($myscript)
            // Подключение стилей шаблона
            ->registerStyle('style')
            // Передача данных в шаблон
            ->setData(array('page'=> $page))
           // Шаблон внутренней страницы (!!!это не главный шаблон всего сайта!!!)
            ->render('page');

Откройте файл и увидите, он уже прописывает тэги <script  src= и подключает как JS файл, а мне надо не файлом вызывать, а скриптом который генерируется ПХП кодом в модуле уже со всеми тэгами!

Сделаю обновления вашего магазина до актуальной версии системы со вем переносом ваших товаров, просьба писать в приват.
https://novabench.com/image/742206.png

5

Re: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

Sempai пишет:

Совершенно верно, в старых версиях так и выводил

$this->template->registerJsScript($myscript);

Не знаю как в старой, но в версии 4.8.1 именно такой возможности нет.

Сделаю обновления вашего магазина до актуальной версии системы со вем переносом ваших товаров, просьба писать в приват.
https://novabench.com/image/742206.png

6

Re: Хак для Image Corporate 4.8.1 (tested) Вывод скрипта в главный шаблон

Да, вы правы, в новой версии эту функцию выполняет другая команда

public function registerJsFullpath($path, $position = 'after') {
        \CI_Controller::get_instance()->template->registerJsFile($path, $position, false);
        return $this;
    }
Когда то разрабатывал модули для ImageCMS Corporate