NitroGenerate Posted July 17, 2014 Share Posted July 17, 2014 Ребят, подскажите, почему преста брыкается и не дает подключить мой js файл в моем модуле?Взял модуль по аналогии с другими.При инициализации зарегистрировал свой хук: $this->registerHook('displayHeader') Метод: public function hookdisplayHeader($params) { $this->context->controller->addJS('http://juliett.ccxx/js/city-select.js'); $this->context->controller->addJS(($this->_path).'js/city-select.js'); $this->context->controller->addCSS(($this->_path).'css/city-select.css', 'all'); } Метод отрабатывет, это проверено. Файлы тоже есть на месте, и проверку при добавлении проходят. Полез в classes/controller/controller.php Метод addJS($js_uri) В конце метода вывожу состояние свойства js_files И по началу все нормально, он набирает этот массив файлов, а потом что-то случается, и этот массив удаляется и становится новый, затем еще один и еще один(ну и в каких-то есть мои файлы добавленные), в общем перезаписывается. А в результате получается, что все, что было до первой перезаписи, отрисовалось. А все остальное нет. Как это побороть ? С виду ощущение что в системе всегда должна быть одна актуальная копия контроллера, и сайт должен с ней работать и тогда сам массив js файлов не будет сбрасываться, а постепенно наращиваться... В общем лирика-лирикой а js не инклудится. Что делать ? Как быть ? Link to comment Share on other sites More sharing options...
Kerm Posted July 18, 2014 Share Posted July 18, 2014 (edited) public function hookHeader($params){}Какой еще hookdisplayHeader, зачем скрипты пихать в свой хук когда есть стандартный? PS.: Не говоря уже о том что именно название displayHeader может глючить, потому что оно уже завязано в престе: 'HOOK_HEADER' => Hook::exec('displayHeader'), Edited July 18, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
sors Posted July 18, 2014 Share Posted July 18, 2014 displayHeader это стандартный хук Link to comment Share on other sites More sharing options...
Kerm Posted July 18, 2014 Share Posted July 18, 2014 (edited) Вообще не понятно почему в одних модулях пишется так: public function hookHeader($params) { // } А в других так: public function hookDisplayHeader($params) { //// } Хз чем эти два хука различаются, например в модуле blocklayered скрипты и стили добавляются в первый хук, а в модулях blockcontact, blockmyaccount во втором...PS.: Меня еще смутили слова автора "При инициализации зарегистрировал свой хук:" тут не совсем понятно либо он сделал собственный свой хук который совпал со стандартным в престе, либо он в такой форме написал про то что зарегистрировал свой модуль в стандартном хуке. Edited July 18, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
NitroGenerate Posted July 18, 2014 Author Share Posted July 18, 2014 Kerm, повторяю, я взял по аналогии с каким-то дефолтным модулем престы(не помню каким), и реализовал на основе свой. потому что оно уже завязано в престе: Мне кажется это бредом, так как я того и добиваюсь. Так как оно завязано в престе, то в моем модуле отработает этот завязанный хук с престой, который сделает свою работу. Но на самом деле причина была в другом. Как я и писал выше: С виду ощущение что в системе всегда должна быть одна актуальная копия контроллера, и сайт должен с ней работать и тогда сам массив js файлов не будет сбрасываться, а постепенно наращиваться... Я был прав. В системе всегда должн находиться только одни фронт контроллер, будь то index на главной, cms в статических страницах и тд... В своем модуле я стартанул свой контроллер, который создал вторую копию другого контроллера. Визуально ошибок не было, да и контроллер стартанул нормально. Но по факту все остальные файлы, которые подключались после старта моего котроллера в модуле(js css) попросту срубились, так как они подключались не к index контроллеру уже (если я нахожусь главной странице) а к моему, который я стартанул в модуле. Исправил благодаря статическим методам в своем контроллере. Вообще считаю это недоработкой со стороны престы. Link to comment Share on other sites More sharing options...
NitroGenerate Posted July 18, 2014 Author Share Posted July 18, 2014 Вообще не понятно почему в одних модулях пишется так: public function hookHeader($params) { // } А в других так: public function hookDisplayHeader($params) { //// } Хз чем эти два хука различаются, например в модуле blocklayered скрипты и стили добавляются в первый хук, а в модулях blockcontact, blockmyaccount во втором... PS.: Меня еще смутили слова автора "При инициализации зарегистрировал свой хук:" тут не совсем понятно либо он сделал собственный свой хук который совпал со стандартным в престе, либо он в такой форме написал про то что зарегистрировал свой модуль в стандартном хуке. $this->registerHook('displayHeader') Регистрирую свой хук в престе. Сообщаю престе, что когда она начнет отрабатывать displayHeader в шаблоне. То что бы она не забыла про мой модуль. Заглянула в него и выполнила метот связанный с этим хуком. function hookdisplayHeader(); Кстатит я могу хоть так зарегать свой хук $this->registerHook('njhjahdjas') При регистрации преста увидит, что у нее в базе нет таких хуков и запишет его. Далее я объявляю свой метод выдачи инфы к этому хуку function hooknjhjahdjas(); А в шаблоне в нужном месте мы заставляем вывести все модули связанные с хуком {hook h='njhjahdjas'} В нашем случае это будет только 1 модуль. Link to comment Share on other sites More sharing options...
sors Posted July 18, 2014 Share Posted July 18, 2014 hookHeader устаревший и работает в режиме совместимости, который когда-нибудь отключат. Теперь у всех хуков есть префикс display либо action Одновременно должен вызываться только один контроллер, если нужны чужие методы используйте наследование Link to comment Share on other sites More sharing options...
Recommended Posts