Проблемы при разборе переменных с 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.

Другие вопросы по тегам