Jump to content

Не могу подключить js в модуле


Recommended Posts

Ребят, подскажите, почему преста брыкается и не дает подключить мой 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

public function hookHeader($params){}

Какой еще hookdisplayHeader, зачем скрипты пихать в свой хук когда есть стандартный?
 
 
PS.: Не говоря уже о том что именно название displayHeader может глючить, потому что оно уже завязано в престе:
 
'HOOK_HEADER' => Hook::exec('displayHeader'),

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Вообще не понятно почему в одних модулях пишется так:

 

	public function hookHeader($params)
	{
           //
        }

А в других так:
 

	public function hookDisplayHeader($params)
	{
        ////
        }

Хз чем эти два хука различаются, например в модуле blocklayered скрипты и стили добавляются в первый хук, а в модулях blockcontact, blockmyaccount во втором...


PS.: Меня еще смутили слова автора "При инициализации зарегистрировал свой хук:"  тут не совсем понятно либо он сделал собственный свой хук который совпал со стандартным в престе, либо он в такой форме написал про то что зарегистрировал свой модуль в стандартном хуке.

Edited by Kerm (see edit history)
Link to comment
Share on other sites

Kerm,  повторяю, я взял по аналогии с каким-то дефолтным модулем престы(не помню каким), и реализовал на основе свой. 

потому что оно уже завязано в престе:

 

 Мне кажется это бредом, так как я того и добиваюсь. Так как оно завязано в престе, то в моем модуле отработает этот завязанный хук с престой, который сделает свою работу.

 

Но на самом деле причина была в другом. 

Как я и писал выше:

С виду ощущение что в системе всегда должна быть одна актуальная копия контроллера, и сайт должен с ней работать и тогда сам массив js файлов не будет сбрасываться, а постепенно наращиваться...

 

 

Я был прав. В системе всегда должн находиться только одни фронт контроллер, будь то index на главной, cms в статических страницах и тд... В своем модуле я стартанул свой контроллер, который создал вторую копию другого контроллера. Визуально ошибок не было, да и контроллер стартанул нормально. Но по факту все остальные файлы, которые подключались после старта моего котроллера в модуле(js css) попросту срубились, так как они подключались не к index контроллеру уже (если я нахожусь главной странице) а к моему, который я стартанул в модуле.

Исправил благодаря статическим методам в своем контроллере.

 

Вообще считаю это недоработкой со стороны престы.

Link to comment
Share on other sites

Вообще не понятно почему в одних модулях пишется так:

 

 

	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

hookHeader устаревший и работает в режиме совместимости, который когда-нибудь отключат. Теперь у всех хуков есть префикс display либо action

 

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

Link to comment
Share on other sites

×
×
  • Create New...