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


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


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

#1 Dbus

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

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 22 October 2011 - 10:38 PM

Добавим на страницу детального описания товар ссылки для перехода на предыдущий и следующий товары в текущей категории. Для начала определим идентификатор предыдущего и следующего в текущей категории товаров. Для этого в файле core/includes/product_detailed.php перед строкой:

$smarty->hassign("customer_name", $customer_name);
вставляем код

/// навигация по товарам    
// выбираем все включеные продукты в текущей категории
$q = db_query("select productID from ".PRODUCTS_TABLE." where enabled=1 AND categoryID=".(int)$a["categoryID"] );
while( $row=db_fetch_row($q) )
$productID_array[] = $row["productID"];
/// определяем индекс текущего продукта
$key = array_search($productID, $productID_array);
if(count($productID_array) == 2) //если в категории только 2 товара
{
if((int)$key == 0) // если товар первый в выборке
$smarty->assign("next_productID", end($productID_array));
else // если товар последний в выборке
$smarty->assign("prev_productID", reset($productID_array));
}
elseif(count($productID_array) > 2) //если в категории более 2 товаров
{
if((int)$key == 0) // если товар первый в выборке
{
$smarty->assign("prev_productID", end($productID_array)); // предыдущим товаром становится последний в выборке
$smarty->assign("next_productID", $productID_array[$key+1]);
}
elseif((int)$key == (count($productID_array) - 1)) // если товар последний в выборке
{
$smarty->assign("prev_productID", $productID_array[$key-1]); // следующим товаром становится первый в выборке
$smarty->assign("next_productID", reset($productID_array));
}
else
{
$smarty->assign("prev_productID", $productID_array[$key-1]);
$smarty->assign("next_productID", $productID_array[$key+1]);
}
}
///end


осталось добавить следующий код в шаблон - файл core/tpl/user/ваш_шаблон/product_detailed.tpl.html
{* навигация по товарам *}
{if $prev_productID}
    <a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev_productID}.html{else}index.php?productID={$prev_productID}{/if}'>Предыдущий</a>
{/if}
{if $next_productID}
    <a href='{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next_productID}.html{else}index.php?productID={$next_productID}{/if}'>Следующий</a>
{/if}

источник


  • 0
502 Bad Gateway

#2 ramshaus

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

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

Отправлено 29 October 2011 - 10:41 AM

Кто ставил этот дополнение к ShopCMS 3.1.2
  • 0

#3 Dbus

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

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 29 October 2011 - 10:47 AM

я ставил. все ок
  • 0
502 Bad Gateway

#4 SHvonderSiN

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

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

Отправлено 02 December 2011 - 10:11 AM

У меня вопрос... это и есть перелинковка или это другое?
  • 0

#5 ramshaus

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

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

Отправлено 02 December 2011 - 10:15 AM

нет это не модуль перелинковки, это переход на следующий товар в данной категории
  • 0

#6 R.Sergey

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

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

Отправлено 27 April 2012 - 01:28 AM

Дописал немного дополнение, чтобы кроме слов следующий и предыдущий были еще картинка цена и наименование. Назовем это версия 2,0 )))

Все действия нужно производить вместо тех что указанны в первом посте а не после.

Открываем
core/includes/product_detailed.php
Перед строкой
$smarty->hassign("customer_name", $customer_name);

Вставляем код:
/// навигация по товарам  
		// выбираем  все включеные продукты в текущей категории
		$q = db_query("select t1.productID, t1.name, t1.Price, t1.uri, 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"] );
		while( $row=db_fetch_row($q) ) {
		 $product_arr[$row["productID"]] = $row;
		 $productID_array[] = $row["productID"];
		}
	   $smarty->assign("product_arr", $product_arr);
	  /// определяем индекс текущего продукта
		$key = array_search($productID, $productID_array);
		if(count($productID_array) == 2) //если в категории только 2 товара
		{
		 if((int)$key == 0) // если товар первый в выборке
		  $smarty->assign("next_productID", end($productID_array));
		 else // если товар последний в выборке
		  $smarty->assign("prev_productID", reset($productID_array));
		}
		elseif(count($productID_array) > 2)  //если в категории более 2 товаров
		{
		 if((int)$key == 0) // если товар первый в выборке
		 {
		  $smarty->assign("prev_productID", end($productID_array)); // предыдущим товаром становится последний  в выборке
		  $smarty->assign("next_productID", $productID_array[$key+1]);								  
		 }
		 elseif((int)$key == (count($productID_array) - 1)) // если товар последний в выборке
		 {
		  $smarty->assign("prev_productID", $productID_array[$key-1]); // следующим товаром становится первый  в выборке
		  $smarty->assign("next_productID", reset($productID_array));								  
		 }
		 else
		 {
		  $smarty->assign("prev_productID", $productID_array[$key-1]);
		  $smarty->assign("next_productID", $productID_array[$key+1]);								  
		 }
		}
	   ///end


2. Открываем файл core/tpl/user/ваш_шаблон/product_detailed.tpl.html
В нужное место вставляем:

<div>
{if $prev_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev_productID}.html{else}index.php?productID={$prev_productID}{/if}">Вернуться к {$product_arr[$prev_productID].name} - {$product_arr[$prev_productID].Price} руб.</a>
<a href="data/big/{$product_arr[$prev_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$prev_productID].filename}" alt="{$product_arr[$prev_productID].name}"></a>
{/if}
{if $next_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next_productID}.html{else}index.php?productID={$next_productID}{/if}">Далее {$product_arr[$next_productID].name} - {$product_arr[$next_productID].Price} руб.</a>
<a href="data/big/{$product_arr[$next_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$next_productID].filename}" alt="{$product_arr[$next_productID].name}"></a>
{/if}
</div>


Внимание!!! Вывод не оформлен, т.е. выведутся картинки наименования товаров и цена, но как попало. Оформление пожалуйста потрудитесь сделать самостоятельно )))

Если нужно чтобы картинка была ссылкой а не увеличивалась то вставляем вместо
<div>
{if $prev_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev_productID}.html{else}index.php?productID={$prev_productID}{/if}">Вернуться к {$product_arr[$prev_productID].name} - {$product_arr[$prev_productID].Price} руб.</a>
<a href="data/big/{$product_arr[$prev_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$prev_productID].filename}" alt="{$product_arr[$prev_productID].name}"></a>
{/if}
{if $next_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next_productID}.html{else}index.php?productID={$next_productID}{/if}">Далее {$product_arr[$next_productID].name} - {$product_arr[$next_productID].Price} руб.</a>
<a href="data/big/{$product_arr[$next_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$next_productID].filename}" alt="{$product_arr[$next_productID].name}"></a>
{/if}
</div>

вот этот код:
<div>
{if $prev_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev_productID}.html{else}index.php?productID={$prev_productID}{/if}">Вернуться к {$product_arr[$prev_productID].name} - {$product_arr[$prev_productID].Price} руб.</a>
<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/{$product_arr[$prev_productID].filename}" alt="{$product_arr[$prev_productID].name}"></a>
{/if}
{if $next_productID}
	<a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next_productID}.html{else}index.php?productID={$next_productID}{/if}">Далее {$product_arr[$next_productID].name} - {$product_arr[$next_productID].Price} руб.</a>
<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/{$product_arr[$next_productID].filename}" alt="{$product_arr[$next_productID].name}"></a>
{/if}
</div>

  • 1

#7 R.Sergey

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

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

Отправлено 29 April 2012 - 02:05 AM

Вот как это выглядит )))


  • 0

#8 bank911

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

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

Отправлено 03 May 2012 - 06:31 PM

Очень суперовая штука, спасибо.

Я себе правда вписал проверку в первый див, чтобы блок не выводился:

{if $prev_productID}class="more6"{else}style="display:none"{/if} {if $next_productID}class="more6"{else}style="display:none"{/if}

Может кто подскажет, как это сделать грамотно? Чтобы одним запросом проверить существование и $prev_productID и $next_productID?
И еще вопрос, довольно важный для тех, у кого не совпадают имена маленькой и большой копии. Как вылечить этот минус? Можно же вытягивать и маленькую и большую картинки? Подскажите как...
  • 0

#9 R.Sergey

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

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

Отправлено 03 May 2012 - 06:40 PM

Я себе правда вписал проверку в первый див, чтобы блок не выводился:

не понял проверку чего и зачем?

И еще вопрос, довольно важный для тех, у кого не совпадают имена маленькой и большой копии. Как вылечить этот минус? Можно же вытягивать и маленькую и большую картинки? Подскажите как...

Можно но для этого придется делать еще один запрос к БД и вытягивать имена файлов. Что повысит нагрузку на магазин. Лучше один раз и навсегда привести фото к правильному виду, т.е. перезагрузить из чтобы имена были одинаковыми.
  • 0

#10 R.Sergey

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

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

Отправлено 11 May 2012 - 11:17 AM

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

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"] );

  • 0

#11 xtic

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

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 1
Начинающий
  • ГородНижнекамск

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

Почему-то у меня выдает ошибку 500 после редактирования файла core/includes/product_detailed.phр.
Шаблон не дефолтный. В статистике ошибок пишет
WARNING: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument
Line: 366
File: /home/host1249613/instrumentgrad.ru/htdocs/www/index.php
Link: /product_27244.html
Date: 25.10.12 - 20:51:20
Dump:
array(1) {
  ["productID"]=>
  string(5) "27244"
}
array(0) {
}

Подскажите, что может быть не так?
  • 0

#12 badisoft

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

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

Отправлено 25 October 2012 - 07:55 PM

Почему-то у меня выдает ошибку 500 после редактирования файла core/includes/product_detailed.phр. Шаблон не дефолтный

Если Вы не наступили на какие-нибудь стандартные грабли (не удаленный кэш, переименованный старый файл в файл с тем же расширением PHP, etc), то, с большой вероятностью, это проблемы шаблона. Статистика ошибок лично мне ни о чем не говорит, я не вижу там информации, за которую можно бы было зацепиться в поиске проблем. Хотя ссылка в href, конечно, наистраннейшая - 'function.in-array'.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 xtic

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

  • Download User
  • PipPip
  • 24 сообщений
Репутация: 1
Начинающий
  • ГородНижнекамск

Отправлено 25 October 2012 - 09:30 PM

badisoft, стандартные грабли вроде обошел (про кеш - при бекапе файла все работает, про старый файл - редактировал путем скачивания фтп клиентом, а потом он (фтп клиент) предлагал загрузку измененного файла).

Статистика мне тоже ничего не сказала, вот я и решил спросить здесь :)

Хотя ссылка в href, конечно, наистраннейшая - 'function.in-array'.

Почему?
  • 0

#14 Salp

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

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

Отправлено 05 November 2012 - 11:30 AM

Если Вы не наступили на какие-нибудь стандартные грабли

Дело не в граблях, просто у R.Sergey в коде нечаянно вставились пару тегов "[/color][/font]".
PHP их, конечно, не воспринимает - отсюда и белый экран.
  • 2

#15 venceslauzzz

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

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

Отправлено 29 January 2013 - 06:38 PM

лучше проверить наличие фото и при его отсутствии вывести заглушку
<div>
{if $prev_productID}
	    <a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$prev_productID}.html{else}index.php?productID={$prev_productID}{/if}">Вернуться к {$product_arr[$prev_productID].name} - {$product_arr[$prev_productID].Price} руб.</a>
{if $product_arr[$prev_productID].filename}
<a href="data/big/{$product_arr[$prev_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$prev_productID].filename}" alt="{$product_arr[$prev_productID].name}"></a>
{else}
<img src="data/empty.gif" alt="no photo">
{/if}
{/if}
{if $next_productID}
	    <a href="{if $smarty.const.CONF_MOD_REWRITE eq 1}product_{$next_productID}.html{else}index.php?productID={$next_productID}{/if}">Далее {$product_arr[$next_productID].name} - {$product_arr[$next_productID].Price} руб.</a>
{if $product_arr[$next_productID].filename}
<a href="data/big/{$product_arr[$next_productID].filename}" class="highslide" onclick="return hs.expand(this)"><img src="data/small/{$product_arr[$next_productID].filename}" alt="{$product_arr[$next_productID].name}"></a>
{else}
<img src="data/empty.gif" alt="no photo">
{/if}
{/if}
</div>

  • 0
Спасибо алфавиту за любезно предоставленные буквы! Во время написания ни одна буква не пострадала.

#16 dgimmibos

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

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

Отправлено 08 February 2013 - 08:54 AM

Как сделать что бы данная опция отображалась в категории?
  • 0

#17 l17l

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

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

Отправлено 13 March 2013 - 01:15 PM

core/includes/product_detailed.php

как не странно, у меня вот такой строки нет: $smarty->hassign("customer_name", $customer_name);

искал по ( CUSTOMER_NAME} ) нашло...

{$smarty.const.FEEDBACK_CUSTOMER_NAME}
  • 0

#18 lokitoki

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

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

Отправлено 18 June 2013 - 02:00 AM

Поставил пару месяцев назад - увеличение числа проиндексированных страниц а так же тиц +10 пр+3
  • 0

#19 wwwsasa2

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

  • Download User
  • PipPipPip
  • 53 сообщений
Репутация: -1
Начинающий
  • ГородКиев

Отправлено 05 July 2013 - 09:41 AM

Пробовал установить этот модуль не получается кто-то может помочь с установкой?
  • 0

#20 badisoft

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

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

Отправлено 05 July 2013 - 08:27 PM

Пробовал установить этот модуль не получается кто-то может помочь с установкой?

Я смогу на выходных. Странно, что Вы не смогли установить сами. Модуль довольно прост.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)