Цитата |
---|
scarfaceDeb пишет: схожий вопрос: кто-нибудь знает что нужно сделать и где, чтобы свойства товаров были индивидуальны для товара. т.е. есть свойство "Серия" (список или привязка к инфоблоку), и каждый товар в каталоге будет обладать разным набором значений в этом свойстве. на данный момент понял как реализовать только вариант, когда этот список свойств является общим для всех товаров в инфоблоке. |
Ну как вариант текстовое поле множественное с описанием. в описании хранить например знаение а в самом поле название параметра, или наоборот.
или предусмотреть полный набор полей.
Была подобная задача: в одном инфоблоке по каждому разделу свой набор полей. Для этого был создан весь набор полей для всех разделов, дальше в init.php опредлелял, является ли страница административной, далее смотрим если это редактирование элемента нужного инфоблока (по URL), если да, то подключаем через AddHeadScript jQuery и скрипт, которые для определенного раздела скрывает строки на странице с не нужными полями.... Плюс еще надо было скрывать поля для разделов. Да... еще... скрипты хранились в инфоблоке, откуда и выбирались...
В общем было примерно так: init.php
Код |
---|
<?
if(defined("ADMIN_SECTION") && (ADMIN_SECTION === true))
{
// Скрипты подключаемые в административном разделе
$arIncludeScripts = array();
// Карточки каталога недвижимости
if($APPLICATION->GetCurPage() == "/bitrix/admin/iblock_element_edit.php")
{
if(CModule::IncludeModule("iblock"))
{
$CurrentSection = intval($_GET["IBLOCK_SECTION_ID"]);
if($CurrentSection == 0)
{
$CurrentSection = intval($_GET["find_section_section"]);
}
$res = CIBlockElement::GetList(
array(),
array(
"ACTIVE" => "Y",
"IBLOCK_ID" => 9,
"PROPERTY_IBLOCK" => intval($_GET["IBLOCK_ID"]),
"PROPERTY_SECTION" => $CurrentSection,
"!PROPERTY_SECTION" => false,
),
false,
false,
array("ID", "PROPERTY_FILEPATH")
);
while($arRes = $res->GetNext())
{
$arIncludeScripts[] = $arRes["PROPERTY_FILEPATH_VALUE"];
}
if((count($arIncludeScripts) == 0) && (intval($CurrentSection > 0)))
{
$sec = CIBlockSection::GetNavChain(intval($_GET["IBLOCK_ID"]), $CurrentSection);
while((count($arIncludeScripts) == 0) && ($arSec = $sec->GetNext()))
{
$res = CIBlockElement::GetList(
array(),
array(
"ACTIVE" => "Y",
"IBLOCK_ID" => 9,
"PROPERTY_IBLOCK" => intval($_GET["IBLOCK_ID"]),
"PROPERTY_SECTION" => intval($arSec["ID"]),
"!PROPERTY_SECTION" => false,
),
false,
false,
array("ID", "PROPERTY_FILEPATH")
);
while($arRes = $res->GetNext())
{
$arIncludeScripts[] = $arRes["PROPERTY_FILEPATH_VALUE"];
}
}
}
}
}
// Списки разделов и элементов
if($APPLICATION->GetCurPage() == "/bitrix/admin/iblock_list_admin.php")
{
if(CModule::IncludeModule("iblock"))
{
// Каталог недвижимости
if(intval($_GET["IBLOCK_ID"]) == 2)
{
$depth = 0;
$sec = CIBlockSection::GetNavChain(intval($_GET["IBLOCK_ID"]), intval($_GET["find_section_section"]));
while($arSec = $sec->GetNext())
{
$depth++;
}
if($depth > 1)
{
$ParamCode = "SYSTEM_HIDEADDSECTION";
} elseif($depth > 0) {
$ParamCode = "SYSTEM_HIDEADDELEMENT_LEVEL";
} else {
$ParamCode = "SYSTEM_HIDEADDELEMENT";
}
$res = CIBlockElement::GetList(
array(),
array("ACTIVE" => "Y", "IBLOCK_ID" => 9, "CODE" => $ParamCode, "!CODE" => false),
false,
false,
array("ID", "PROPERTY_FILEPATH")
);
if($arRes = $res->GetNext())
{
$arIncludeScripts[] = $arRes["PROPERTY_FILEPATH_VALUE"];
}
}
}
}
// Подключение ядра и скриптов при необходимости
if(count($arIncludeScripts) > 0)
{
if(CModule::IncludeModule("iblock"))
{
$res = CIBlockElement::GetList(
array(),
array("ACTIVE" => "Y", "IBLOCK_ID" => 9, "CODE" => "CORE"),
false,
false,
array("ID", "PROPERTY_FILEPATH")
);
if($arRes = $res->GetNext())
{
array_unshift($arIncludeScripts, $arRes["PROPERTY_FILEPATH_VALUE"]);
foreach($arIncludeScripts as $aScript)
{
$APPLICATION->AddHeadScript($aScript);
}
}
}
}
}
?> |
Хранились параметры скриптов в инфоблоке в след. виде: см. приложеный файл.
Пример скрипта для удаления "ненужных" полей с формы:
Код |
---|
$(document).ready(function(){
/* Вкладка "Стоимость и цена" */
$("#tr_cedit1_csection1").add("#tr_PROPERTY_2").add("#tr_PROPERTY_3").add("#tr_PROPERTY_4").add("#tr_PROPERTY_6").add("#tr_cedit1_csection3").add("#tr_PROPERTY_7").add("#tr_PROPERTY_8").remove();
/* Вкладка "Расположение" */
$("#tr_PROPERTY_9").add("#tr_PROPERTY_10").add("#tr_PROPERTY_11").add("#tr_PROPERTY_16").remove();
/* Вкладка "Об объекте" */
$("#tr_PROPERTY_17").add("#tr_PROPERTY_18").add("#tr_PROPERTY_20").add("#tr_PROPERTY_21").add("#tr_PROPERTY_22").add("#tr_PROPERTY_25").add("#tr_PROPERTY_26").add("#tr_PROPERTY_29").add("#tr_PROPERTY_30").add("#tr_PROPERTY_31").add("#tr_PROPERTY_32").add("#tr_PROPERTY_33").add("#tr_PROPERTY_34").add("#tr_PROPERTY_37").add("#tr_PROPERTY_38").add("#tr_PROPERTY_39").add("#tr_PROPERTY_40").add("#tr_PROPERTY_41").add("#tr_PROPERTY_42").add("#tr_PROPERTY_43").add("#tr_PROPERTY_44").add("#tr_PROPERTY_45").add("#tr_PROPERTY_46").add("#tr_PROPERTY_47").add("#tr_PROPERTY_48").add("#tr_PROPERTY_49").add("#tr_PROPERTY_50").add("#tr_PROPERTY_51").add("#tr_PROPERTY_52").add("#tr_PROPERTY_53").add("#tr_PROPERTY_54").add("#tr_PROPERTY_55").remove();
});
|