Доброго времени суток. При темизации часто использую вызовы фунций (<?php
krumo($node);?> или значений полей вида ( print render($content['title_field']); или
print ($node->field_products_price['und'][0]['value']); ). Иногда field_view_field(), - хотя и знаю что так более правильно.
Сейчас возникла потребность из разметки, которую строит JS вывести к примеру <?php
$node->field_products_price['und'][0]['value']);?>. Инструкции есть двойные кавычки "<?php
$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("<?php krumo($node);?>"); то на выходе "<"!--?php krumo($node);?--">" . Оно и понятно учитывая что через ".append". Вот пол дня потратил, но подходящего способа привязать к макету (создаваемому java script) php функцию не нашел. Может у кого идеи будут как это сделать, а то мои закончились.
Комментарии
Пхп выполняется на сервере. Жс в браузере. Поэтому никак.
Однако, судя по коду из вашего примера, вам просто достаточно перейти а вкладку devel со страницы нужной ноды.
Вообще-то можно. Для этого есть ajax. Но в данном случае автору нужно ещё раз переосмыслить задачу
AJAX нужен для того, чтобы страница обменивалась данными с удалённым сервером, а не для вызова произвольного пхп-кода. Это очень существенный момент. Кроме того, в рамках веб-страницы переменная $node не существует и не может существовать. Соответственно и при вызове аякса она будет другая. Можно конечно передать айдишник и загрузить ноду, но это будет совсем не то, что хочет автор, т.к. придётся объявлять новый роут и писать клиентский js для обработки ответа этого роута.
Поэтому да, автору нужно переосмыслить задачу и подтянуть матчасть.
https://www.drupal.org/docs/7/api/javascript-api/simple-drupal-ajax-load...
Ну и как вариант, через inline добавить js
https://www.codeexpertz.com/blog/drupal/drupal-7-adding-js-files-and-cod...
console.log & e.t.
http://xandeadx.ru/blog/drupal/429
Спасибо всем отписавшимся. Похоже действительно надо задачу переосмыслить.
Да, переосмыслил. - помогло. C JS знаком был очень поверхностно.
Что помогло решить задачу:
Вывел на участке страницы php функцию обернул в <'div> с нумерацией в названии класса.
$x = 0;
while ($x++<$t) {
print '<'div class="image-marker__text-box green row row_';
print $x;
print '">';
print ($items[$x]);
print '<'/div>';
}
Дальше, как оказалось есть такой замечательный 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. Совет переосмыслить был очень кстати, оказалось, можно довольно просто решить если зайти с другой стороны.))
Заверните пожалуйста код в тэг. Читать сложно.
И почитайте документацию по foreach.
<?php
foreach ($items as $key => $item) {
print '<div class="image-marker__text-box green row row_' . $key . '">' . $item . '</div>';
}
?>
Да, код не сообразил как-то, но после комментариев уже поправить не выходит.
По foreach очень существенное замечание, спасибо - так намного удобнее писать.