Выполнение javaScript на системных страницах

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 14:54

Встала задача выполнения своего JS на стандартных страницах magento. Как вывести свои скрипты, допустим, на странице оформления заказа, когда заказ уже получен, т.е. на /checkout/onepage/success/, причем передать в DOM модель информацию о заказанных товарах? Была первая идея вывести в момент события checkout_type_onepage_save_order_after, но думаю это неправильно логически, не соответствует стандартам DOM, да и не сработает.

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 14:55

Добавить клиентские скрипты на конкретные страницы вы можете через макетные правила.

#3 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 15:01

Как узнать оформление правил. Допустим для своих контроллеров понятно
    <mymodule_mycontroller_myaction>
	<reference name="head">
		<action method="addJs"><script>mymodule/script.js</script></action>
	</reference>
    </mymodule_mycontroller_myaction>

а вот как для вышеописанного случая? Попробовал
    <checkout_onepage_success>
	<reference name="head">
		<action method="addJs"><script>mymodule/script.js</script></action>
	</reference>
    </checkout_onepage_success>

не сработало. Да и подключив скрипты в них не передать нужную информацию.

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 15:02

Передать. Подключенный скрипт в состоянии выполнить асинхронный запрос на сервер.

#5 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 15:05

Подловили, это да. А что с примером? Все ж вроде правильно. Модуль checkout, контроллер onepage и действие success. Если конечно редиректов никаких не происходит.

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

29.07.2011 15:08

Правильно.
Где расположен ващ скрипт?

#7 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 15:12

/js/mymodule/script.js
я думал независимо от того, существует ли сам скрипт, если открыть исходный код требуемой страницы в браузере, то найдешь заветную строку
<script type="text/javascript" src="http://site.ru/js/mymodule/script.js"></script>
однако почему-то не хочет она появляться.

#8 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

29.07.2011 22:14

Сам виноват, работал только с админкой, а тут то нужно вывести во frontend. Всего то надо было добавить в config.xml
	<frontend>
		<layout>
			<updates>
				<mynamespace_mymodule module="mynamespace_mymodule">
					<file>mynamespace_mymodule.xml</file>
				</mynamespace_mymodule>
			</updates>
		</layout>
	</frontend>
Вопрос, независимо от темы этот файл mynamespace_mymodule.xml нужно размещать в app\design\frontend\base\default\layout\ ? По поводу асинхронного запроса, дабы узнать параметры сделанного заказа, как в новом запросе отследить именно этот заказ? Неужели вытаскивать последний сделанный заказ?

#9 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

30.07.2011 10:36

Да, лучше размещать шаблоны и макетные правила вашего модуля в папке base, тогда они будут доступны сразу всем темам.
В то же время, вы всегда можете потом создать индивидуальные шаблоны и макетные правила для конкретной темы им положить из в папку темы, и они будут иметь приоритет перед файлами из папки base.

#10 Ярослав Богуцкий 2
  • Группа: Пользователь
  • Сообщений: 75
  • Регистрация: 07.07.2011

30.07.2011 13:30

А как подключить внешний скрипт?

#11 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

30.07.2011 18:53

<reference name="head">
    <block type="core/text" name="mystuff.js">
       <action method="setText">
           <text>
               <![CDATA[
                   <script type="text/javascript" src="http://www.myurl.com/file.js"></script>
               ]]>
           </text>
       </action>
    </block>            
</reference>


Поделиться темой: