Как разделить прайс лист на страницы

Статус
В этой теме нельзя размещать новые ответы.
Еще баг неприятный.
Оформить заказ >> Количество >> обновить
Warning: Cannot modify header information - headers already sent by (output started at Z:\www\includes\pricelist.php:138) in Z:\www\core_functions\functions.php on line 68

З.Ы.
только с установленной ajax-корзиной
 
Ладно народ уговорили!
надоело мне видеть данную тему с бессмыслеными топиками. просьба модераторов закройте ее!
Я же в свою очередь выкладываю алгаритм разбиения по листам с фиксированым количеством товаров!
Заметьте имено фиксированом товаров а не строк. тоесть если вы ставите показывать 10 позиций то строк будет всеравно больше пример:
Код:
-Категория1
--Категория2
---Категория3
----Товар 1
----Товар 2
----Товар 3
----Товар 4
----Товар 5
----Товар 6
----Товар 7
----Товар 8
----Товар 9
----Товар 10

Итого строк 13 товаров отображено 10

другой вариант

Код:
-Категория1
--Категория2
---Категория3-1
----Товар 1
---Категория3-2
----Товар 2
---Категория3-3
----Товар 3
---Категория3-4
----Товар 4
---Категория3-5
----Товар 5
---Категория3-6
----Товар 6
---Категория3-7
----Товар 7
---Категория3-8
----Товар 8
---Категория3-9
----Товар 9
---Категория3-10
----Товар 10
Итого строк 22 товаров отображено 10

Как видите во втором варианте количество ссылок резко возрастает так что при настройке скрипта вам надо это учитавать.
Я не буду расписывать где что поменял в файле вот текст файла includes/pricelist.php просто заменяйте все на это.
PHP:
<?php
	define("MAX_TOWAR_IN_PRAIS_LIST",20);
	// show whole price list
	$_GET["mmm"]=0;
	function pricessCategories($parent,$level)
	{
		//same as processCategories(), except it creates a pricelist of the shop
		$out = array();
		$cnt = 0;
		$q1 = db_query("select categoryID, name from ".CATEGORIES_TABLE.
			" where parent=$parent order by sort_order, name") or die (db_error());
		while (($row = db_fetch_row($q1))&&($_GET["mmm"]<MAX_TOWAR_IN_PRAIS_LIST+$_GET["page"])){
			//define back color of the cell
			$r = hexdec(substr(CONF_MIDDLE_COLOR, 0, 2)); 
			$g = hexdec(substr(CONF_MIDDLE_COLOR, 2, 2)); 
			$b = hexdec(substr(CONF_MIDDLE_COLOR, 4, 2)); 
			$m = (float)max($r, max($g,$b));
			$r = round((190+20*min($level,3))*$r/$m);
			$g = round((190+20*min($level,3))*$g/$m);
			$b = round((190+20*min($level,3))*$b/$m);
			$c = dechex($r).dechex($g).dechex($b); //final color

			//add category to the output
			$out[$cnt][0] = $row[0];
			$out[$cnt][1] = $row[1];
			$out[$cnt][2] = $level;
			$out[$cnt][3] = $c;
			$out[$cnt][4] = 0; //0 is for category, 1 - product
			$cnt++;

			if ( !isset($_GET["sort"]) )
				$order_clause = "order by sort_order";
			else
			{
				//verify $_GET["sort"]
				switch ($_GET["sort"]){
					default:
						$_GET["sort"] = "name";
					case 'name':
					case 'Price':
					case 'customers_rating':
						break;
				}

				$order_clause = " order by ".$_GET["sort"];
				if ( isset($_GET["direction"]) )
				{
					if ( !strcmp( $_GET["direction"] , "DESC" ) )
						$order_clause .= " DESC ";
					else
						$order_clause .= " ASC ";
				}
			}

			$sql = "
				select productID, name, Price, in_stock from ".PRODUCTS_TABLE.
				" where categoryID=".$row[0]."  and enabled=1 ".
				$order_clause."
			";
			//add products
			$q = db_query( $sql ) or die (db_error());
			while ($row1 = db_fetch_row($q))
			{
				$_GET["mmm"]++;
				if ($_GET["mmm"]>$_GET["page"]&&$_GET["mmm"]<=$_GET["page"]+MAX_TOWAR_IN_PRAIS_LIST){
					if ($row1[2] <= 0)
						$row1[2]= "n/a";
					else
						$row1[2] = show_price($row1[2]);
					//add product to the output
					$out[$cnt][0] = $row1[0];
					$out[$cnt][1] = $row1[1];
					$out[$cnt][2] = $level;
					$out[$cnt][3] = "FFFFFF";
					$out[$cnt][4] = 1; //0 is for category, 1 - product
					$out[$cnt][5] = $row1[2];
					$out[$cnt][6] = $row1[3];
					$cnt++;
				}
			}
			//process all subcategories
			if ($_GET["mmm"]<=($_GET["page"]+MAX_TOWAR_IN_PRAIS_LIST)){
				$sub_out = pricessCategories($row[0], $level+1);
			}
			//add $sub_out to the end of $out
			for ($j=0; $j<count($sub_out); $j++){
				$out[] = $sub_out[$j];
				$cnt++;
			}
 		}
		return $out;
	} //pricessCategories

	function _sortPriceListSetting( &$smarty, $urlToSort )
	{
		$sort_string = STRING_PRICELIST_ITEM_SORT;
		$sort_string = str_replace( "{ASC_NAME}",   
			"<a href='".$urlToSort."&sort=name&direction=ASC'>".STRING_ASC."</a>",	$sort_string );
		$sort_string = str_replace( "{DESC_NAME}",  
			"<a href='".$urlToSort."&sort=name&direction=DESC'>".STRING_DESC."</a>",	$sort_string );
		$sort_string = str_replace( "{ASC_PRICE}",   
			"<a href='".$urlToSort."&sort=Price&direction=ASC'>".STRING_ASC."</a>",	$sort_string );
		$sort_string = str_replace( "{DESC_PRICE}",  
			"<a href='".$urlToSort."&sort=Price&direction=DESC'>".STRING_DESC."</a>",	$sort_string );
		$smarty->assign( "string_product_sort", $sort_string );
	}

	if (isset($_GET["show_price"])) //show pricelist
	{
		_sortPriceListSetting( $smarty, "index.php?show_price=yes" );
		list($max_product)=mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM ".PRODUCTS_TABLE." WHERE `enabled`=1&&categoryID!=1"));
		$max_pages=ceil($max_product/MAX_TOWAR_IN_PRAIS_LIST);
		$_GET["page"]=(isset($_GET["page"])&&(int)$_GET["page"]>=0&&(int)$_GET["page"]<$max_pages)?(int)$_GET["page"]*MAX_TOWAR_IN_PRAIS_LIST:0;
		$pricelist_elements = pricessCategories(1,0);
		$pricelist_elements=array_reverse($pricelist_elements);
		foreach ($pricelist_elements as $key=>$val){
			if ($val[4]==1){
				$maximym=$val[2];
			}else{
				if ($val[2]<=$maximym)$maximym--; else unset($pricelist_elements[$key]);
			}
		}
		$pricelist_elements=array_reverse($pricelist_elements);
		$smarty->assign("pricelist_pages", $max_pages);
		$smarty->assign("pricelist_now_page", (int)$_GET["page"]/MAX_TOWAR_IN_PRAIS_LIST);
		$smarty->assign("pricelist_elements", $pricelist_elements);
		$smarty->assign("main_content_template", "pricelist.tpl.html");
	}

?>
define("MAX_TOWAR_IN_PRAIS_LIST",20); число 20 меняете на свое это и есть строка отвечающая за колличество товаров на странице.

Далее в templates\frontend\tmpl1\pricelist.tpl.html

там где необходимо вывести страницы пишем:

HTML:
<table cellpadding="0" cellspacing="0" border="0"><tr>
{section name=i loop=$pricelist_pages}
<td width="25">{if $smarty.section.i.index ne $pricelist_now_page}<a href="/index.php?show_price=yes&page={$smarty.section.i.index}">{$smarty.section.i.index+1}</a>{else}{$smarty.section.i.index+1}{/if}</td>	
{/section}
</tr></table>
тупые вопросы расцениваю как нежелание разбиратся и их игнорирую!

Я все проделал как и написано...заработало. Но вот что я заметил...после того как все это заработало в магазине пошли ошибки при попытке оставить сообщение в обсуждении и в попытке задать вопрос по товару.

Ошибки следующего характера:

Код:
Warning: Cannot modify header information - headers already sent by (output started at /includes/pricelist.php:130) in /core_functions/functions.php on line 116

и

Код:
Warning: Cannot modify header information - headers already sent by (output started at /includes/pricelist.php:130) in /includes/product_detailed.php on line 50

Когда убрал изменения все заработало. Что бы это могло быть? У кого-то также или только у меня?
 
не знаю вчем проблема но как предложение посмотри что у тебя идет в строке 130 /includes/pricelist.php после ?> там не должно быть ни каких символов (пробелов, знаков табуляции, переход на новую строку) т.е. знак ?> должен быть последним в файле

а ошибка твоя гласит что невозможно отправить заголовок так как перед его отправлением ничего не должно быть передано пользователю
 
не знаю вчем проблема но как предложение посмотри что у тебя идет в строке 130 /includes/pricelist.php после ?> там не должно быть ни каких символов (пробелов, знаков табуляции, переход на новую строку) т.е. знак ?> должен быть последним в файле

а ошибка твоя гласит что невозможно отправить заголовок так как перед его отправлением ничего не должно быть передано пользователю

Мда...ты как в воду глядел. Спасибо что потратил время на это. В одном пробеле оказалась загвоздка после ?>. Так что кто этим модом воспользуется - учтите этот момент!

Удачи.
 
Разбиение на категории

Такая задачка встала - разбить прайс лист на отдельные категории, точнее даже сделать возможность выводить на печать только одну категорию товаров, а не весь прайс лист!
Может кто поможет?

П.С. Shop-script Free
 
Посмотри на форуме, недавно выкладывали мод my_price , там можно делать именно то, что тебе нужно, т.е. выбирать только нужные категории для показа.
Вот ссылка на сообщение, где его выкладывали:
А хотя если для FREE версии, то наверное не подойдет...
 
Да, на free версию не подходит, попробовал переделать - всё равно не получается.
впринципе общая логика такая:

Есть прайс-лист списком, рядом с ячейкой категории ссылка на печать (например), при нажатии на эту ссылку открывается новое окно (условно 500х500) в котором в таблице приведены название категории, наименование товаров из этой категории, артикул товара и цена. Ну а пользователь уже нажав CTRL+P или по спец кнопке (код где-то был) может вывести эту страницу на печать. Вроде бы не сложно, но вот как это реализовать на практике - нехватает знаний по структуре Шоп-Скрипта да и пхп.
 
Народ, помогите!

Когда пытаюсь использовать мод от fominsa, появляется следующая ошибка Unknown column 'sort_order' in 'order clause'

Как исправить? Что за колонка sort_order?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху