ещё один вопрос по поводу каталога!
нет.. имеется ввиду один автор пишет книги сериями... посмотрите.. вот как тут lib.aldebaran.ru/author/belyanin_andrei/, у одного автора есть несколько книг объединенных в серии и есть книги сами по себе
Если каждая серия содержит только книги одного автора, тогда - да, можно в группе автора создавать подгруппы его серий. Где и каким образом Вам необходимо вывести каталог книг?
нужно чтоб все книги одного автора были на одной странице.
<table BORDER="0">
<tr>
<td> серия1 </td>
</tr>
<tr>
<td> книга1.1 книга 1.2 книга 1.3 </td>
</tr>
<tr>
<td>серия 2</td>
</tr>
<tr>
<td>книга2.1 книга2.2 книга2.3 </td>
</tr>
<tr>
<td>........</td>
</tr>
<tr>
<td>серия N</td>
</tr>
<tr>
<td>книгаN.1 книгаN.2 книгаN.3</td>
</tr>
</table>
книгаL(без серии)
вот таким способом.
<table BORDER="0">
<tr>
<td> серия1 </td>
</tr>
<tr>
<td> книга1.1 книга 1.2 книга 1.3 </td>
</tr>
<tr>
<td>серия 2</td>
</tr>
<tr>
<td>книга2.1 книга2.2 книга2.3 </td>
</tr>
<tr>
<td>........</td>
</tr>
<tr>
<td>серия N</td>
</tr>
<tr>
<td>книгаN.1 книгаN.2 книгаN.3</td>
</tr>
</table>
книгаL(без серии)
вот таким способом.
devil133, подобный вывод возможен, но придется вносить достаточное количество изменений. Например, если реализовать каталог на базе интернет-магазина, то необходимо добавить в код тип. дин. страницы "Интернет-магазин"(выделено жирным):
Затем необходимо вносить исправления в XSL-шаблон "МагазинКаталогТоваров":
<?
function SetGroups($mas_groups, $set)
{
$mas_groups = to_array($mas_groups);
foreach ($mas_groups as $key=>$value)
{
foreach ($value as $key1=>$value1)
{
// if (!in_array($key, $set))
// {
$set[] = $value1['shop_groups_id'];
if ($value1['shop_groups_id'] == $key)
{
$set[] = $key;
SetGroups($mas_groups, $set);
}
// }
}
}
return $set;
}
$xsl_catalog = to_str($GLOBALS['LA']['xsl_catalog']);
$xsl_item = to_str($GLOBALS['LA']['xsl_item']);
$current_shop_id = to_int($GLOBALS['LA']['shop_id']);
$param = array();
if($GLOBALS['shop_item_path'] != false)
{
if (class_exists("SiteUsers"))
{
/* Получаем id текущего пользователя сайта */
$SiteUsers = new SiteUsers();
$param['user_id'] = $SiteUsers->GetCurrentSiteUser();
}
$external_propertys = array();
if (isset($_POST['submit_comment']))
{
/* Проверяем CAPCHA*/
$Captcha = new Captcha();
if (isset($_POST['captcha_key']) && isset($_POST['captcha_keystring']))
{
$cpt = $Captcha->ValidCaptcha($_POST['captcha_key'], $_POST['captcha_keystring']);
}
else
{
$cpt = false;
}
if ($cpt)
{
$param['shop_items_catalog_item_id'] = to_int($_REQUEST['shop_items_catalog_item_id']);
$param['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
$param['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
$param['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
$param['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
$param['shop_comment_date_time'] = date("Y-m-d H:i:s");
/* Активность/неактивность комментария */
$shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
if ($shop_row)
{
$param['shop_comment_active'] = to_int($shop_row['shop_comment_active']);
}
else
{
$param['shop_comment_active'] = false;
}
$external_propertys['comment_is_active'] = $param['shop_comment_active'];
$GLOBALS['shops']->InsertComment($param);
}
else
{
/* Неправильно введен код изображенный на картинке */
$external_propertys['error'] = 1;
/* Запиминаем значения */
$external_propertys['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
$external_propertys['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
$external_propertys['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
$external_propertys['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
$external_propertys['shop_comment_date_time'] = date("Y-m-d H:i:s");
}
}
/* Вывод списка */
if(!$GLOBALS['shop_item_path']['item'])
{
$param['current_group_id'] = $GLOBALS['shop_item_path']['group']; # корневая группа
/* Определяем номер элемента, с которого начинается показ в текущей группе */
$page = end($GLOBALS['URL_ARRAY']);
$page = to_str($page);
$shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
if ($shop_row)
{
$items_on_page = $shop_row['shop_items_on_page'];
}
else
{
$items_on_page = 10;
}
/*
Порядок сортировки ('Asc' - по возрастанию, 'Desc' - по убыванию, 'Rand' - произвольный порядок)
$param['items_order']='Asc';
Поле, по которому сортируем (наименование элемента)
$param['items_field_order']='shop_items_catalog_name';
*/
/* Ограничиваем по производителю */
if (to_int($_GET['producer_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_producers_list_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['producer_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['producer_id'] = to_int($_GET['producer_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по продавцу */
if (to_int($_GET['saller_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_sallers_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['saller_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['saller_id'] = to_int($_GET['saller_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по цене ОТ */
if (to_float($_GET['price_from']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_items_catalog_price';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '>'; // Условие
$element['value'] = to_float($_GET['price_from']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['price_from'] = to_float($_GET['price_from']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по цене ДО */
if (to_float($_GET['price_to']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_items_catalog_price';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '<'; // Условие
$element['value'] = to_float($_GET['price_to']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['price_to'] = to_float($_GET['price_to']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Число элементов на странице */
$on_page = to_int($_GET['on_page']);
if ($on_page > 0 && $on_page < 150)
{
$param['items_on_page'] = $on_page;
$external_propertys['on_page'] = $on_page;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
// Определяем номер страницы.
if ($on_page)
{
$items_on_page = $on_page;
}
if (ereg("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 1)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
}
else
{
$items_begin = 0;
}
$param['items_begin'] = $items_begin;
/* Направление сортировки, 0 - по-возрастанию, 1 - по-убыванию */
$order_direction = to_int($_GET['order_direction']);
switch ($order_direction)
{
case 1: /* По-возрастанию */
{
$order_direction = 'ASC';
break;
}
case 2: /* По-убыванию */
{
$order_direction = 'DESC';
break;
}
default: /* По-умолчанию */
{
$order_direction = 'ASC';
break;
}
}
/* Поле сортировки */
$sort_field = to_int($_GET['sort_by_field']);
switch ($sort_field)
{
case 1: /* По имени */
{
$param['items_field_order'] = 'shop_items_catalog_name';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;
/*$element['type']=1;
$element['prefix'] = 'and';
$element['property_id'] = 1;
$element['if'] = '>';
$element['value'] = '0';
$element['sufix']='';
$param['select'][]=$element;
$param['items_field_order'] = ' convert( shop_properties_items_table.shop_properties_items_value , UNSIGNED ) ';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;*/
}
case 2: /* По цене */
{
$param['items_field_order'] = 'shop_items_catalog_price';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;
}
}
/* Обработка дополнительных свойств.
Получаем список свойств, разрешенных для отображения в данной группе и в фильтре */
$shop = new shop();
$resource_properties = $shop->GetPropertiesOfGroupForXml($current_shop_id, $param['current_group_id']);
if ($resource_properties)
{
$element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */
/* Префикс, если нужен. */
$element['prefix'] = ' and ('; // префикс
/* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
$element['name'] = ''; // Имя
/* поля для основного св-ва, если тип = 1, то не указывается */
$element['if'] = ''; // Условие
/* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
$element['value'] = ''; /* Значение поля (или параметра) */
$element['sufix']=' ';
/* Добавляем в общий список условий */
$param['select'][] = $element;
$count_condition = 0;
$property_xml = '';
$count_properties = mysql_num_rows($resource_properties);
for ($i = 0; $i < $count_properties; $i++)
{
$row = mysql_fetch_assoc($resource_properties);
$element['value'] = 0;
foreach ($_GET as $key => $value)
{
if (preg_match("/property_id_{$row['shop_list_of_properties_id']}_item_id_(\d*)/", $key, $matches))
{
$get_param = 'property_id_'.$row['shop_list_of_properties_id'].'_item_id_'.$matches[1];
if (isset($_GET[$get_param]) > 0 && to_int($matches[1]) > 0)
{
$element['value'] = to_int($matches[1]);
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value']] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value'].'='.$element['value'];
}
}
}
/* Выбираем режим отображения */
$get_param = 'property_id_'.$row['shop_list_of_properties_id'];
if (isset($_GET[$get_param]))
{
if ($row['shop_list_of_properties_type'] == 0 || $row['shop_list_of_properties_show_kind'] == 1)
{
if (to_str($_GET[$get_param]) ==! "")
{
$element['value'] = quote_smart(to_str($_GET[$get_param]));
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
else
{
if (to_int($_GET[$get_param]) > 0)
{
$element['value'] = to_int($_GET[$get_param]);
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
}
if ($element['value'])
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$element['property_id'] = to_int($row['shop_list_of_properties_id']);
$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
//$element['prefix'] = 'AND'; /* префикс */
$element['if'] = '='; /* Условие */
$element['sufix'] = '';
if ($count_condition)
{
$element['prefix'] = ' or '; /* префикс */
}
else
{
$element['prefix'] = ' '; /* префикс */
}
++$count_condition;
$param['select'][] = $element;
}
}
if (!$count_condition)
{
$element['prefix'] = ' 1'; /* префикс */
}
else
{
$element['prefix'] = ''; // префикс
}
/* добавляем конечный элемент, содержащий HAVING */
$element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */
/* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
$element['name'] = ''; /* Имя */
/* поля для основного св-ва, если тип = 1, то не указывается */
$element['if'] = ''; /* Условие */
/* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
$element['value'] = ''; // Значение поля (или параметра)
$having_count = '';
if ($count_condition != 0)
{
$having_count = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= '.$count_condition.' ';
}
$element['sufix'] = ' ) '.$having_count;
/* Добавляем в общий список условий */
$param['select'][] = $element;
}
if (!empty($property_xml))
{
$external_propertys['property_xml'] = $property_xml;
}
$mas_group = array();
$mas_group = $GLOBALS['shops']->GetGroupsTree($GLOBALS['shop_item_path']['group'], $current_shop_id, $mas_group);
$set = array();
$set = SetGroups($mas_group, $set);
$elements = array();
$in = $GLOBALS['shop_item_path']['group'];
foreach ($set as $key => $value)
{
$in .= ','.$value;
}
$elements['type']=0;
$elements['prefix'] = ' and (';
$elements['name'] = 'shop_items_catalog_table.shop_groups_id';
$elements['if'] = ' IN ('.$in.') ';
$elements['value'] = '';
$elements['sufix']=')';
$param['select'][]=$elements;
$param['current_group_id']=false;
$external_propertys['ТекущаяГруппа'] = $GLOBALS['shop_item_path']['group'];
$GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
}
else
{
/* Вывод конкретного элемент */
$GLOBALS['shops']->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
}
}
?>
function SetGroups($mas_groups, $set)
{
$mas_groups = to_array($mas_groups);
foreach ($mas_groups as $key=>$value)
{
foreach ($value as $key1=>$value1)
{
// if (!in_array($key, $set))
// {
$set[] = $value1['shop_groups_id'];
if ($value1['shop_groups_id'] == $key)
{
$set[] = $key;
SetGroups($mas_groups, $set);
}
// }
}
}
return $set;
}
$xsl_catalog = to_str($GLOBALS['LA']['xsl_catalog']);
$xsl_item = to_str($GLOBALS['LA']['xsl_item']);
$current_shop_id = to_int($GLOBALS['LA']['shop_id']);
$param = array();
if($GLOBALS['shop_item_path'] != false)
{
if (class_exists("SiteUsers"))
{
/* Получаем id текущего пользователя сайта */
$SiteUsers = new SiteUsers();
$param['user_id'] = $SiteUsers->GetCurrentSiteUser();
}
$external_propertys = array();
if (isset($_POST['submit_comment']))
{
/* Проверяем CAPCHA*/
$Captcha = new Captcha();
if (isset($_POST['captcha_key']) && isset($_POST['captcha_keystring']))
{
$cpt = $Captcha->ValidCaptcha($_POST['captcha_key'], $_POST['captcha_keystring']);
}
else
{
$cpt = false;
}
if ($cpt)
{
$param['shop_items_catalog_item_id'] = to_int($_REQUEST['shop_items_catalog_item_id']);
$param['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
$param['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
$param['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
$param['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
$param['shop_comment_date_time'] = date("Y-m-d H:i:s");
/* Активность/неактивность комментария */
$shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
if ($shop_row)
{
$param['shop_comment_active'] = to_int($shop_row['shop_comment_active']);
}
else
{
$param['shop_comment_active'] = false;
}
$external_propertys['comment_is_active'] = $param['shop_comment_active'];
$GLOBALS['shops']->InsertComment($param);
}
else
{
/* Неправильно введен код изображенный на картинке */
$external_propertys['error'] = 1;
/* Запиминаем значения */
$external_propertys['shop_comment_user_name'] = to_str($_REQUEST['shop_comment_user_name']);
$external_propertys['shop_comment_subject'] = to_str($_REQUEST['shop_comment_subject']);
$external_propertys['shop_comment_text'] = to_str($_REQUEST['shop_comment_text']);
$external_propertys['shop_comment_grade'] = to_int($_REQUEST['shop_comment_grade']);
$external_propertys['shop_comment_date_time'] = date("Y-m-d H:i:s");
}
}
/* Вывод списка */
if(!$GLOBALS['shop_item_path']['item'])
{
$param['current_group_id'] = $GLOBALS['shop_item_path']['group']; # корневая группа
/* Определяем номер элемента, с которого начинается показ в текущей группе */
$page = end($GLOBALS['URL_ARRAY']);
$page = to_str($page);
$shop_row = $GLOBALS['shops']->GetShop($current_shop_id);
if ($shop_row)
{
$items_on_page = $shop_row['shop_items_on_page'];
}
else
{
$items_on_page = 10;
}
/*
Порядок сортировки ('Asc' - по возрастанию, 'Desc' - по убыванию, 'Rand' - произвольный порядок)
$param['items_order']='Asc';
Поле, по которому сортируем (наименование элемента)
$param['items_field_order']='shop_items_catalog_name';
*/
/* Ограничиваем по производителю */
if (to_int($_GET['producer_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_producers_list_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['producer_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['producer_id'] = to_int($_GET['producer_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по продавцу */
if (to_int($_GET['saller_id']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_sallers_id';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '='; // Условие
$element['value'] = to_int($_GET['saller_id']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['saller_id'] = to_int($_GET['saller_id']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по цене ОТ */
if (to_float($_GET['price_from']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_items_catalog_price';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '>'; // Условие
$element['value'] = to_float($_GET['price_from']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['price_from'] = to_float($_GET['price_from']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Ограничиваем по цене ДО */
if (to_float($_GET['price_to']) > 0)
{
$element['type'] = 0; // 0 - основное св-во, 1 - дополнительное
$element['name'] = 'shop_items_catalog_price';
$element['prefix'] = 'AND'; // префикс
$element['if'] = '<'; // Условие
$element['value'] = to_float($_GET['price_to']);
$element['sufix'] = '';
$param['select'][] = $element;
$external_propertys['price_to'] = to_float($_GET['price_to']);
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
/* Число элементов на странице */
$on_page = to_int($_GET['on_page']);
if ($on_page > 0 && $on_page < 150)
{
$param['items_on_page'] = $on_page;
$external_propertys['on_page'] = $on_page;
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
}
// Определяем номер страницы.
if ($on_page)
{
$items_on_page = $on_page;
}
if (ereg("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 1)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
}
else
{
$items_begin = 0;
}
$param['items_begin'] = $items_begin;
/* Направление сортировки, 0 - по-возрастанию, 1 - по-убыванию */
$order_direction = to_int($_GET['order_direction']);
switch ($order_direction)
{
case 1: /* По-возрастанию */
{
$order_direction = 'ASC';
break;
}
case 2: /* По-убыванию */
{
$order_direction = 'DESC';
break;
}
default: /* По-умолчанию */
{
$order_direction = 'ASC';
break;
}
}
/* Поле сортировки */
$sort_field = to_int($_GET['sort_by_field']);
switch ($sort_field)
{
case 1: /* По имени */
{
$param['items_field_order'] = 'shop_items_catalog_name';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;
/*$element['type']=1;
$element['prefix'] = 'and';
$element['property_id'] = 1;
$element['if'] = '>';
$element['value'] = '0';
$element['sufix']='';
$param['select'][]=$element;
$param['items_field_order'] = ' convert( shop_properties_items_table.shop_properties_items_value , UNSIGNED ) ';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;*/
}
case 2: /* По цене */
{
$param['items_field_order'] = 'shop_items_catalog_price';
$param['items_order'] = $order_direction;
$external_propertys['sort_by_field'] = $sort_field;
$external_propertys['order_direction'] = $order_direction;
break;
}
}
/* Обработка дополнительных свойств.
Получаем список свойств, разрешенных для отображения в данной группе и в фильтре */
$shop = new shop();
$resource_properties = $shop->GetPropertiesOfGroupForXml($current_shop_id, $param['current_group_id']);
if ($resource_properties)
{
$element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */
/* Префикс, если нужен. */
$element['prefix'] = ' and ('; // префикс
/* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
$element['name'] = ''; // Имя
/* поля для основного св-ва, если тип = 1, то не указывается */
$element['if'] = ''; // Условие
/* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
$element['value'] = ''; /* Значение поля (или параметра) */
$element['sufix']=' ';
/* Добавляем в общий список условий */
$param['select'][] = $element;
$count_condition = 0;
$property_xml = '';
$count_properties = mysql_num_rows($resource_properties);
for ($i = 0; $i < $count_properties; $i++)
{
$row = mysql_fetch_assoc($resource_properties);
$element['value'] = 0;
foreach ($_GET as $key => $value)
{
if (preg_match("/property_id_{$row['shop_list_of_properties_id']}_item_id_(\d*)/", $key, $matches))
{
$get_param = 'property_id_'.$row['shop_list_of_properties_id'].'_item_id_'.$matches[1];
if (isset($_GET[$get_param]) > 0 && to_int($matches[1]) > 0)
{
$element['value'] = to_int($matches[1]);
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value']] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'_item_id_'.$element['value'].'='.$element['value'];
}
}
}
/* Выбираем режим отображения */
$get_param = 'property_id_'.$row['shop_list_of_properties_id'];
if (isset($_GET[$get_param]))
{
if ($row['shop_list_of_properties_type'] == 0 || $row['shop_list_of_properties_show_kind'] == 1)
{
if (to_str($_GET[$get_param]) ==! "")
{
$element['value'] = quote_smart(to_str($_GET[$get_param]));
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
else
{
if (to_int($_GET[$get_param]) > 0)
{
$element['value'] = to_int($_GET[$get_param]);
$external_propertys['property_id_'.to_int($row['shop_list_of_properties_id'])] = $element['value'];
$property_xml .= '&property_id_'.to_int($row['shop_list_of_properties_id']).'='.$element['value'];
}
}
}
if ($element['value'])
{
/* Применять фильтр */
$external_propertys['apply_filter'] = true;
$element['property_id'] = to_int($row['shop_list_of_properties_id']);
$element['type'] = 1; /* 0 - основное св-во, 1 - дополнительное */
//$element['prefix'] = 'AND'; /* префикс */
$element['if'] = '='; /* Условие */
$element['sufix'] = '';
if ($count_condition)
{
$element['prefix'] = ' or '; /* префикс */
}
else
{
$element['prefix'] = ' '; /* префикс */
}
++$count_condition;
$param['select'][] = $element;
}
}
if (!$count_condition)
{
$element['prefix'] = ' 1'; /* префикс */
}
else
{
$element['prefix'] = ''; // префикс
}
/* добавляем конечный элемент, содержащий HAVING */
$element['type'] = 0; /* 0 - основное св-во, 1 - дополнительное */
/* ОСТАВЛЯЕТЕ БЕЗ ИЗМЕНЕНИЙ, ЭТО НУЖНО ДЛЯ СОРТИРОВКИ */
$element['name'] = ''; /* Имя */
/* поля для основного св-ва, если тип = 1, то не указывается */
$element['if'] = ''; /* Условие */
/* Вот здесь передается ID доп. св-ва, по которому производится сортировка.
ID ВАШЕГО ПОЛЯ УКАЗЫВАЕТЕ ЗДЕСЬ */
$element['value'] = ''; // Значение поля (или параметра)
$having_count = '';
if ($count_condition != 0)
{
$having_count = 'GROUP BY shop_items_catalog_table.shop_items_catalog_item_id HAVING COUNT(shop_properties_items_table.shop_properties_items_id)= '.$count_condition.' ';
}
$element['sufix'] = ' ) '.$having_count;
/* Добавляем в общий список условий */
$param['select'][] = $element;
}
if (!empty($property_xml))
{
$external_propertys['property_xml'] = $property_xml;
}
$mas_group = array();
$mas_group = $GLOBALS['shops']->GetGroupsTree($GLOBALS['shop_item_path']['group'], $current_shop_id, $mas_group);
$set = array();
$set = SetGroups($mas_group, $set);
$elements = array();
$in = $GLOBALS['shop_item_path']['group'];
foreach ($set as $key => $value)
{
$in .= ','.$value;
}
$elements['type']=0;
$elements['prefix'] = ' and (';
$elements['name'] = 'shop_items_catalog_table.shop_groups_id';
$elements['if'] = ' IN ('.$in.') ';
$elements['value'] = '';
$elements['sufix']=')';
$param['select'][]=$elements;
$param['current_group_id']=false;
$external_propertys['ТекущаяГруппа'] = $GLOBALS['shop_item_path']['group'];
$GLOBALS['shops']->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);
}
else
{
/* Вывод конкретного элемент */
$GLOBALS['shops']->ShowItem($GLOBALS['shop_item_path']['item'], $xsl_item, $param, $external_propertys);
}
}
?>
Затем необходимо вносить исправления в XSL-шаблон "МагазинКаталогТоваров":
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
<xsl:template match="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id"><xsl:choose>
<xsl:when test="ТекущаяГруппа/node()"><xsl:value-of select="ТекущаяГруппа"/></xsl:when>
<xsl:otherwise><xsl:value-of select="@current_group_id"/></xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Если в находимся корне - выводим название информационной системы -->
<xsl:if test="$parent_group_id=0">
<h1><xsl:value-of disable-output-escaping="yes" select="name"/></h1>
</xsl:if>
<!-- Если в находимся в группе - выводим название группы -->
<xsl:if test="$parent_group_id!=0">
<h1><xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/></h1>
</xsl:if>
<!-- Путь к группе -->
<p><xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/></p>
<xsl:variable name="count">1</xsl:variable>
<!-- Выводим группы магазина -->
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<xsl:apply-templates select="//group[@parent=$parent_group_id]"/>
</table>
...
<xsl:apply-templates select="item[@group=$parent_group_id]"/>
...
<!-- Строка ссылок на другие страницы каталога -->
<p>
<xsl:if test="count_items > 0 and items_on_page > 0">
<xsl:call-template name="for">
<xsl:with-param name="n" select="count_items div items_on_page"/>
<xsl:with-param name="current_page" select="current_page"/>
</xsl:call-template>
<div style="clear: both"></div>
</xsl:if>
</p>
</xsl:template>
...
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<xsl:param name="group_id" select="@id"/>
<tr>
<td>
<b><a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></b>
</td>
</tr>
<tr>
<td><xsl:apply-templates select="//item[@group=$group_id]" mode="book_in_seria"/></td>
</tr>
</xsl:template>
<xsl:template match="item" mode="book_in_seria">
<a href="{/shop/path}{fullpath}{path}/"><xsl:value-of disable-output-escaping="yes" select="name"/></a> 
</xsl:template>
...
</xsl:stylesheet>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml" />
<xsl:template match="/">
<xsl:apply-templates select="shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id"><xsl:choose>
<xsl:when test="ТекущаяГруппа/node()"><xsl:value-of select="ТекущаяГруппа"/></xsl:when>
<xsl:otherwise><xsl:value-of select="@current_group_id"/></xsl:otherwise>
</xsl:choose></xsl:variable>
<!-- Если в находимся корне - выводим название информационной системы -->
<xsl:if test="$parent_group_id=0">
<h1><xsl:value-of disable-output-escaping="yes" select="name"/></h1>
</xsl:if>
<!-- Если в находимся в группе - выводим название группы -->
<xsl:if test="$parent_group_id!=0">
<h1><xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/></h1>
</xsl:if>
<!-- Путь к группе -->
<p><xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/></p>
<xsl:variable name="count">1</xsl:variable>
<!-- Выводим группы магазина -->
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<xsl:apply-templates select="//group[@parent=$parent_group_id]"/>
</table>
...
<xsl:apply-templates select="item[@group=$parent_group_id]"/>
...
<!-- Строка ссылок на другие страницы каталога -->
<p>
<xsl:if test="count_items > 0 and items_on_page > 0">
<xsl:call-template name="for">
<xsl:with-param name="n" select="count_items div items_on_page"/>
<xsl:with-param name="current_page" select="current_page"/>
</xsl:call-template>
<div style="clear: both"></div>
</xsl:if>
</p>
</xsl:template>
...
<!-- Шаблон для групп товара -->
<xsl:template match="group">
<xsl:param name="group_id" select="@id"/>
<tr>
<td>
<b><a href="{/shop/path}{fullpath}"><xsl:value-of disable-output-escaping="yes" select="name"/></a></b>
</td>
</tr>
<tr>
<td><xsl:apply-templates select="//item[@group=$group_id]" mode="book_in_seria"/></td>
</tr>
</xsl:template>
<xsl:template match="item" mode="book_in_seria">
<a href="{/shop/path}{fullpath}{path}/"><xsl:value-of disable-output-escaping="yes" select="name"/></a> 
</xsl:template>
...
</xsl:stylesheet>
а если на базе обычного каталога, а не инет магазина... изменения такие же?
Если реализовать каталог на базе инфосистемы, то последовательность и характер изменений будет теми же. Другими будут изменяемые файлы(сначала вносить доработки в тип. дин. страницу "Информационные системы", затем править XSL-шаблон "СписокЭлементовИнфосистемы" ).
gag, каталог организован на базе инфосистемы или интернет-магазина? На какой конкретно странице Вам требуется вывод описания? При выводе всех групп или внутри группы?
Авторизация