Я купил modalbox-плагин на рынке envato, сделанный в javascript, я хочу использовать его для реализации моих категорий> подкатегорий> элементов. В любом случае, я знаю, что переменной JavaScript может быть присвоено значение с использованием php, но мне нужно обратное.
На моем первом шаге я разрешаю пользователю выбирать категорию, используя базовые ссылки, тогда onclick даже переносит их на второй слайд, где я хочу отображать подкатегории и элементы, относящиеся к этой категории, которая была выбрана.
Я попробовал две вещи:
1) setting onClick = "step2();<?php $chosen_cat = ' . $this->db->escape(trim($category)) . '?>"
Надеюсь, я могу просто присвоить имя выбранной категории значению, а затем просто использовать метод $ selected_cat в методе javascript step2 () для отображения продуктов, однако это нарушает javascript, так как в результате возникает конфликт;
2) Я изменил step2 () на step2 (category), а затем использовал onclick = "step2 (db-> escape ($ category););" это передает значение методу step2 (), однако теперь мне нужно будет вызвать <- мне нужно будет распечатать эту строку для php, но я не знаю, как решить эту проблему, учитывая, что PHP -> JS является жизнеспособным, поскольку его сервер клиент отношение но задний ..
$ This-> db-> escape () – это метод http://codeigniter.com/user_guide/database/queries.html codeigniter.
Мой код:
<script type="text/javascript"> function step1() { modalbox.show(new Element("div").insert( new Element("p", { "align": "justify" }).insert( <?php $categories = $items; $chosen_cat = ''; ?> <?php $i = 0; foreach($categories as $category => $itemarray) { $i++; if($i==27){ echo $this->db->escape('<a class="category" onclick="step2();<?php $chosen_cat = ' . $this->db->escape(trim($category)) . '?>" href="#">'. trim($category) . '</a>'); } else { echo $this->db->escape('<a class="category" onclick="step2();" href="#">' . trim($category) . '</a>') . '+'; } } ?> ) ), { "title" : "Step 1/3", "width" : 800, "options" : [{ "label" : "Next »", "onClick" : step2 }] }); }; function step2() { alert(<?php $this->db->escape($chosen_cat); ?>); modalbox.show([ new Element("div").insert( new Element("p", { "align": "justify" }).insert( "If you open a modalbox when another one is opened, it will stretch to the new " + "modalbox width and height and overwrite the content.<br /\><br /\>" + "You can use HTML or Prototype Elements like a DIV or a TABLE." ) ), new Element("p", { "align": "justify" }).insert( "You can have multiple contents on a single modalbox by using an array like this:<br /\><br /\>" + "<pre>modalbox.show([ content1, content2, ... ], options);</pre>" ) ], { "title" : "Step 2/3", "width" : 800, "options" : [{ "label" : "« Previous", "onClick" : step1 }, { "label" : "Next »", "onClick" : step3 }] }); }; function step3() { modalbox.show([ new Element("div").insert( new Element("p", { "align": "justify" }).insert( "If you open a modalbox when another one is opened, it will stretch to the new " + "modalbox width and height and overwrite the content.<br /\><br /\>" + "You can use HTML or Prototype Elements like a DIV or a TABLE." ) ), new Element("p", { "align": "justify" }).insert( "You can have multiple contents on a single modalbox by using an array like this:<br /\><br /\>" + "<pre>modalbox.show([ content1, content2, ... ], options);</pre>" ) ], { "title" : "Step 3/3", "width" : 800, "hideOnPageClick": false, "options" : [{ "label" : "« Previous", "onClick" : step2 }, { "label" : "Finish", "isDefault" : true, "onClick" : modalbox.hide }] }); }; </script>
Можно ли установить переменную сеанса с JavaScript в событии onclick, скажем $ _SESSION ['category'] = 'category' в стиле js, а затем прочитать этот сеанс с php и отключить его, я не думаю, что это создало бы большую часть безопасности проблема, поскольку сессия будет существовать на протяжении менее секунды.
JavaScript никогда не будет устанавливать переменную PHP. JavaScript работает на клиенте и PHP на сервере. Если вам нужно что-то изменить на сервере от JS, вы должны использовать AJAX или отправить обычный HTTP-запрос.
Кроме того, вы можете генерировать PHP данные, необходимые во время выполнения на клиенте, обычно путем печати некоторого JSON, чтобы стать переменной JS
В вашем примере вам понадобится что-то вроде следующего (я буду использовать jQuery для простоты)
... onclick="$.ajax('/category.php').done(function(data) {step2(data.category);})"
Что было бы гораздо приятнее, если бы не JS в HTML
$('#my-button').click(function(){ $.ajax('/category.php').done(function(data) { step2(data.category); }); });
Я не могу дать вам учебник AJAX, но главное, что вы сделаете запрос AJAX, когда вам понадобятся данные с сервера.