|
|
|
|
|
для: Владимир55
(02.08.2013 в 00:09)
| | Как душе угодно, только сомнительно, что ваш код это и есть хорошее. ) | |
|
|
|
|
|
|
|
для: confirm
(01.08.2013 в 23:43)
| | Ну а если вам этого не надо
Лично мне в подавляющем большинстве случаев не надо.
Лучшее - оно враг хорошего. Идеала все равно достичь не удастся. А мой девиз - быстрее, ибо времени на программирование у меня очень мало и совершенствоваться в этом направлении нет ни возможности, ни потребности.
За советы спасибо! | |
|
|
|
|
|
|
|
для: Владимир55
(01.08.2013 в 23:35)
| | Да никакого академизма. Нет проблем сказать (хотя иногда нужны уточнения от задающего вопрос) - тут чиркнуть так, а вот тут вот так, а дальше ваши проблемы.
Но хотелось бы понять, чего же вы решаете, ну не похоже это на корзину, в моем понимании. А ведь сделать можно компактно и универсально, и можно конкретную идею или мысль предложить, но для этого нужны действия с вашей стороны.
Ну а если вам этого не надо, то и нет претензий. | |
|
|
|
|
|
|
|
для: confirm
(01.08.2013 в 01:10)
| | не понять чего вы в конечном итоге хотите.
Пришлось разместить тему на другом форуме и никаких вопросов не возникло - профи все прекрасно понял и просто дописал то, что я не умею.
В принципе, мне импонирует Ваш академизм, но время требует действий и конкретный результат ценнее всего. По крайней мере, для меня. А после Ваших консультаций, как правило, проблем становится больше, а до цели - дальше. Хотя вцелом Вы правы. | |
|
|
|
|
|
|
|
для: Владимир55
(01.08.2013 в 00:22)
| | Потому у вас и нет корзины, так как изначально вы не решаете эту задачу, а пытаетесь решить разрозненные куски или даже локальные кусочки. А так задачи не решают.
Что такое в вашем примере таблица - это описание товаров на странице, которые и добавляются в базу? Почему таблица, ведь товары на странице, это далеко не табличные данные? Представление товаров табличными данными имеет место быть только в полном представлении корзины, при ее редактировании. Если это как раз полное представление корзины (ее редактирование), то какие могут быть в ней картинки с кнопками, по которым в эту ячейку этой таблицы что-то должно добавляться? Редактирование корзины, это форма, и при каждом ее изменении нужно пересчитывать все, отдавать клиенту измененные данные по всем товарам.
Что тогда у вас в параграфах - это краткая корзина? Если да, то почему возвращаемое сервером должно отображаться не в них, а ячейке таблицы?
Добавление товара, причем сразу должно учитываться способ его добавления - по одному или произвольное число товара, редактирование корзины - изменение количества товара, удаление товара или группы выбранных товаров, полное очищение корзины, все это корзина, и значит это один скрипт обработчик. То есть не может быть никаких сообщений пользователю "скрипт не найден", хотя бы уже потому, что рядовой покупатель возможно даже не в курсе такого понятия как "скрипт". Адрес обращения ajax-запроса (имя скрипта) прописывается в его параметре, а не передается ему аргументом.
А что на данный момент времени требуют от сервера - добавить товар в корзину, удалить его из корзины, корректировать его величину..., все это определяется параметрами запроса. И данный параметр должен быть определен изначально, им может служить и значение id кнопки (span или div), например, id=add-10, из которого простой операцией замены дефиса на знак равно легко получить параметр запроса, по которому сервер будет знать, что нужно добавить в корзину товар с id равный 10.
Определившись с тем как будет происходить добавление товара, пишем серверный код корзины, а в этом вопросе тоже есть нюансы. Например, выгодно id товара держать первым элементом, а его количество последним элементом вложенного массива, так как это позволит без всяких циклов получить число товаров в корзине и итоговую сумму для краткой корзины.
Я не вижу у вас корзины, это просто какой-то набор, даже для теста совсем непонятный, то есть бессмысленный. Но если вы считаете, что проблема отобразить в ячейке таблицы, то это как раз не проблема. Не знаю в какой вам надо, но если это предыдущая от той в которой кнопка, то, нужно просто обратиться к предыдущему братскому элементу, вот пример:
function fn(e) {
alert(e.previousSibling.innerHTML)
}
<p>aaa</p><p onclick="fn(this)">bbb</p>
| Думаю, что пример красноречиво говорит - картинка в ссылке, которая в ячейке, это уже перебор, так как можно с успехом щелкнуть и просто по ячейке, которую можно оформить как душа пожелает. А лучше всего это список, это более разумное и выгодное решение для отображения товаров на странице, нежели таблица. И событие не стоит прописывать каждой кнопке, лучше делегировать его обработку их общему родителю.
Вот если в таком ключе решать задачу, что-то можно советовать или предлагать, в противном случае не понять чего вы в конечном итоге хотите. | |
|
|
|
|
|
|
|
для: confirm
(31.07.2013 в 21:00)
| | Это не корзина, это перечень чего-то, что помещено во что-то.
Согласен, это верное замечание.
Собственно, и с другими замечаниями тоже согласен.
Но сейчас стоит конкретная задача - вывести количество кликов по каждому товару в соответствующую строку таблицы.
Как я понимаю, для этого нужно создать группу свойств на сервере типа
$dataProducts = '';
foreach($m_kol as $key => $val) // Обход массива
{
$dataProducts .= "<br />Номер товара $key Количество $val " ;
$countProducts = isset($countProducts) ? $countProducts + $val : 0;
}
echo json_encode(array('data'=>$dataProducts, 'count'=>$countsProducts));
|
А на клиенте в функции приема ответа декодировать JSON и получить объект с двумя свойствами. Одно поставить в див с текстом, а другое в див с количеством. А может быть, и одного хватит. В общем, что-то в этом роде.
К сожалению, реализовать не получается. | |
|
|
|
|
|
|
|
для: Владимир55
(31.07.2013 в 18:02)
| | Это не корзина, это перечень чего-то, что помещено во что-то. Корзина же, это механизм, причем реализующий различные операции над товарами в корзине, чего у вас нет. А если этого нет, то значит и суждение, что "на самом деле надо выводить только $val (количество)" ошибочно.
И зачем отправлять в обработчик в качестве аргумента имя скрипта, у вас что их куча?
<a href="#" onClick="startAjax('basket.php?id=5');"><img alt="" src="2.jpg" /></a>
А не выгоднее ли span или div со стилями, включая изображение кнопки в качестве фона, да и вообще не грузить такую мелочь, а "вшить" эти данные в файл стиля? | |
|
|
|
|
|
|
| Попытался самостоятельно сделать простейшую Корзину http://wowa55.pz9.ru/testsearch/42.html (коды ниже). Здесь по клику на изображение Корзины должно увеличиваться количество товара в ней и показываться суммарное количество отобранного товара (около Большой Корзины).
Эта страница показывает результаты поиска товара по базе, поэтому количество строк в ней может быть разным и я понимаю, что это важно. Но в данный момент, для настроки связи с сервером и отладки работы Корзины, я использую простой HTML файл, являющийся слепком с РНР скрипта, взаимодействующего с базой (для простоты).
В приципе, все работает и обмен с сервером происходит нормально. Но здесь номер товара и количество я вывожу просто для того, чтобы видеть, что обмен с сервером идет. А на самом деле надо выводить только $val (количество), причем непосредственно в самой ячейке таблицы.
И вот это сделать как раз не удается!
Как решить эту проблему?
Страница 42.html
<?php session_start(); ?><!DOCTYPE html>
<html lang="ru-RU">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="style.css" />
<title>Проба</title>
<script type="text/javascript">
function startAjax(url){
var request;
if(window.XMLHttpRequest){
request = new XMLHttpRequest();
} else if(window.ActiveXObject){
request = new ActiveXObject("Microsoft.XMLHTTP");
} else {
return;
}
request.onreadystatechange = function(){
switch (request.readyState) {
case 4:{
if(request.status==200){
document.getElementById("printResult").innerHTML = "<b>"+request.responseText+"</b>";
}else if(request.status==404){
alert("Ошибка: запрашиваемый скрипт не найден!");
}
else alert("Ошибка: сервер вернул статус: "+ request.status);
break
}
}
}
request.open ('GET', url, true);
request.send ('');
}
function print_console(text){
document.getElementById("console").innerHTML += text;
}
</script>
</head>
<body>
<div id="printResult"> </div>
<p align="center"><img border="0" src="1.jpg" width="200" height="162"></p>
<p align="center">Товаров: 0</p>
<p align="center">на сумму: 0 рублей</p>
<div align="center">
<table border="1" width="100%" style="border-collapse: collapse" id="table1" bordercolor="#000000">
<tr>
<td>Производитель</td>
<td>Артикул</td>
<td>Название</td>
<td>Количество</td>
<td>Цена</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Virgin Connect</td>
<td>155578417-vc</td>
<td>Торговая стратегия "Тетраэдр"</td>
<td>2</td>
<td>20390</td>
<td><a href="#" onClick="startAjax('basket.php?id=1');"><img alt="" src="2.jpg" /></a>
</td>
<td> </td>
</tr>
<tr>
<td>Virgin Connect</td>
<td>1728173698-vc</td>
<td>Торговая стратегия "Oval-five"</td>
<td>4</td>
<td>18250</td>
<td><a href="#" onClick="startAjax('basket.php?id=2');"><img alt="" src="2.jpg" /></a>
</td>
<td> </td>
</tr>
<tr>
<td>Virgin Connect</td>
<td>93659187-vc</td>
<td>Торговая стратегия "Синус"</td>
<td>10</td>
<td>24060</td>
<td><a href="#" onClick="startAjax('basket.php?id=3');"><img alt="" src="2.jpg" /></a>
</td>
<td> </td>
</tr>
<tr>
<td>Virgin corporation</td>
<td>356221377-vc</td>
<td>Торговая стратегия "Парабола"</td>
<td>3</td>
<td>99000</td>
<td><a href="#" onClick="startAjax('basket.php?id=4');"><img alt="" src="2.jpg" /></a>
</td>
<td> </td>
</tr>
<tr>
<td>Virgin Connect</td>
<td>300087491-vc</td>
<td>Торговая стратегия "Express"</td>
<td>11</td>
<td>38200</td>
<td><a href="#" onClick="startAjax('basket.php?id=5');"><img alt="" src="2.jpg" /></a>
</td>
<td> </td>
</tr>
</table>
<p> </p>
</body>
</html>
|
Серверный файл basket.php
<?php
session_start();
$n_sum = $_SESSION['n_sum'];
$n_sum++;
$_SESSION['n_sum'] = $n_sum;
echo "<br />Всего " . $n_sum ;
$m_kol = $_SESSION['m_kol'];
$id = $_GET['id'];
$m_kol[$id]++;
$_SESSION['m_kol'] = $m_kol;
foreach($m_kol as $key => $val) // Обход массива
{
echo "<br />Номер товара $key Количество $val " ;
}
|
| |
|
|
| |
|