Проблемы при разборе переменных с PHP на JavaScript
Сценарий. Для отслеживания событий (Добавить в корзину, Условия поиска, Представления товаров и т. Д.) С тестового веб-сайта электронной коммерции (Opencart) функция JavaScript написана на нижнем колонтитуле, и эти функции вызываются при триггерах кнопок или при загрузке страницы.
Проблема: при отслеживании события просмотра продукта следующий код добавляется на страницу продукта, функция captureProductView()
вызывается из нижнего колонтитула, а параметры clientid, fname, lname
получены из getClientDetails();
<script>
window.onload=function(){
getClientDetails();
captureProductView('<?php echo $product['product_id']; ?>',
'<?php echo $product['name']; ?>', '<?php echo $product['price']; ?>',
clientid, fname, lname);
};
</script>
Но значения из переменных PHP $product['product_id']
, $product['name']
, $product['price']
не может быть проанализирован в теге script, оставив сообщение:
Примечание: неопределенная переменная: product в /home/path.../product.tpl в строке 29"
для всех этих трех переменных
Я попытался присвоить эти значения переменным javaScript, которые также не работали.
var p_id = "<?php echo $product['product_id']; ?>";
var p_name = "<?php echo $product['name']; ?>";
Есть ли способ, где я могу проанализировать переменные php в тег сценария, чтобы они могли быть переданы в качестве параметров в функцию?
1 ответ
Вы получаете ошибку, потому что ассоциативный массив $product
не определен в сценарии PHP, который отображает страницу.
Ваш первый вариант - отредактировать скрипт так, чтобы $product['product_id']
, $product['name']
, $product['price']
определяются и присваиваются правильные значения.
Обратите внимание, что ваш первый фрагмент кода имеет синтаксическую ошибку, поскольку вы неправильно используете одинарную кавычку. Вы должны использовать как одинарные, так и двойные кавычки:
captureProductView('<?php echo $product["product_id"]; ?>',
'<?php echo $product["name"]; ?>',
'<?php echo $product["price"]; ?>',
clientid, fname, lname);
У вас есть второй вариант, который разбирает с помощью JavaScript значения из отображаемой страницы.
captureProductView( $('input[name=product_id]').val(),
$('h1').text().trim(),
$('.price').text().trim(),
clientid, fname, lname);
Это сработало в макете, который я пробовал, но, возможно, потребуются незначительные изменения в другом макете, чтобы выбрать нужные элементы страницы для получения значений.
Обратите внимание, что я использовал jQuery для извлечения значения из элементов страницы.
Значение для цены представляет собой строку типа "Price: $24"
и в зависимости от ваших потребностей может потребоваться дополнительная базовая обработка строк для извлечения только значения цены (24
в примере).
Для справки я попробовал выше на этой странице:
http://themes.webiz.mu/opencart/apparel/index.php?route=product/product&product_id=69
Однако я настоятельно не рекомендую этот подход, потому что при изменении макета функция может сломаться.
Все вышеперечисленные два варианта предполагают, что captureProductView
правильно отправляет данные на сервер с помощью запроса AJAX и clientid
, fname
, lname
определены в коде JavaScript.