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


Сквозная навигация "Предыдущий/Следующий"


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

#1 badisoft

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

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

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

Дополнение отличается от предыдущих в основном тем, что помнит выбранную в категории сортировку и переход "предыдущий-следующий" делает соответственно ей.
При достижении последнего товара в категории переходит к первому товару следующей.
При достижении последнего товара последней категории переходит к первому товару первой категории.
При движении в обратную сторону (по предыдущему товару) аналогично.
Ну и таки да, картинка товара, как же без этого :).

Вдохновитель написания модуля - хялявщик Grom. Без него я бы так и не собрался наконец-то сделать все это по человечески, т.е. с поддержкой сортировки и переходом из категории в категорию.

Посмотреть можно тут - http://cpu.badisoft....ook-IQ-701.html

Установка:
==========


1. в файле category.php

1.1 в функции _getUrlToNavigate

1.1.1 вместо


$url .= "&sort=".$_GET["sort"];


вставляем


# BEGIN Save-sort-to-session
#$url .= "&sort=".$_GET["sort"];
$_SESSION["sort"] = $_GET["sort"];
if ( isset($_SESSION["sort"]) )
$url .= "&sort=".$_SESSION["sort"];
# END Save-sort-to-session


1.1.2 вместо


$url .= "&direction=".$_GET["direction"];


вставляем


# BEGIN Save-sort-to-session
#$url .= "&direction=".$_GET["direction"];
$_SESSION["direction"] = $_GET["direction"];
if ( isset($_SESSION["direction"]) )
$url .= "&direction=".$_SESSION["direction"];
# END Save-sort-to-session


1.2 вместо


$callBackParam["sort"] = $_GET["sort"];


вставляем


# BEGIN Save-sort-to-session
#$callBackParam["sort"] = $_GET["sort"];
$_SESSION["sort"] = $_GET["sort"];
if ( isset($_SESSION["sort"]) )
$callBackParam["sort"] = $_SESSION["sort"];
# END Save-sort-to-session


1.3 вместо


$callBackParam["direction"] = $_GET["direction"];


вставляем


# BEGIN Save-sort-to-session
#$callBackParam["direction"] = $_GET["direction"];
$_SESSION["direction"] = $_GET["direction"];
if ( isset($_SESSION["direction"]) )
$callBackParam["direction"] = $_SESSION["direction"];
# END Save-sort-to-session


Таким образом мы сохраним в $_SESSION выбранную в категории сортировку и сможем ее потом использовать при переходе к предыдущему/следующему товарам


2. в файле product_detailed.php

перед


$smarty->hassign("customer_name", $customer_name);


вставляем


# BEGIN Prev-Next-products
$mcats = array();
foreach ($cats as $cat) // получим список только не пустых категорий
{
$child_count = 0;
foreach ($cats as $child) if ($child['parent']==$cat['categoryID']) $child_count += $child['products_count'];
if ($cat['products_count']>$child_count) $mcats[] = $cat;
}

$last_cats = count($mcats)-1;
for ($i=0;$i<=$last_cats;$i++) // найдем предыдущую и следующую категории относительно текущей
{
if ($categoryID == $mcats[$i]['categoryID'])
{
if ($i == 0) // если текущая категория первая, то предыдущей будет последняя
{
$prev_cat = $mcats[$last_cats]['categoryID'];
$next_cat = $mcats[1]['categoryID'];
}
elseif ($i == $last_cats) // если текущая категория последняя, то следующей будет первая
{
$prev_cat = $mcats[$last_cats-1]['categoryID'];
$next_cat = $mcats[0]['categoryID'];
}
else
{
$prev_cat = $mcats[$i-1]['categoryID'];
$next_cat = $mcats[$i+1]['categoryID'];
}
break;
}
}

$sort = isset($_SESSION['sort'])?$_SESSION['sort']:str_replace(array(' ASC',' DESC'),'',CONF_DEFAULT_SORT_ORDER);
$direction = isset($_SESSION['direction'])?$_SESSION['direction']:(strpos('ASC',CONF_DEFAULT_SORT_ORDER)?'ASC':(strpos('DESC',CONF_DEFAULT_SORT_ORDER)?'DESC':''));
$reverce = ($direction == 'DESC')?'ASC':'DESC';
$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=";

$prod = array();
$data = db_query("$query$categoryID ORDER BY $sort $direction");
while ($row = db_fetch_assoc($data)) $prod[] = $row;

$last_prod = count($prod)-1;
for ($i=0;$i<=$last_prod;$i++)
{
if ($productID == $prod[$i]['productID'])
{
if ( $last_prod == 0) // в категории всего один товар, т.е. "следующий" и "предыдущий" будут из "следующей" и "предыдущей" категорий (либо - см. ниже про "либо")
{
$row = db_fetch_assoc(db_query("$query$prev_cat ORDER BY $sort $reverce LIMIT 1"));
$prev = $row;
$row = db_fetch_assoc(db_query("$query$next_cat ORDER BY $sort $direction LIMIT 1"));
$next = $row;
}
elseif ($i == 0) // это первый товар в категории с учетом сортировки и "предыдущий" товар будет из "предыдущей" категории (либо последний из последней категории, если текущая категория первая)
{
$row = db_fetch_assoc(db_query("$query$prev_cat ORDER BY $sort $reverce LIMIT 1"));
$prev = $row;
$next = $prod[1];
}
elseif ($i == $last_prod) // это последний товар в категории с учетом сортировки и "следующий" товар будет из "следующей" категории (либо первый из первой категории, если теущая категория последняя)
{
$row = db_fetch_assoc(db_query("$query$next_cat ORDER BY $sort $direction LIMIT 1"));
$prev = $prod[$last_prod-1];
$next = $row;
}
else
{
$prev = $prod[$i-1];
$next = $prod[$i+1];
}
break;
}
}
$smarty->assign("prev", $prev);
$smarty->assign("next", $next);
# BEGIN Prev-Next-products


3. в файл product_detailed.tpl.html вставляем


{* BEGIN Prev-Next-products *}
<table width="100%">
<tr align="center">
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev.productID}.html{else}index.php?productID={$prev.productID}{/if}'><img src="data/small/{$prev.filename}" alt="{$prev.name}" title="{$prev.name}" style="max-height:100px"></a></td>
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next.productID}.html{else}index.php?productID={$next.productID}{/if}'><img src="data/small/{$next.filename}" alt="{$next.name}" title="{$next.name}" style="max-height:100px"></a></td>
</tr>
<tr align="center">
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev.productID}.html{else}index.php?productID={$prev.productID}{/if}'>Предыдущий</a></td>
<td><a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next.productID}.html{else}index.php?productID={$next.productID}{/if}'>Следующий</a></td>
</tr>
</table>
{* END Prev-Next-products *}

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

#2 badisoft

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

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

Отправлено 19 January 2014 - 04:04 PM

Оопс... Нашел ляп. Если следующая (предыдущая) категория пустая, то ссылка будет некорректной. Надо что-то придумать...

Если следующая (предыдущая) категория пустая, то ссылка будет некорректной

Поправил. Ссылка на товар теперь не из ближайшей категории, а из ближайшей не пустой.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 NEViL

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

  • Download User
  • PipPipPip
  • 42 сообщений
Репутация: 4
Начинающий

Отправлено 02 February 2014 - 12:50 PM

1.2 в функции _sortSetting

вместо

$sort_url = '&sort='.$_GET["sort"].'&direction='.$_GET["direction"];

Вы тут не ошиблись ?.... Ато что-то никак не могу найти этого :mellow:
  • 0

#4 badisoft

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

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

Отправлено 02 February 2014 - 04:26 PM

Вы тут не ошиблись ?.... Ато что-то никак не могу найти этог

Ошибся. Действительно, нет такой строки в дефолтовой _sortSetting, а у меня давно уже не дефолтовая.
Упустил этот момент, когда писал инструкцию.
Дойдут руки - на днях исправлю.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 badisoft

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

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

Отправлено 06 February 2014 - 01:23 PM

Дойдут руки - на днях исправлю.

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

#6 NEViL

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

  • Download User
  • PipPipPip
  • 42 сообщений
Репутация: 4
Начинающий

Отправлено 06 February 2014 - 06:23 PM

Дойдут руки - на днях исправлю.

Исправил.


Поставил на чистый магазин на локалке.... Не работает для самого первого и для самого последнего товара

Поставил на хостинг где много товаров, не работает для первого и последнего товара в категории... Допустим в категории 1 есть 5 подкатегорий, вот по этим 5-ти всё норм. Как только доходит до последнего товара (подкатегории 5, соответственно категории 1) в категорию 2 перехода нет....

Хотя у вас на сайте всё отлично... странно...
  • 0

#7 badisoft

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

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

Отправлено 06 February 2014 - 06:53 PM

Поставил на чистый магазин на локалке.... Не работает для самого первого и для самого последнего товара

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

PS. Я сегодня днем, перед написанием "исправил" поставил это дополнение строго по инструкции, по пунктам на чистый ShopCMS с тестовой базой товаров. Примерно как тестовый сайт в подписи, но совсем голый, дефолтовый. Все работает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 badisoft

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

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

Отправлено 14 February 2014 - 06:25 AM

Вполне возможно, что в дополнении действительно есть какая-то ошибка

Есть. Найдена. Исправлена :).

PS. Ошибка проявлялась когда родительская категория пуста, т.е. товар есть только в дочерних категориях, а в родительской его нет. На тестовом сайте таких категорий нет, поэтому там все хорошо и так :).
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#9 NEViL

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

  • Download User
  • PipPipPip
  • 42 сообщений
Репутация: 4
Начинающий

Отправлено 16 February 2014 - 08:42 AM

Вполне возможно, что в дополнении действительно есть какая-то ошибка

PS. Ошибка проявлялась когда родительская категория пуста, т.е. товар есть только в дочерних категориях, а в родительской его нет. На тестовом сайте таких категорий нет, поэтому там все хорошо и так :).


У меня именно так и есть ;) . Спасибо !
  • 0

#10 makki

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

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 03 June 2014 - 11:19 AM

Вопрос. Как скажется на индексации магазина изменения в навигации, связанные с добавлением нового товара?
  • 0

#11 badisoft

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

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

Отправлено 03 June 2014 - 03:04 PM

Вопрос. Как скажется на индексации магазина изменения в навигации, связанные с добавлением нового товара?

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

#12 makki

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

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 03 June 2014 - 04:07 PM

А что изменяется в навигации при добавлении нового товара? :)

Для предыдущего товара Следующий товар станет другим, также как для Следующего товара Предыдущий товар. Извините за тавтологию.
  • 0

#13 badisoft

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

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

Отправлено 03 June 2014 - 04:23 PM

Предыдущий и следующий он будет для человека, а для поисковика это ссылка. просто ссылка. Без ранжирования предыдущая она или следующая, левая или правая, верхняя или нижняя.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 badisoft

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

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

Отправлено 26 June 2015 - 02:10 PM

Найдена ошибка, внесено исправление.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 jiykka

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

  • Download User
  • PipPip
  • 29 сообщений
Репутация: 0
Начинающий

Отправлено 25 October 2016 - 01:06 PM

Модуль простоял 3 недели. Приехал с командироваки, почистил в ручную кэш и все пропало.
При переходе на след или предыдущий товар выдает 404 и путь на товар /product_.html
Картинки и альты не выводит.
Код пересмотрел, все стоит четко как в инструкции. Не подскажите где рыть?))
  • 0

#16 badisoft

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

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

Отправлено 25 October 2016 - 04:58 PM

Не подскажите где рыть?

Традиционно начать с отчета ShopCMS об ошибках.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 jiykka

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

  • Download User
  • PipPip
  • 29 сообщений
Репутация: 0
Начинающий

Отправлено 25 October 2016 - 05:27 PM

Не подскажите где рыть?

Традиционно начать с отчета ShopCMS об ошибках.

Ошибки движка
WARNING: unlink(core/cache/mobile) [<a href='function.unlink'>function.unlink</a>]: Operation not permitted
Line: 3025
File: /home/hunterz/hunterz.ru/docs/admin.php
Link: /admin.php?dpt=conf&sub=setting&settings_groupID=2
Date: 25.10.16 - 13:20:51
Dump:
array(3) {
  ["dpt"]=>
  string(4) "conf"
  ["sub"]=>
  string(7) "setting"
  ["settings_groupID"]=>
  int(2)
}
array(48) {
  ["settingCONF_SHOP_NAME"]=>
  string(7) "Hunterz"
  ["settingCONF_DEFAULT_TITLE"]=>
  string(87) "Интернет-магазин по продаже цифровых, ночных и оптических приборов для охоты и туризма."
  ["settingCONF_SHOP_URL"]=>
  string(14) "www.hunterz.ru"
  ["settingCONF_HOMEPAGE_META_DESCRIPTION"]=>
  string(255) "у нас вы можете купить коллиматорные и оптические прицелы, бинокли дневного и ночного видения, лазерные дальномеры, патроны для холодной пристрелки, ночные прицелы, ночные монокуляры, тепловизоры, цифровые приборы и прицелы, а так же аксессуары к ним от в"
  ["settingCONF_HOMEPAGE_META_KEYWORDS"]=>
  string(154) "ночной прицел коллиматор прибор ночного видения монокуляр лазерный дальномер кронштейн пристрелка оружия цифровой насадка прицел оптический ночной бинокль"
  ["settingCONF_GENERAL_EMAIL"]=>
  string(15) "info@hunterz.ru"
  ["settingCONF_ORDERS_EMAIL"]=>
  string(15) "info@hunterz.ru"
  ["settingCONF_SECURITY_EXPIRE"]=>
  string(1) "2"
  ["settingCONF_ONLINE_EXPIRE"]=>
  string(2) "10"
  ["settingCONF_TAB_COUNT_IN_HOME"]=>
  string(1) "4"
  ["settingCONF_COLUMNS_PER_PAGE"]=>
  string(1) "3"
  ["settingCONF_NEWS_COUNT_IN_CUSTOMER_PART"]=>
  string(1) "3"
  ["settingCONF_PRODUCTS_PER_PAGE"]=>
  string(3) "100"
  ["settingCONF_NEWS_COUNT_IN_NEWS_PAGE"]=>
  string(2) "20"
  ["settingCONF_MINIMAL_ORDER_AMOUNT"]=>
  string(4) "1000"
  ["settingCONF_MAIL_HOST"]=>
  string(11) "mail.nic.ru"
  ["settingCONF_MAIL_LOGIN"]=>
  string(15) "info@hunterz.ru"
  ["settingCONF_MAIL_PASS"]=>
  string(14) "chariotuthjdbx"
  ["settingCONF_SMARTY_FORCE_COMPILE"]=>
  string(1) "1"
  ["settingCONF_MOD_REWRITE"]=>
  string(1) "1"
  ["settingCONF_SHOW_ADD2CART"]=>
  string(1) "1"
  ["settingCONF_FULLY_EXPAND_CATEGORIES_IN_ADMIN_MODE"]=>
  string(1) "1"
  ["settingCONF_EMAIL_ORDER_SEND"]=>
  string(1) "1"
  ["settingCONF_AUTOSAVE"]=>
  string(1) "1"
  ["settingCONF_CHECKSTOCK"]=>
  string(1) "1"
  ["settingCONF_SHOW_PARENCAT"]=>
  string(1) "1"
  ["settingCONF_SECURE_SESSIONS"]=>
  string(1) "1"
  ["settingCONF_DISPLAY_PRCODE"]=>
  string(1) "1"
  ["settingCONF_PRODUCT_MAIL"]=>
  string(1) "1"
  ["settingCONF_DISP_ORDERNUM"]=>
  string(1) "1"
  ["settingCONF_USE_GZIP"]=>
  string(1) "1"
  ["settingCONF_ENABLE_CONFIRMATION_CODE"]=>
  string(1) "1"
  ["settingCONF_MULTYCART"]=>
  string(1) "1"
  ["settingCONF_PRODUCT_SORT"]=>
  string(1) "1"
  ["setting_DATEFORMAT"]=>
  string(10) "DD.MM.YYYY"
  ["settingCONF_DEFAULT_CURRENCY"]=>
  string(1) "3"
  ["settingCONF_SELECT_CART_METHOD"]=>
  string(1) "2"
  ["settingCONF_USER_SYSTEM"]=>
  string(1) "1"
  ["settingCONF_MAIL_METHOD"]=>
  string(1) "1"
  ["settingCONF_TIMEZONE"]=>
  string(1) "0"
  ["settingCONF_DEFAULT_TEMPLATE"]=>
  string(7) "shopcms"
  ["settingCONF_MOBILE_TEMPLATE"]=>
  string(7) "shopcms"
  ["settingCONF_NEW_ORDER_STATUS"]=>
  string(1) "3"
  ["settingCONF_COMPLETED_ORDER_STATUS"]=>
  string(1) "4"
  ["settingCONF_DEFAULT_SORT_ORDER"]=>
  string(16) "sort_order, name"
  ["settingCONF_DEFAULT_CUSTOMER_GROUP"]=>
  string(1) "1"
  ["settingCONF_DEFAULT_COUNTRY"]=>
  string(1) "1"
  ["save"]=>
  string(0) ""
}

WARNING: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument
Line: 353
File: /home/hunterz/hunterz.ru/docs/index.php
Link: /index.php?address_book=yes
Date: 14.10.16 - 14:38:13
Dump:
array(1) {
  ["address_book"]=>
  string(3) "yes"
}
array(0) {
}


ERROR: 1054:Unknown column 'top' in 'order clause'
Sql: SELECT p.productID, p.name, p.Price, pp.filename FROM niil_products AS p LEFT JOIN niil_product_pictures AS pp ON p.default_picture = pp.photoID where p.enabled=1 AND p.categoryID=24 ORDER BY top
Link: /product_383.html
Date: 25.10.16 - 13:00:41
Dump:
array(1) {
  ["productID"]=>
  string(3) "383"
}
array(0) {
}
Только три типа ошибок если смотреть в админке.
Если firebug включать - ничего не находит.
  • 0

#18 badisoft

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

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

Отправлено 25 October 2016 - 10:29 PM

Ошибки движка

Не, эти ошибки не о том.
Увы, либо Вы разбираетесь сами, либо заказываете платно.
Мне в голову не приходит, куда посоветовать смотреть.
Почти очевидно, что по какой-то причине SQL-запрос, возвращающий параметры (productID, имя файла картинки, etc) их не возвращает. Поэтому и ссылка некороректная (product_.html вместо product_xx.html), и картинки нет.
Ну а по какой причине это происходит можно узнать только посмотрев на Ваш движок.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)