Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.

#
Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Переискал на форуме, не нашел полного примера для групп.
Неоднократно встречал пример для смены xsl шаблона для товара МагазинТовар, но не получилось адаптировать под группы.
Взял за основу этот пример для товара:
$shop_items_catalog_item_id = $GLOBALS['shop_item_path']['item'];
// Укажите код созданного свойства
$shop_list_of_properties_id = 123;
$property_row = $shop->GetValueItemProperty($shop_items_catalog_item_id, $shop_list_of_properties_id);

// Значения свойства задано
if ($property_row && !empty($property_row['shop_properties_items_value']))
{
$xsl_catalog = $property_row['information_propertys_items_value'];
}

1.) Создал дополнительное свойство "xsl-template" для групп товаров, идентификатор свойства [5].
2.) Назначил одной из групп значение этого свойства, одноименное с названием измененного шаблона"МагазинТовар [2]".
3.) В ТДС магазина перед строкой:
Цитата:
$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);


вписываю следующий код:
Цитата:
/* меняем xsl шаблон МагазинКаталогТоваров */
$shop_groups_catalog_id = $GLOBALS['shop_item_path']['group'];
// Укажите код созданного свойства
$shop_list_of_properties_id = 5;
$property_row = $shop->GetPropertiesGroupValue($shop_groups_catalog_id, $shop_list_of_properties_id);

// Значения свойства задано
if ($property_row && !empty($property_row['shop_properties_groups_value']))
{
$xsl_catalog = $property_row['information_properties_groups_value'];
}
/* Конец - меняем xsl шаблон МагазинКаталогТоваров*/


Результат - нулевой.

Подскажите пожалуйста, как изменить этот код, чтобы бралось название шаблона из доп.свойства группы товара, и в этой группе отображался указанный в доп.свойстве шаблон.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Как-то сумбурно у вас код оформлен.

А проблема у вас в том, что имя XSL-шаблона для группы у вас, надо полагать, хранится в доп.свойстве _группы_, а вы методом GetValueItemProperty() получаете значение доп.свойства _товара_.
Заказов не беру. Консультирую редко.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Добрый день, Евгений! Спасибо за то, что отозвались
Kotoff писал(а):
Как-то сумбурно у вас код оформлен.
Так получилось, что я был заказчиком сайта, а мои исполнители,  как оказалось, с hostcms впервые познакомились на моём заказе. Предоплата, и итог очевиден. Теперь приходится самостоятельно доделывать функционал, в свободное от сна и работы время, не имея при этом профессиональных навыков. Форум и документация очень помогли. Что подскажут, что скопипастю, а иногда и просто интуиция помогает. Вот, застрял на смене шаблонов.

Я пробовал первоначально тот же код, но с методом GetPropertiesGroupValue, результат также нулевой. Видимо, что-то в api не досмотрел.
Если у вас будет возможность, и настроение, подскажите пожалуйста, какой правильный метод получения доп.свойства группы. И, может быть, есть какой-нибудь более оптимизированный способ для смены XSL шаблона?
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
pit-stop, про код я имел в виду всего лишь оформление кода в вашем исходном сообщении. Часть цитатами а часть просто текстом, хотя для публикации кода есть специальный bb-тег code (5я кнопка слева, на панели инструментов, в диалоге добавления сообщения на форум)

Метод GetPropertiesGroupValue() идейно верный, но вы его как-то не так употребляете -
$property_row = $shop->GetPropertiesGroupValue($shop_groups_catalog_id, $shop_list_of_properties_id);
это не правильно, у этого метода только один параметр в виде массива http://www.hostcms.ru/api/HostCMS_5/shop.html#methodGetPropertiesGroupValue

И да, извините, что не заметил сразу код с этим методом во второй цитате.
Заказов не беру. Консультирую редко.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Огромное спасибо, Kotoff, направили меня в верном направлении. Переписал код, с учётом букваря.
Уже есть эффект, функционально работает, но пока еще с одним недочетом.
Переменной $xsl_catalog, я присвоил идентификатор доп.свойства (в моём случае это [5]), а не значение этого свойства.
Подскажите, а есть ли "облегченное" решение подстановки значения доп.свойства, или же его можно получить только методом GetPropertyValue?

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


/* меняем xsl шаблон МагазинКаталогТоваров */

$params = array();
$params['shop_groups_id'] = $param['current_group_id'];
$params['shop_properties_group_id'] = 5;
$property_row = $shop->GetPropertiesGroupValue($params);

if ($property_row && !empty($property_row

['shop_properties_group_id']))
{
$xsl_catalog = $property_row ['shop_properties_group_id'];
}

/* Конец - меняем xsl шаблон МагазинКаталогТоваров*/
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
pit-stop писал(а):
Переменной $xsl_catalog, я присвоил идентификатор доп.свойства (в моём случае это [5]), а не значение этого свойства.

pit-stop, ну что за ерунду вы творите?

Почитайте описание команды ShowShop() в api - переменная $xsl_catalog имеет тип "строка" и содержит _название_ (не идентификатор!) _xsl-шаблона_.
Зачем вы присваиваете ей идентификатор доп.свойства?

У вас должно быть что-то типа
$xsl_catalog = $property_row['shop_properties_group_value'];

(Честно говоря, не помню точно названия элементов массива $property_row, вставьте
print_r($property_row)
сразу после
$property_row = $shop->GetPropertiesGroupValue($params);
обновите страничку и посмотрите точное название).

А в админке, в само доп.свойство группы должно быть записано название нужного XSL-шаблона, например "МагазинКаталогТоваровДляГруппыА", или "МагазинКаталогТоваровДляГруппыБ" ну и так далее.

pit-stop писал(а):
Подскажите, а есть ли «облегченное» решение подстановки значения доп.свойства, или же его можно получить только методом GetPropertyValue?
Во1х, что такое метод GetPropertyValue()? В api у класса Shop нет такого метода.
Во2х, А куда уж легче-то?
$params = array();
$params['shop_groups_id'] = $param['current_group_id'];
$params['shop_properties_group_id'] = 5;
$property_row = $shop->GetPropertiesGroupValue($params);
Вот эти четыре строки это тяжело? Ну перепишите их в одну
$property_row = $shop->GetPropertiesGroupValue(array('shop_groups_id' => $param['current_group_id'], 'shop_properties_group_id' => 5));
будет то же самое, только гораздо хуже читается
Заказов не беру. Консультирую редко.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Евгений, спасибо преогромнейшее, открыли мне глаза! Выручили капитально, снимаю шляпу Теперь все работает, как изначально и задумывалось.

Я несколько вечеров крутился с этим кодом вокруг да около, перепробовав всякие варианты извращений, даже видел то что пишет print_r($property_row), но не обращалось внимание на второе value в параметре
[shop_properties_group_value_value]
.

Добавим полезности этой ветке форума для других его обитателей, и прилагаю уже готовый результат, нашей с вами работы

Итак, для отображения разных шаблонов каталога товаров для разных групп в интернет магазине, делаем следующее:

1. Создаем группе товара дополнительное свойство. Обращаем внимание на его идентификатор, его значением придется заменить указанное в коде = 5.
2. Создаем необходимые xsl шаблоны, которые будут отображать ваш МагазинКаталогТоваров при попадании в группу с доп.свойством.
3. Назначаем нужным группам значения доп.свойства имена подготовленных xsl шаблонов.
4. В коде типовой динамической страницы (практически в самом низу) вашего интернет-магазина, перед вызовом метода
$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);

вставляем следующий код:

/* меняем xsl шаблон МагазинКаталогТоваров */

$params = array();
$params['shop_groups_id'] = $param['current_group_id'];
//указываем на требуемый идентификатор дополнительного свойства группы товара, в этом примере это 5
$params['shop_properties_group_id'] = 5;
$property_row = $shop->GetPropertiesGroupValue($params);

if ($property_row && !empty($property_row['shop_properties_group_id']))
{
$xsl_catalog = $property_row ['shop_properties_group_value_value'];
}

/* Конец - меняем xsl шаблон МагазинКаталогТоваров*/
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Ну я от себя еще добавлю, что реальная необходимость полной смены XSL-шаблона в зависимости от группы возникает крайне редко, и чаще всего наводит на мысли о каких-либо идеологических или архитектурных ошибках при разработке сайта.

Ну и к тому же, при таком подходе изрядное количество кода в XSL начинает дублироваться от шаблона к шаблону, и это приводит к тому, что вносить правки в XSL-шаблоны становится неудобно. А реализовать удобное применение xsl:import в hostcms у меня так и не получилось.

Поэтому я предпочитаю реализовывать все возможные варианты построения страниц каталога товаров в рамках одного xsl-шаблона, вводя в нем зависимости, например, от значения какого-либо доп.свойства текущей группы.
Заказов не беру. Консультирую редко.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
В моём случае возникла строгая необходимость смены шаблонов по группам, для того, чтобы на базе одного интернет магазина были:
1. Каталог подбора деталей по автомобилю. Название товара - отдельная товаро-единица, тормозные колодки передние, например, а на самой странице товара отображается уже список доступных товаров, реализованный на базе сопутствующих товаров.
2. Непосредственно каталог подбора по брендам, с фильтрами по артикулу, производителю, кросс-номерам, наименованию и описанию.
3. Каталоги подбора деталей по размерам (сальники, сайлентблоки, и т.д.).

Была идея реализации этого функционала на базе нескольких интернет магазинов, что первоначально усугубляло ситуацию. А реализация одним xsl шаблоном была оценена как лишний гемморой. А вот с автоматической сменой шаблонов, теперь развязываются руки, и появляется возможность работать с общей корзиной и сравнением товаров.
#
Re: Смена XSL шаблона МагазинКаталогТоваров через дополнительное свойство группы товаров.
Ну, я рад что у вас все получилось
Заказов не беру. Консультирую редко.
Авторизация