Пользователь создает материал Объявление. Выставляет цену, валюту. Как ему рядышком показать переденную сумму в другую валюту.
Курсы других валют лежат в таксономии, в доп.полях.
Нашел такую подсказку http://stackoverflow.com/questions/10856769/execute-javascript-on-node-c...
Но чето громоздко, наверное лишнего куча. Я ведь не создаю ноду программным путем.
Комментарии
используйте hook_node_view_alter()
Проверил то что в ссылке на английском - работает но не то что надо - запускает явоскрипт уже по созданю ноды.
Вот hook_node_view_alter()
function hook_node_view_alter(&$build) {
if ($build['#view_mode'] == 'full' && isset($build['an_additional_field'])) {
// Change its weight.
$build['an_additional_field']['#weight'] = -10;
}
// Add a #post_render callback to act on the rendered HTML of the node.
$build['#post_render'][] = 'my_module_node_post_render';
}
с хуками еще не разобрался, что на что менять, мне будто бы поля добавлять не надо
в английском примере еще двая js файла лежало
testModule.overlay.behaviors.js
testModule.behaviors.js
они будут нужны?
понял что только одним hook_node_view_alter() не обойтись
нужно просто без создания всяких полей дать сработать яваскрипту. С помошью него и определятся значения цены и валюты по событию onChange, помножатся на курс и выведутся рядышком.
скорее нужен hook_node_prepare
попробую подключить к нему Drupal_add_js
получилось запустить яваскрипт как здесь https://www.drupal.org/node/1253520#comment-4881588
на семерке тоже пошло
function mymodule_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'my_form':
$form['#after_build'][] = 'mymodule_after_build';
break;
}
}
function mymodule_after_build($form, &$form_state) {
$path = drupal_get_path('module', 'mymodule');
drupal_add_js ("$path/mymodule.js");
return $form;
}
только почему-то на любой странице срабатывает, на любойй форме
подставлял в 'my_form' - 'ads_node_form', 'ads' (ads - тип моего материала)
Ваш скрипт надо вешать на поле через #attached если надо чтобы работал везде где есть поле формы.
пока сделал через hook_form_alter
два раза выдавало событие js потому что брал заготовку модуля с использованием js из http://stackoverflow.com/questions/10856769/execute-javascript-on-node-c...
и там скрип в mymodule.info включили
description = Customizing stuffs on the site...
core = 7.x
package = My modules
scripts[] = js/testModule.behaviors.js
убрал его все заработало
вот толковый мануал по теме нашел
http://befused.com/drupal/form-alter
найти бы эту книжку http://befused.com/starting-drupal-dev/
Скрипт работает.
Но как получить Элементы?
вот исходник страницы создания ноды
<label for="edit-field-price-und-0-value"></label>
<input id="edit-field-price-und-0-value" class="form-text required" type="text" maxlength="12" size="14" value="123.00" name="field_price[und][0][value]"></input>
</div>
пытался получить доступ к полю
добавил в js файл
alert("test1");
};
выдает:
Uncaught TypeError: Cannot set property 'onclick' of null
(anonymous function)
хотя если в консоль вбиваю - 'onclick' срабатывает
поставил вес яваскрипта 30
и модуля 3
добавил $ в
document.getElementById("edit-field-price-und-0-value").onclick=function($){
alert("test1");
};
не работает
через jQuery
$('#edit-title-field-und-0-value').click(function(){
alert("test3");
});
тоже не работает
Uncaught TypeError: undefined is not a function
(anonymous function)
почему-то не видит он элементы через drupal_add_js через('file')
проверил через('inline') - сработало
читал что когда через файл подключается то нужно какой-то особый формат jQuery использовать
короче, https://www.drupal.org/node/2035395 тут ответ
Получилось и через hook_after_build c drupal_add_js и через #attached - как ниже приведено:
<?php
switch ($form_id) {
$form['#attached']['js'][] = array(
function Mymodule_form_alter(&$form, &$form_state, $form_id) {
// dpm($form_id);
case
'ads_node_form': // dpm($form);'type' => 'file',
'data' => drupal_get_path('module','Mymodule') . '/js/myModule.js',
);
}
?>}
надо было правильно jQuery записать
{
$(document).ready(function() {
alert("Hello!");
document.getElementById("edit-title-field-und-0-value").onchange=function()
{
alert("Hello!2");
};
});
}
})(jQuery);
как js использовать в чистом виде так и не понятно
Что же непонятного - так и использовать.