Вызов php функции из js
Доброго времени суток. При темизации часто использую вызовы фунций ( krumo($node);?> или значений полей вида ( print render($content[‘title_field’]); или
print ($node->field_products_price[‘und’][0][‘value’]); ). Иногда field_view_field(), — хотя и знаю что так более правильно.
Сейчас возникла потребность из разметки, которую строит JS вывести к примеру $node->field_products_price[‘und’][0][‘value’]);?>. Инструкции есть двойные кавычки » $node->field_products_price[‘und’][0][‘value’]);?>» и можно передавать значение переменной в js.
Но нужно не значение передать а вызвать эту переменную в нужном месте верстки. Но верстку создает java script и более того с координатной сеткой.
И надо чтобы этот вызов произошел в месте на этой координатной сетке.
Небольшой участок скрипта для примера
.
var $content = $(‘Content’);
if (!!marker.content) $content.text(marker.content);
$content.on(‘change keydown paste input’, function() marker.content = $content.text();
>);
$text_box.append($content);
.
Если например так $text_box.append(«»); то на выходе «» . Оно и понятно учитывая что через «.append». Вот пол дня потратил, но подходящего способа привязать к макету (создаваемому java script) php функцию не нашел. Может у кого идеи будут как это сделать, а то мои закончились.
- Drupal7
- Есть вопрос
- Решение проблем
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
gun_dose 1 марта 2018 в 6:51
Пхп выполняется на сервере. Жс в браузере. Поэтому никак.
Однако, судя по коду из вашего примера, вам просто достаточно перейти а вкладку devel со страницы нужной ноды.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
ivnish 1 марта 2018 в 7:31
Вообще-то можно. Для этого есть ajax. Но в данном случае автору нужно ещё раз переосмыслить задачу
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
gun_dose 1 марта 2018 в 9:09
AJAX нужен для того, чтобы страница обменивалась данными с удалённым сервером, а не для вызова произвольного пхп-кода. Это очень существенный момент. Кроме того, в рамках веб-страницы переменная $node не существует и не может существовать. Соответственно и при вызове аякса она будет другая. Можно конечно передать айдишник и загрузить ноду, но это будет совсем не то, что хочет автор, т.к. придётся объявлять новый роут и писать клиентский js для обработки ответа этого роута.
Поэтому да, автору нужно переосмыслить задачу и подтянуть матчасть.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
adano 1 марта 2018 в 7:58
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Спасибо всем отписавшимся. Похоже действительно надо задачу переосмыслить.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Да, переосмыслил. — помогло. C JS знаком был очень поверхностно.
Что помогло решить задачу:
Вывел на участке страницы php функцию обернул в с нумерацией в названии класса.
$x = 0;
while ($x++ <$t) <
print »;
print ($items[$x]);
print »;
>
Дальше, как оказалось есть такой замечательный jQuery метод .offset().
Можно получать координаты элемента и тут же передавать. И вместо того чтобы пытаться вызвать функцию в нужных местах координатной сетки, просто переместил область, где она вызвана в места, где она должна выводится по задумке.
function() var ofs = $(‘.row.row_1.ui-draggable.ui-draggable-handle’).offset();
$(‘.image-marker__text-box.green.row.row_1’).offset(ofs);
var ofs = $(‘.row.row_2.ui-draggable.ui-draggable-handle’).offset();
$(‘.image-marker__text-box.green.row.row_2’).offset(ofs);
var ofs = $(‘.row.row_3.ui-draggable.ui-draggable-handle’).offset();
$(‘.image-marker__text-box.green.row.row_3’).offset(ofs);
>
P.S. Наверное более правильно было бы парсить JSON файл с координатами, а не копировать и передавать уже выведенные через java script, но тут надо уже подтянуть мат. часть более основательно. А пока такой вариант вроде работает.
P.P.S. Совет переосмыслить был очень кстати, оказалось, можно довольно просто решить если зайти с другой стороны.))
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
fairrandir 2 марта 2018 в 13:01
Заверните пожалуйста код в тэг. Читать сложно.
И почитайте документацию по foreach.
foreach ( $items as $key => $item ) print ‘
‘ ;
>
?>?php
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Sart_ 2 марта 2018 в 13:44
Да, код не сообразил как-то, но после комментариев уже поправить не выходит.
По foreach очень существенное замечание, спасибо — так намного удобнее писать.
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
- Реакции
Как вызвать функцию в JS
Чтобы вызвать функцию необходимо после ее имени поставить круглые скобки, в которые, в зависимости от поставленной задачи, можно передать значения или оставить их пустыми. Смотрите пример:
function myFunc() < console.log(2 + 5); >; myFunc();
Результат выполненного кода:
Смотрите также
- урок
основы работы с пользовательскими функциями в JavaScript
Трепачёв Дмитрий © 2012-2023
t.me/trepachev_dmitry
Как вызвать функцию JavaScript из PHP?
Как вызвать функцию JavaScript из PHP?
Следующий код из xyz. html(при нажатии кнопки) вызывает wait() во внешнем xyz. js. Этот wait() вызывает wait. php.
11 ответов
Что касается PHP (или, действительно, веб-сервера в целом), HTML-страница не более сложна, чем большая строка.
Вся фантастическая работа, которую вы можете сделать с языком, например PHP, — чтение из баз данных и веб-сервисов, и все это — конечная цель — это тот же самый основной принцип: сгенерируйте строку HTML *.
Ваша большая строка HTML не станет чем-то более особенным, чем до загрузки браузера. Как только браузер загружает страницу, происходит вся другая магия — макет, материал модели коробки, создание DOM и многое другое, включая выполнение JavaScript.
Итак, вы не «вызываете JavaScript из PHP», вы «включаете вызов функции JavaScript в свой вывод».
Есть много способов сделать это, но вот пара.
Использование только PHP:
Выход из режима php в режим прямого вывода:
Вам не нужно возвращать имя функции или что-то в этом роде. Прежде всего, прекратите писать запросы AJAX вручную. Ты только делаешь упор на себя. Получите jQuery или одну из других отличных фреймворков.
Во-вторых, поймите, что вы уже собираетесь выполнять javascript-код после получения ответа от вызова AJAX.
Вот пример того, что я думаю, что вы делаете с jQuery AJAX
Теперь, если вы настроены на отправку имени функции из PHP обратно на вызов AJAX, вы тоже можете это сделать.
* Или JSON или XML и т. д.
JavaScript Обращение к функции
Код внутри JavaScript function будет выполняться, когда «что-то» обращается к нему.
Обращение к JavaScript функции
Код внутри функции не выполняется, когда функция определена.
Код внутри функции выполняется, когда к функции обратились.
Обычно используется термин «вызов функции» вместо «обращение к функции«.
Также часто говорят «вызвать функцию», «запустить функцию» или «выполнить функцию».
В этой главе учебника мы будем использовать обращение к функции, потому что к JavaScript функции можно обратиться без вызова.
Обращение к функции как функции
Пример
function myFunction(a, b) <
return a * b;
>
myFunction(10, 2); // вернёт 20
Функция выше не принадлежит ни одному объекту. Но в JavaScript всегда есть глобальный объект по умолчанию.
В HTML глобальным объектом по умолчанию является сама HTML страница, поэтому указанная выше функция «принадлежит» к HTML странице.
В браузере объект страницы является окном браузера. Функция выше автоматически становится функцией окна.
ФункциИ myFunction() и window.myFunction() являются одинаковыми:
Пример
function myFunction(a, b) <
return a * b;
>
window.myFunction(10, 2); // также вернёт 20
Это распространенный способ вызова функции JavaScript, но не очень хорошая практика.
Глобальные переменные, методы или функции могут легко создавать конфликты имен и ошибки в глобальном объекте.
Ключевое слово this
В JavaScript то, что называется this , является объектом, который «владеет» текущим кодом.
Значение this , когда используется в функции, является объектом, который «владеет» функцией.
Обратите внимание, что this не является переменной. Это ключевое слово. Вы не можете изменить значение this .
Подсказка: Вы можете прочитать больше про ключевое слово this в разделе JS Ключевое слово this на нашем сайте.
Глобальный объект
Когда функция вызывается без объекта-владельца, значение this становится глобальным объектом.
В веб-браузере глобальный объект — это окно браузера.
Этот пример возвращает объект окна как значение this :
Пример
var x = myFunction(); // x будет объектом окна
function myFunction() return this;
>
Обращение к функции как к глобальной функции приводит к тому, что значение this будет глобальным объектом.
Использование объекта окна в качестве переменной может легко привести к краху вашей программы.
Вызов функции как метода
В JavaScript вы можете определить функции как методы объекта.
В следующем примере создается объект (myObject), с двумя свойствами (firstName и lastName), и методом (fullName):
Пример
var myObject = <
firstName:»Андрей»,
lastName: «Щипунов»,
fullName: function () <
return this.firstName + » » + this.lastName;
>
>
myObject.fullName(); // Вернёт «Андрей Щипунов»
Метод fullName является функцией. Функция принадлежит объекту. myObject является владельцем функции.
То, что называется this , является объектом, который «владеет» JavaScript кодом. В этом случае значение этого this является myObject.
Попробуйте это! Измените метод fullName для возврата значения this :
Пример
var myObject = <
firstName:»Андрей»,
lastName: «Щипунов»,
fullName: function () <
return this;
>
>
myObject.fullName(); // Вернёт [оbject Object]
Вызов функции как метода объекта приводит к тому, что значением this является сам объект.
Вызов функции с помощью конструктора функций
Если вызову функции предшествует ключевое слово new — это вызов конструктора.
Похоже на то, как вы создаете новую функцию, но поскольку функции JavaScript являются объектами, вы фактически создаёте новый объект:
Пример
// Это конструктор функции:
function myFunction(arg1, arg2) this.firstName = arg1;
this.lastName = arg2;
>
// Это создаёт новый объект
var x = new myFunction(«Андрей», «Щипунов»);
x.firstName; // вернёт «Андрей»
Вызов конструктора создает новый объект. Новый объект наследует свойства и методы от своего конструктора.
Ключевое слово this в конструкторе не имеет значения.
Значение this будет новым объектом, созданным при вызове функции.