Перейти к содержимому


Следующий и предыдущий товар


  • Вы не можете ответить в тему
Сообщений в теме: 41

#21 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 20 August 2013 - 04:45 PM

Сделал PHP-часть покороче:

$q = db_query("SELECT p.productID, p.name, p.Price, pp.filename FROM ".PRODUCTS_TABLE." AS p LEFT JOIN ".PRODUCT_PICTURES." AS pp ON p.default_picture = pp.photoID where p.enabled=1 AND p.categoryID=$categoryID");
while($row=db_fetch_assoc($q)) $p_around[] = $row;
$i = 0;
$last = count($p_around)-1;
while($p_around[$i]['productID'] != $productID) $i++;
$smarty->assign("prev_productID", $p_around[$i>0?$i-1:$last]);
$smarty->assign("next_productID", $p_around[$i<$last?$i+1:0]);

При таком раскладе у первого товара в категории "предыдущим" становится последний, а у последнего "следующим" - первый.
Если товаров всего два, то обе ссылки будут на "другой" товар.
Если товар всего один, то обе ссылки будут "на себя".
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#22 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 23 August 2013 - 02:33 PM

Сделал PHP-часть покороче:


$q = db_query("SELECT p.productID, p.name, p.Price, pp.filename FROM ".PRODUCTS_TABLE." AS p LEFT JOIN ".PRODUCT_PICTURES." AS pp ON p.default_picture = pp.photoID where p.enabled=1 AND p.categoryID=$categoryID");
while($row=db_fetch_assoc($q)) $p_around[] = $row;
$i = 0;
$last = count($p_around)-1;
while($p_around[$i]['productID'] != $productID) $i++;
$smarty->assign("prev_productID", $p_around[$i>0?$i-1:$last]);
$smarty->assign("next_productID", $p_around[$i<$last?$i+1:0]);

При таком раскладе у первого товара в категории "предыдущим" становится последний, а у последнего "следующим" - первый.
Если товаров всего два, то обе ссылки будут на "другой" товар.
Если товар всего один, то обе ссылки будут "на себя".

У меня с этим кодом в $prev_productID и $next_productID выводится массив, а не ID товара.
Хотя, так даже удобнее.
  • 0

#23 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 23 August 2013 - 03:02 PM

У меня с этим кодом в $prev_productID и $next_productID выводится массив, а не ID товара.

Естественно. Откуда Вы будете брать остальное, если будет только ID? В моем-то коде нет передачи в шаблон всей выборки товаров по категории.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#24 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 25 August 2013 - 09:27 PM

Откуда Вы будете брать остальное, если будет только ID? В моем-то коде нет передачи в шаблон всей выборки товаров по категории.

Разобрался - это не проблема. Подкузьмили Вы с этим кодом.
Попробуйте зайти на отключенный товар - это приводит к бесконечному циклу.
Пока разобрался, почему поисковые боты валили сервер... Три для апач ложился через каждые 20-30 минут.
Конечно, боты знают адреса страниц даже давно отключенных товаров.
Пока что обернул Этот код в "if ( $product["enabled"] )". Так работает.

П.С. Но код красивый!
  • 0

#25 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 25 August 2013 - 10:08 PM

Разобрался - это не проблема. Подкузьмили Вы с этим кодом. Попробуйте зайти на отключенный товар - это приводит к бесконечному циклу.

1. Выкладывая код я предполагаю, что воспользовавшийся этим кодом знает как минимум не меньше меня. Т.е. в коде меньше чем на десять строк сможет понять, что и как происходит.
2. Да, я традиционно забываю enabled=1 в селекте по таблице товаров. И даже писал уже об этом. Ну, что тут скажешь. Так уж сложилось. Ну вот забываю :)
3. Не понял, как может получиться бесконечный цикл.

Пока что обернул Этот код в "if ( $product["enabled"] )". Так работает.

Хм.. Вообще-то достаточно добавить в запрос enabled=1
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#26 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 26 August 2013 - 09:55 PM

Выкладывая код я предполагаю, что воспользовавшийся этим кодом знает как минимум не меньше меня.

Естественно :)

Не понял, как может получиться бесконечный цикл.

Когда в категории с отключенным товаром все товары отключены. Попробуйте - страница не загружается, а процесс апача, который пытается ее загрузить грузит процессор на 100%.
Когда набирается таких процессов критическое количество, апач падает.

Хм.. Вообще-то достаточно добавить в запрос enabled=1

Это есть в запросе. Подозреваю, что вешается не запрос, а второй цикл while.
  • 0

#27 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 26 August 2013 - 10:26 PM

В категории с отключенным товаром все товары отключены

Если в категории ВСЕ товары отключены, то как Вы попали на товар из этой категории? :)))) А если включен хоть один, то см. выше или ниже.

Это есть в запросе. Подозреваю, что вешается не запрос, а цикл while.

Да, если нет ни одного товара в результате SELECT-а (т.е. все товары в категории отключены и массив $row пуст), то цикл будет бесконечен. Но тот же вопрос - как тогда клиент попал на товар из этой категории, если все товары отключены? Ведь если включен хотя бы один товар, то все будет нормально и как описано.

Может, Вы пытаетесь как-то изменить (расширить?) логику этих нескольких строчек?

PS. (позже, задумавшись) Или имеется в виду, что при прямом обращении к отключенному товару "product_31.html" (например, из поисковика), при условии отсутствия (или отключенности) других товаров этой же категории получим бесконечный цикл while и белый экран в браузере в результате?

PPS. Лечится-то понятно, что легко (хотя надо подумать для красоты реализации), но интересно, я о том?
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#28 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 27 August 2013 - 07:22 AM

как Вы попали на товар из этой категории

Пока разобрался, почему поисковые боты валили сервер... Три для апач ложился через каждые 20-30 минут. Конечно, боты знают адреса страниц даже давно отключенных товаров.

Почему-то на выходных сайт начал активно сканироваться поисковым роботом MSNbot.
Отключил его в роботсе, но за ним пришли другие - ограничил им скорость сканирования.
Помогло, но не надолго.
Пока разобрался, что проблема на самом деле не в активности ботов, а в том что они заходят на отключенные товары.

(например, из поисковика), при условии отсутствия (или отключенности) других товаров этой же категории получим бесконечный цикл while и белый экран в браузере в результате?
...
но интересно, я о том?

Да, все так и есть Вы правильно поняли.
Самое печальное, что даже если закрыть эту страницу, процесс апача остается висеть и грузить сервер.
  • 0

#29 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 August 2013 - 08:20 AM

Да, все так и есть Вы правильно поняли.

достаточно добавить проверку в while

while($p_around[$i]['productID'] != $productID && $row) $i++;

  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#30 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 27 August 2013 - 10:09 AM

достаточно добавить проверку в while while($p_around[$i]['productID'] != $productID && $row) $i++;

Не так. Так не работает. Нужно вместо $row проверять $p_around:
while($p_around[$i]['productID'] != $productID && $p_around) $i++;

  • 0

#31 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 August 2013 - 12:33 PM

Не так. Так не работает

Лоханулся :). $row ведь по любому к этому моменту будет пустым :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#32 Grom

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: -2
Начинающий

Отправлено 17 January 2014 - 03:43 PM

Добавим на страницу детального описания товар ссылки для перехода на предыдущий и следующий товары в текущей категории.

Что изменить, что бы пролистывание не ограничивалось текущей категорией, а автоматически переходило на товары из следующей категории?
  • 0

#33 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 17 January 2014 - 07:09 PM

Что изменить, что бы пролистывание не ограничивалось текущей категорией, а автоматически переходило на товары из следующей категории?

Переписать код SQL-запроса :).
Так, чтобы "влево-вправо" ближними были товары из текущей категории, потом из вышестоящей и так далее.
Если же Вы хотите, чтобы за Вас кто-то из спортивного интереса написал код и инструкцию, а Вы бы применили оное на своем коммерческом сайте, так это врядли.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#34 Grom

    Пользователь

  • Пользователи
  • PipPip
  • 10 сообщений
Репутация: -2
Начинающий

Отправлено 17 January 2014 - 09:34 PM

Переписать код SQL-запроса :).
Так, чтобы "влево-вправо" ближними были товары из текущей категории, потом из вышестоящей и так далее.
Если же Вы хотите, чтобы за Вас кто-то из спортивного интереса написал код и инструкцию, а Вы бы применили оное на своем коммерческом сайте, так это врядли.

Солидарен. Полушишечных героев, Вам подобных, большинство.
  • -2

#35 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 18 January 2014 - 12:23 AM

Полушишечных героев, Вам подобных, большинство.

Да бог с Вами! Халявщиков, подобных Вам, намного больше :).

PS. Я ведь написал уже в соседней теме, что две-пять минут - не жалко. Поверьте, эта задача сильно выходит за рамки пяти минут. Если, конечно, нет уже готового решения. У меня - нет. И я не видел НОРМАЛЬНОГО решения поставленной задачи. Так что либо ждите альтруиста, которому будет интересно решить эту задачу в качестве самообразования (сам таким еще два-три года назад был), либо решайте сами, либо платите за решение.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#36 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 19 January 2014 - 08:01 AM

Сквозная навигация
  • 0

#37 Dmitriy71

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 0
Начинающий

Отправлено 06 August 2014 - 02:32 PM

Небольшая поправочка, если ЧПУ не установлен, то в запросе к БД нужно убрать

t1.uri,

т.е. получится
$q = db_query("select t1.productID, t1.name, t1.Price,  t2.filename from ".PRODUCTS_TABLE." t1 left join ".PRODUCT_PICTURES." t2 on t1.default_picture = t2.photoID where t1.enabled=1 AND t1.categoryID=".(int)$a["categoryID"] );


Добрый день!
Давно хотел себе такое, спасибо!
Поставил по ВТОРОМУ варианту. Изменений никаких. Убрал t1.uri, Появились изменения но какие то кривые. Вместо стрелок: словами вернуться .......... и далее............ Фотографии во всю величину. Смотреть скриншот в прикрепленном файле
Что за ЧПУ, это из за него отображается все неправильно, или я код вставил неправильно.

Прикрепленный файл  Скрин.png   402.91К   7 Количество загрузок:
  • 0

#38 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 August 2014 - 07:37 PM

Чуть выше есть ссылка на мой вариант "Предыдущий-Следующий". ИМХО, она куда интереснее в смысле навигации по товарам.

Вместо стрелок: словами вернуться .......... и далее............ Фотографии во всю величину.

Как в HTML-коде написано, так и получаете. Если в коде не заданы принудительно (width, height) размеры фоток для ссылок "предыдущий-следующий", то получите их в реальном размере. Я код этого дополнения не помню, но, думаю, у выложившего дополнение small-фотки были нужного размера, поэтому принудительно задавать размер было не нужно.

PS. Глянул первые сообщения треда - там в явном виде написано "Внимание!!! Вывод не оформлен, т.е. выведутся картинки наименования товаров и цена, но как попало. Оформление пожалуйста потрудитесь сделать самостоятельно )))"
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#39 Dmitriy71

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 0
Начинающий

Отправлено 07 August 2014 - 10:58 AM

Чуть выше есть ссылка на мой вариант "Предыдущий-Следующий". ИМХО, она куда интереснее в смысле навигации по товарам.

Какую ссылку Вы имеете ввиду?
PS. Заходил на Ваш демо сайт выглядит неплохо!
  • 0

#40 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 August 2014 - 11:37 AM

Какую ссылку Вы имеете ввиду?

На тему с другим вариантом навигации. Она находится в письме, предшествующем Вашему и называется "Сквозная навигация".
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)