/** * Генерация кода обновления инфоблока * * @param $params array * @return mixed */ public function generateUpdateCode($params) { $this->checkParams($params); $code = false; foreach ($this->ownerItemDbData as $iblockData) { $updateFields = $iblockData; Helper::unsetFields(array('ID'), $updateFields); $updateFields['FIELDS'] = \CIBlock::GetFields($iblockData['ID']); $this->setUserGroupId($iblockData['ID'], $iblockData); $code = $code . $this->getMethodContent('Bim\\Db\\Iblock\\IblockIntegrate', 'Update', array($updateFields['CODE'], $updateFields)) . PHP_EOL . PHP_EOL; } return $code; }
public function getFields() { if (!isset($this->fields)) { $this->fields = array(); $res = \CIBlock::GetFields($this->id); foreach ($res as $k => $element) { $this->fields[$k] = new Field($k, $element); } foreach (self::$standardFields as $field) { if (!array_key_exists($field, $this->fields)) { $this->fields[$field] = array('CODE' => $field); } } } return $this->fields; }
public function mergeIblockFields($iblockId, $fields) { $default = \CIBlock::GetFields($iblockId); $fields = $this->arraySoftMerge($default, $fields); \CIBlock::SetFields($iblockId, $fields); }
" target="_blank"><?php echo GetMessage("IB_E_GOTO_BP"); ?> </a> <?php } ?> </td> </tr> <?php } $tabControl->BeginNextTab(); if ($bVarsFromForm) { $arFields = $_REQUEST["FIELDS"]; } else { $arFields = CIBlock::GetFields($ID); } $arDefFields = CIBlock::GetFieldsDefaults(); foreach ($arDefFields as $FIELD_ID => $arField) { if ($arField["VISIBLE"] == "N") { continue; } if (!preg_match("/^LOG_/", $FIELD_ID)) { continue; } ?> <tr> <td width="40%"><label for="FIELDS[<?php echo $FIELD_ID; ?> ][IS_REQUIRED]"><?php
function ImportMetaData($xml_root_id, $IBLOCK_TYPE, $IBLOCK_LID, $bUpdateIBlock = true) { global $APPLICATION; $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("ID" => $xml_root_id), array("ID", "NAME", "ATTRIBUTES")); $ar = $rs->Fetch(); if ($ar) { foreach (array(LANGUAGE_ID, "en", "ru") as $lang) { $mess = IncludeModuleLangFile(__FILE__, $lang, true); if ($ar["NAME"] === $mess["IBLOCK_XML2_COMMERCE_INFO"]) { $this->mess = $mess; $this->next_step["lang"] = $lang; } } $xml_root_id = $ar["ID"]; } if ($ar && strlen($ar["ATTRIBUTES"]) > 0) { $info = unserialize($ar["ATTRIBUTES"]); if (is_array($info) && array_key_exists($this->mess["IBLOCK_XML2_SUM_FORMAT"], $info)) { if (preg_match("#" . $this->mess["IBLOCK_XML2_SUM_FORMAT_DELIM"] . "=(.);{0,1}#", $info[$this->mess["IBLOCK_XML2_SUM_FORMAT"]], $match)) { $this->next_step["sdp"] = $match[1]; } } } $meta_data_xml_id = false; $XML_ELEMENTS_PARENT = false; $XML_SECTIONS_PARENT = false; $XML_PROPERTIES_PARENT = false; $XML_SECTIONS_PROPERTIES_PARENT = false; $XML_PRICES_PARENT = false; $XML_STORES_PARENT = false; $XML_BASE_UNITS_PARENT = false; $XML_SECTION_PROPERTIES = false; $arIBlock = array(); $this->next_step["bOffer"] = false; $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_CATALOG"]), array("ID", "ATTRIBUTES")); $ar = $rs->Fetch(); if (!$ar) { $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_OFFER_LIST"]), array("ID", "ATTRIBUTES")); $ar = $rs->Fetch(); $this->next_step["bOffer"] = true; } if (!$ar) { $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_OFFERS_CHANGE"]), array("ID", "ATTRIBUTES")); $ar = $rs->Fetch(); $this->next_step["bOffer"] = true; $this->next_step["bUpdateOnly"] = true; $bUpdateIBlock = false; } if ($this->next_step["bOffer"] && !$this->bCatalog) { return GetMessage('IBLOCK_XML2_MODULE_CATALOG_IS_ABSENT'); } if ($ar) { if (strlen($ar["ATTRIBUTES"]) > 0) { $attrs = unserialize($ar["ATTRIBUTES"]); if (is_array($attrs)) { if (array_key_exists($this->mess["IBLOCK_XML2_UPDATE_ONLY"], $attrs)) { $this->next_step["bUpdateOnly"] = $attrs[$this->mess["IBLOCK_XML2_UPDATE_ONLY"]] == "true" || intval($attrs[$this->mess["IBLOCK_XML2_UPDATE_ONLY"]]) ? true : false; } } } $rs = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $ar["ID"])); while ($ar = $rs->Fetch()) { if (isset($ar["VALUE_CLOB"])) { $ar["VALUE"] = $ar["VALUE_CLOB"]; } if ($ar["NAME"] == $this->mess["IBLOCK_XML2_ID"]) { $arIBlock["XML_ID"] = ($this->use_iblock_type_id ? $IBLOCK_TYPE . "-" : "") . $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_CATALOG_ID"]) { $arIBlock["CATALOG_XML_ID"] = ($this->use_iblock_type_id ? $IBLOCK_TYPE . "-" : "") . $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_NAME"]) { $arIBlock["NAME"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_DESCRIPTION"]) { $arIBlock["DESCRIPTION"] = $ar["VALUE"]; $arIBlock["DESCRIPTION_TYPE"] = "html"; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_POSITIONS"] || $ar["NAME"] == $this->mess["IBLOCK_XML2_OFFERS"]) { $XML_ELEMENTS_PARENT = $ar["ID"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_PRICE_TYPES"]) { $XML_PRICES_PARENT = $ar["ID"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_STORES"]) { $XML_STORES_PARENT = $ar["ID"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BASE_UNITS"]) { $XML_BASE_UNITS_PARENT = $ar["ID"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_METADATA_ID"]) { $meta_data_xml_id = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_UPDATE_ONLY"]) { $this->next_step["bUpdateOnly"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? true : false; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_CODE"]) { $arIBlock["CODE"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SORT"]) { $arIBlock["SORT"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_LIST_URL"]) { $arIBlock["LIST_PAGE_URL"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_DETAIL_URL"]) { $arIBlock["DETAIL_PAGE_URL"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTION_URL"]) { $arIBlock["SECTION_PAGE_URL"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_CANONICAL_URL"]) { $arIBlock["CANONICAL_PAGE_URL"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_INDEX_ELEMENTS"]) { $arIBlock["INDEX_ELEMENT"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N"; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_INDEX_SECTIONS"]) { $arIBlock["INDEX_SECTION"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N"; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTIONS_NAME"]) { $arIBlock["SECTIONS_NAME"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_SECTION_NAME"]) { $arIBlock["SECTION_NAME"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_ELEMENTS_NAME"]) { $arIBlock["ELEMENTS_NAME"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_ELEMENT_NAME"]) { $arIBlock["ELEMENT_NAME"] = $ar["VALUE"]; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_PICTURE"]) { if (strlen($ar["VALUE"]) > 0) { $arIBlock["PICTURE"] = $this->MakeFileArray($ar["VALUE"]); } else { $arIBlock["PICTURE"] = $this->MakeFileArray($this->_xml_file->GetAllChildrenArray($ar["ID"])); } } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_BX_WORKFLOW"]) { $arIBlock["WORKFLOW"] = $ar["VALUE"] == "true" || intval($ar["VALUE"]) ? "Y" : "N"; } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_INHERITED_TEMPLATES"]) { $arIBlock["IPROPERTY_TEMPLATES"] = array(); $arTemplates = $this->_xml_file->GetAllChildrenArray($ar["ID"]); foreach ($arTemplates as $TEMPLATE) { $id = $TEMPLATE[$this->mess["IBLOCK_XML2_ID"]]; $template = $TEMPLATE[$this->mess["IBLOCK_XML2_VALUE"]]; if (strlen($id) > 0 && strlen($template) > 0) { $arIBlock["IPROPERTY_TEMPLATES"][$id] = $template; } } } elseif ($ar["NAME"] == $this->mess["IBLOCK_XML2_LABELS"]) { $arLabels = $this->_xml_file->GetAllChildrenArray($ar["ID"]); foreach ($arLabels as $arLabel) { $id = $arLabel[$this->mess["IBLOCK_XML2_ID"]]; $label = $arLabel[$this->mess["IBLOCK_XML2_VALUE"]]; if (strlen($id) > 0 && strlen($label) > 0) { $arIBlock[$id] = $label; } } } } if ($this->next_step["bOffer"] && !$this->use_offers) { if (strlen($arIBlock["CATALOG_XML_ID"]) > 0) { $arIBlock["XML_ID"] = $arIBlock["CATALOG_XML_ID"]; $this->next_step["bUpdateOnly"] = true; } } $obIBlock = new CIBlock(); $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => $arIBlock["XML_ID"])); $ar = $rsIBlocks->Fetch(); //Also check for non bitrix xml file if (!$ar && !array_key_exists("CODE", $arIBlock)) { if ($this->next_step["bOffer"] && $this->use_offers) { $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => "FUTURE-1C-OFFERS")); } else { $rsIBlocks = $obIBlock->GetList(array(), array("XML_ID" => "FUTURE-1C-CATALOG")); } $ar = $rsIBlocks->Fetch(); } if ($ar) { if ($bUpdateIBlock && (!$this->next_step["bOffer"] || $this->use_offers)) { if ($obIBlock->Update($ar["ID"], $arIBlock)) { $arIBlock["ID"] = $ar["ID"]; } else { return $obIBlock->LAST_ERROR; } } else { $arIBlock["ID"] = $ar["ID"]; } } else { $arIBlock["IBLOCK_TYPE_ID"] = $this->CheckIBlockType($IBLOCK_TYPE); if (!$arIBlock["IBLOCK_TYPE_ID"]) { return GetMessage("IBLOCK_XML2_TYPE_ADD_ERROR"); } $arIBlock["GROUP_ID"] = array(2 => "R"); $arIBlock["LID"] = $this->CheckSites($IBLOCK_LID); $arIBlock["ACTIVE"] = "Y"; $arIBlock["WORKFLOW"] = "N"; if ($this->translit_on_add && !array_key_exists("CODE", $arIBlock)) { $arIBlock["FIELDS"] = array("CODE" => array("DEFAULT_VALUE" => array("TRANSLITERATION" => "Y", "TRANS_LEN" => $this->translit_on_add["max_len"], "TRANS_CASE" => $this->translit_on_add["change_case"], "TRANS_SPACE" => $this->translit_on_add["replace_space"], "TRANS_OTHER" => $this->translit_on_add["replace_other"], "TRANS_EAT" => $this->translit_on_add["delete_repeat_replace"] ? "Y" : "N")), "SECTION_CODE" => array("DEFAULT_VALUE" => array("TRANSLITERATION" => "Y", "TRANS_LEN" => $this->translit_on_add["max_len"], "TRANS_CASE" => $this->translit_on_add["change_case"], "TRANS_SPACE" => $this->translit_on_add["replace_space"], "TRANS_OTHER" => $this->translit_on_add["replace_other"], "TRANS_EAT" => $this->translit_on_add["delete_repeat_replace"] ? "Y" : "N"))); } $arIBlock["ID"] = $obIBlock->Add($arIBlock); if (!$arIBlock["ID"]) { return $obIBlock->LAST_ERROR; } } //Make this catalog if ($this->bCatalog && $this->next_step["bOffer"]) { $obCatalog = new CCatalog(); $intParentID = $this->GetIBlockByXML_ID($arIBlock["CATALOG_XML_ID"]); if (0 < intval($intParentID) && $this->use_offers) { $mxSKUProp = $obCatalog->LinkSKUIBlock($intParentID, $arIBlock["ID"]); if (!$mxSKUProp) { if ($ex = $APPLICATION->GetException()) { $result = $ex->GetString(); return $result; } } else { $rs = CCatalog::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"])); if ($arOffer = $rs->Fetch()) { $boolFlag = $obCatalog->Update($arIBlock["ID"], array('PRODUCT_IBLOCK_ID' => $intParentID, 'SKU_PROPERTY_ID' => $mxSKUProp)); } else { $boolFlag = $obCatalog->Add(array("IBLOCK_ID" => $arIBlock["ID"], "YANDEX_EXPORT" => "N", "SUBSCRIPTION" => "N", 'PRODUCT_IBLOCK_ID' => $intParentID, 'SKU_PROPERTY_ID' => $mxSKUProp)); } if (!$boolFlag) { if ($ex = $APPLICATION->GetException()) { $result = $ex->GetString(); return $result; } } } } else { $rs = CCatalog::GetList(array(), array("IBLOCK_ID" => $arIBlock["ID"])); if (!$rs->Fetch()) { $boolFlag = $obCatalog->Add(array("IBLOCK_ID" => $arIBlock["ID"], "YANDEX_EXPORT" => "N", "SUBSCRIPTION" => "N")); if (!$boolFlag) { if ($ex = $APPLICATION->GetException()) { $result = $ex->GetString(); return $result; } } } } } //For non bitrix xml file //Check for mandatory properties and add them as necessary if (!array_key_exists("CODE", $arIBlock)) { $arProperties = array("CML2_BAR_CODE" => GetMessage("IBLOCK_XML2_BAR_CODE"), "CML2_ARTICLE" => GetMessage("IBLOCK_XML2_ARTICLE"), "CML2_ATTRIBUTES" => array("NAME" => GetMessage("IBLOCK_XML2_ATTRIBUTES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_TRAITS" => array("NAME" => GetMessage("IBLOCK_XML2_TRAITS"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_BASE_UNIT" => GetMessage("IBLOCK_XML2_BASE_UNIT_NAME"), "CML2_TAXES" => array("NAME" => GetMessage("IBLOCK_XML2_TAXES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1), "CML2_PICTURES" => array("NAME" => GetMessage("IBLOCK_XML2_PICTURES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "F", "CODE" => "MORE_PHOTO"), "CML2_FILES" => array("NAME" => GetMessage("IBLOCK_XML2_FILES"), "MULTIPLE" => "Y", "WITH_DESCRIPTION" => "Y", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "F", "CODE" => "FILES"), "CML2_MANUFACTURER" => array("NAME" => GetMessage("IBLOCK_XML2_PROP_MANUFACTURER"), "MULTIPLE" => "N", "WITH_DESCRIPTION" => "N", "MULTIPLE_CNT" => 1, "PROPERTY_TYPE" => "L")); foreach ($arProperties as $k => $v) { $result = $this->CheckProperty($arIBlock["ID"], $k, $v); if ($result !== true) { return $result; } } //For offers make special property: link to catalog if (isset($arIBlock["CATALOG_XML_ID"]) && $this->use_offers) { $this->CheckProperty($arIBlock["ID"], "CML2_LINK", array("NAME" => GetMessage("IBLOCK_XML2_CATALOG_ELEMENT"), "PROPERTY_TYPE" => "E", "USER_TYPE" => "SKU", "LINK_IBLOCK_ID" => $this->GetIBlockByXML_ID($arIBlock["CATALOG_XML_ID"]), "FILTRABLE" => "Y")); } } $this->next_step["IBLOCK_ID"] = $arIBlock["ID"]; $this->next_step["XML_ELEMENTS_PARENT"] = $XML_ELEMENTS_PARENT; } if ($meta_data_xml_id) { $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_METADATA"]), array("ID")); while ($arMetadata = $rs->Fetch()) { //Find referenced metadata $bMetaFound = false; $meta_roots = array(); $rsMetaRoots = $this->_xml_file->GetList(array("ID" => "asc"), array("PARENT_ID" => $arMetadata["ID"])); while ($arMeta = $rsMetaRoots->Fetch()) { if (isset($arMeta["VALUE_CLOB"])) { $arMeta["VALUE"] = $arMeta["VALUE_CLOB"]; } if ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_ID"] && $arMeta["VALUE"] == $meta_data_xml_id) { $bMetaFound = true; } $meta_roots[] = $arMeta; } //Get xml parents of the properties and sections if ($bMetaFound) { foreach ($meta_roots as $arMeta) { if ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_GROUPS"]) { $XML_SECTIONS_PARENT = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_PROPERTIES"]) { $XML_PROPERTIES_PARENT = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_GROUPS_PROPERTIES"]) { $XML_SECTIONS_PROPERTIES_PARENT = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_SECTION_PROPERTIES"]) { $XML_SECTION_PROPERTIES = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_PRICE_TYPES"]) { $XML_PRICES_PARENT = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_STORES"]) { $XML_STORES_PARENT = $arMeta["ID"]; } elseif ($arMeta["NAME"] == $this->mess["IBLOCK_XML2_BASE_UNITS"]) { $XML_BASE_UNITS_PARENT = $arMeta["ID"]; } } break; } } } $iblockFields = CIBlock::GetFields($arIBlock["ID"]); $iblockFields["XML_IMPORT_START_TIME"] = array("NAME" => "XML_IMPORT_START_TIME", "IS_REQUIRED" => "N", "DEFAULT_VALUE" => date("Y-m-d H:i:s")); CIBlock::SetFields($arIBlock["ID"], $iblockFields); if ($XML_PROPERTIES_PARENT) { $result = $this->ImportProperties($XML_PROPERTIES_PARENT, $arIBlock["ID"]); if ($result !== true) { return $result; } } if ($XML_SECTION_PROPERTIES) { $result = $this->ImportSectionProperties($XML_SECTION_PROPERTIES, $arIBlock["ID"]); if ($result !== true) { return $result; } } if ($XML_SECTIONS_PROPERTIES_PARENT) { $result = $this->ImportSectionsProperties($XML_SECTIONS_PROPERTIES_PARENT, $arIBlock["ID"]); if ($result !== true) { return $result; } } if ($XML_PRICES_PARENT) { if ($this->bCatalog) { $result = $this->ImportPrices($XML_PRICES_PARENT, $arIBlock["ID"], $IBLOCK_LID); if ($result !== true) { return $result; } } } if ($XML_STORES_PARENT) { if ($this->bCatalog && CBXFeatures::IsFeatureEnabled('CatMultiStore')) { $result = $this->ImportStores($XML_STORES_PARENT); if ($result !== true) { return $result; } } } if ($XML_BASE_UNITS_PARENT) { if ($this->bCatalog) { $result = $this->ImportBaseUnits($XML_BASE_UNITS_PARENT); if ($result !== true) { return $result; } } } $this->next_step["section_sort"] = 100; $this->next_step["XML_SECTIONS_PARENT"] = $XML_SECTIONS_PARENT; $rs = $this->_xml_file->GetList(array(), array("PARENT_ID" => $xml_root_id, "NAME" => $this->mess["IBLOCK_XML2_PRODUCTS_SETS"]), array("ID", "ATTRIBUTES")); $ar = $rs->Fetch(); if ($ar) { $this->next_step["SETS"] = $ar["ID"]; } return true; }
/** * <p>Возвращает массив <a href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">полей</a> информационного блока.</p> <p><b>Примечание</b>: если инфоблока с таким ID не существует, то функция вернет false.</p> * * * * * @param int $ID Идентификатор информационного блока <br> * * * * @param string $FIELD = "" Идентификатор поля. Если этот параметр задан, то функция вернет * значение конкретного поля. <br> * * * * @return array <p>Массив полей инфоблока.</p> * * * <h4>Example</h4> * <pre> * <?<br>echo CIBlock::GetArrayByID($IBLOCK_ID, "NAME");<br>?> * </pre> * * * * <h4>See Also</h4> * <ul> <li><a href="http://dev.1c-bitrix.ru/api_help/iblock/fields.php#fiblock">Поля инфоблока</a></li> * </ul><a name="examples"></a> * * * @static * @link http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblock/GetArrayByID.php * @author Bitrix */ public static function GetArrayByID($ID, $FIELD = "") { /** @global CDatabase $DB */ global $DB; $ID = intval($ID); if (CACHED_b_iblock === false) { $res = $DB->Query("\n\t\t\t\tSELECT b_iblock.*," . $DB->DateToCharFunction("TIMESTAMP_X") . " TIMESTAMP_X\n\t\t\t\tfrom b_iblock\n\t\t\t\tWHERE ID = " . $ID); $arResult = $res->Fetch(); if ($arResult) { $arMessages = CIBlock::GetMessages($ID); $arResult = array_merge($arResult, $arMessages); $arResult["FIELDS"] = CIBlock::GetFields($ID); } } else { global $CACHE_MANAGER; $bucket_size = intval(CACHED_b_iblock_bucket_size); if ($bucket_size <= 0) { $bucket_size = 20; } $bucket = intval($ID / $bucket_size); $cache_id = $bucket_size . "iblock" . $bucket; if ($CACHE_MANAGER->Read(CACHED_b_iblock, $cache_id, "b_iblock")) { $arIBlocks = $CACHE_MANAGER->Get($cache_id); } else { $arIBlocks = array(); $res = $DB->Query("\n\t\t\t\t\tSELECT b_iblock.*," . $DB->DateToCharFunction("TIMESTAMP_X") . " TIMESTAMP_X\n\t\t\t\t\tfrom b_iblock\n\t\t\t\t\tWHERE ID between " . $bucket * $bucket_size . " AND " . (($bucket + 1) * $bucket_size - 1)); while ($arIBlock = $res->Fetch()) { $arMessages = CIBlock::GetMessages($arIBlock["ID"]); $arIBlock = array_merge($arIBlock, $arMessages); $arIBlock["FIELDS"] = CIBlock::GetFields($arIBlock["ID"]); $arIBlocks[$arIBlock["ID"]] = $arIBlock; } $CACHE_MANAGER->Set($cache_id, $arIBlocks); } if (isset($arIBlocks[$ID])) { $arResult = $arIBlocks[$ID]; if (!array_key_exists("ELEMENT_DELETE", $arResult)) { $arMessages = CIBlock::GetMessages($ID); $arResult = array_merge($arResult, $arMessages); CIBlock::CleanCache($ID); } if (!array_key_exists("FIELDS", $arResult)) { $arResult["FIELDS"] = CIBlock::GetFields($ID); CIBlock::CleanCache($ID); } } else { $arResult = false; } } if ($FIELD) { return $arResult[$FIELD]; } else { return $arResult; } }
/** * @param $id * @param bool|false $forCache * @return bool|string */ public static function run($id, $forCache = false) { $data = \CIBlock::GetByID($id)->Fetch(); if ($data) { $code = $data['CODE']; $name = $data['NAME']; $isactive = $data['ACTIVE'] == 'Y'; $sort = $data['SORT']; $description = (string) $data['DESCRIPTION']; $descriptionType = $data['DESCRIPTION_TYPE']; $className = $forCache ? \TAO::normalizeMnemocode($code) : \TAO::chunkCap($code); unset($data['ID']); unset($data['TIMESTAMP_X']); unset($data['IBLOCK_TYPE_ID']); unset($data['CODE']); unset($data['NAME']); unset($data['LANG_DIR']); unset($data['SERVER_NAME']); unset($data['LID']); unset($data['ACTIVE']); unset($data['SORT']); unset($data['DESCRIPTION']); unset($data['DESCRIPTION_TYPE']); $defs = array('RSS_ACTIVE' => 'Y', 'RSS_TTL' => '24', 'RSS_FILE_ACTIVE' => 'N', 'RSS_YANDEX_ACTIVE' => 'N', 'INDEX_ELEMENT' => 'Y', 'INDEX_SECTION' => 'N', 'WORKFLOW' => 'Y', 'VERSION' => '1', 'BIZPROC' => 'N', 'SECTION_CHOOSER' => 'L', 'RIGHTS_MODE' => 'S', 'SECTION_PROPERTY' => 'N', 'PROPERTY_INDEX' => 'N'); foreach (array_keys($data) as $k) { if (empty($data[$k])) { unset($data[$k]); } if (isset($defs[$k]) && $defs[$k] == $data[$k]) { unset($data[$k]); } } $sites = ''; $res = \CIBlock::GetSite($id); while ($row = $res->Fetch()) { $sites .= $sites != '' ? ',' : ''; $sites .= "'" . $row['SITE_ID'] . "'"; } unset($data['ELEMENTS_NAME']); unset($data['ELEMENT_NAME']); $sData = self::generateArrayExport($data, ' '); $sDescription = self::generateSimpleStringFunctionText('description', $description, ''); $sDescriptionType = self::generateSimpleStringFunctionText('descriptionType', $descriptionType, 'text'); $sIsActive = self::generateSimpleStringFunctionText('isActive', $isactive, true); $sSort = self::generateSimpleStringFunctionText('sort', $sort, '500'); $sSites = "\n\n public function sites()\n {\n return array({$sites});\n }"; $properties = array(); $result = \CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $id, 'CHECK_PERMISSIONS' => 'N')); $defs = array('VERSION' => '1', 'FILTRABLE' => 'N', 'SEARCHABLE' => 'N', 'LIST_TYPE' => 'L', 'COL_COUNT' => '30', 'ROW_COUNT' => '1', 'MULTIPLE' => 'N', 'SORT' => '500', 'IS_REQUIRED' => 'N', 'WITH_DESCRIPTION' => 'N', 'MULTIPLE_CNT' => '5'); while ($row = $result->Fetch()) { $code = trim($row['CODE']); if ($code == '') { $code = 'PROP_' . $row['ID']; } $pid = $row['ID']; unset($row['ID']); unset($row['TIMESTAMP_X']); unset($row['IBLOCK_ID']); unset($row['ACTIVE']); unset($row['CODE']); foreach (array_keys($row) as $k) { if (empty($row[$k])) { unset($row[$k]); } if (isset($defs[$k]) && $defs[$k] == $row[$k]) { unset($row[$k]); } } if ($row['PROPERTY_TYPE'] == 'L') { $items = array(); $res = \CIBlockPropertyEnum::GetList(array(), array('PROPERTY_ID' => $pid, 'CHECK_PERMISSIONS' => 'N')); while ($lrow = $res->Fetch()) { $iid = $lrow['ID']; $eid = $lrow['EXTERNAL_ID']; unset($lrow['ID']); unset($lrow['EXTERNAL_ID']); unset($lrow['XML_ID']); unset($lrow['TMP_ID']); unset($lrow['PROPERTY_ID']); unset($lrow['PROPERTY_NAME']); unset($lrow['PROPERTY_CODE']); unset($lrow['PROPERTY_SORT']); if ($lrow['SORT'] == '500') { unset($lrow['SORT']); } if ($lrow['DEF'] == 'N') { unset($lrow['DEF']); } if (count($lrow) == 1 && isset($lrow['VALUE'])) { $lrow = $lrow['VALUE']; } $items[$eid] = $lrow; } $row['ITEMS'] = $items; } if (isset($row['LINK_IBLOCK_ID']) && !$forCache) { $row['LINK_IBLOCK_CODE'] = \TAO::getInfoblockCode($row['LINK_IBLOCK_ID']); unset($row['LINK_IBLOCK_ID']); } $properties[$code] = $row; } $sProperties = self::generateArrayExport($properties, ' '); $messages = \CIBlock::GetMessages($id); $sMessages = self::generateArrayExport($messages, ' '); $fields = self::trimArrayValues(\CIBlock::GetFields($id)); $defFields = self::defaultFields(); foreach (array_keys($fields) as $field) { if (isset($defFields[$field])) { $md5 = md5(serialize($fields[$field])); $def = md5(serialize($defFields[$field])); if ($md5 == $def) { //unset($fields[$field]); } else { //var_dump($fields[$field], $defFields[$field]); } } } $sFields = self::generateArrayExport($fields, ' '); $permissions = \CIBlock::GetGroupPermissions($id); $sPermissions = self::generateArrayExport($permissions, ' '); ob_start(); include \TAO::taoDir() . '/views/template-iblock.phtml'; $content = "<?php\n" . ob_get_clean(); return $content; } return false; }
<?php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die; } if (!CModule::IncludeModule('iblock')) { return; } if (!empty($arCurrentValues['IBLOCK_CODE'])) { //select iblock's element's fields and properties $filter = ['CODE' => $arCurrentValues['IBLOCK_CODE']]; if ($iblock = CIBlock::GetList([], $filter)->fetch()) { //select fields $fields = []; $rawFields = CIBlock::GetFields($currentIblockId); foreach ($rawFields as $fieldCode => $field) { $fields[$fieldCode] = $field['NAME']; } //element properties $elementProperties = []; $filter = ['ACTIVE' => 'Y', 'IBLOCK_ID' => $currentIblockId]; $rsProp = CIBlockProperty::GetList([], $filter); while ($item = $rsProp->Fetch()) { $elementProperties[$item['CODE']] = '[' . $item['CODE'] . '] ' . $item['NAME']; } } } $arComponentParameters = CComponentUtil::GetComponentProps('notagency:materials.list', $arCurrentValues); $arComponentParameters['PARAMETERS']['SELECT_ELEMENT_BY'] = array('PARENT' => 'BASE', 'NAME' => 'Выбирать элемент по ID или по коду', 'TYPE' => 'LIST', 'VALUES' => ['CODE' => 'по коду', 'ID' => 'по id'], 'DEFAULT' => 'CODE', 'REFRESH' => 'Y'); if ($arCurrentValues['SELECT_ELEMENT_BY'] == 'ID') { $arComponentParameters['PARAMETERS']['REQUEST_ELEMENT_ID'] = array('PARENT' => 'BASE', 'NAME' => 'GET или POST переменная, в которой передается id элемента', 'TYPE' => 'STRING', 'DEFAULT' => 'element_id');
private function __construct($IBLOCK_ID, $params = array()) { if (!isset($params['groups']) || !isset($params['products'])) { throw new \Exception("Groups or Products not exist"); } $rsCatalog = \CCatalog::GetList(array(), array('IBLOCK_ID' => intval($IBLOCK_ID))); if (!$arCatalog = $rsCatalog->Fetch()) { throw new \Exception('Cant find catalog with ID = '.$IBLOCK_ID); } $this->CATALOG_ID = intval($arCatalog['IBLOCK_ID']); $this->OFFERS_ID = intval(Option::get('modifier_id')); if (!$this->OFFERS_ID) { // этот эксепшн можно заменить на создание инфоблока модификаторов throw new \Exception('Need set modifiers iblock'); } $this->defaultSectionID = Option::getDefaultSectionID(); $this->arModifiers[$this->defaultSectionID] = array( 'XML_ID' => $this->defaultSectionID, 'NAME' => 'Другие модификаторы', 'CODE' => $this->defaultSectionID, 'ACTIVE' => 'Y' ); foreach ($params['groups'] as $arItem) { $arInfo = json_decode($arItem['additionalInfo'], true); $arGroup = array( "XML_ID" => $arItem['id'], "SECTION_XML_ID" => $arItem['parentGroup'], "NAME" => $arItem['name'], "CODE" => $arInfo['CODE'], "ACTIVE" => $arInfo['ACTIVE'] === 'N' ? 'N' : 'Y' ); // группа модификаторов if (!$arItem['isIncludedInMenu']) { $this->arModifiers[$arItem['id']] = $arGroup; continue; } // обычная группа $this->arGroups[] = $arGroup; } foreach ($params['products'] as $arItem) { $arElement = array( 'ACTIVE' => 'Y', 'XML_ID' => $arItem['id'], 'NAME' => $arItem['name'], 'CODE' => $arItem['code'], 'TYPE' => strtoupper($arItem['type']), 'DESCRIPTION' => $arItem['description'], 'SECTION_XML_ID' => $arItem['parentGroup'], 'PRICE' => doubleval($arItem['price']), 'WEIGHT' => $arItem['weight'] * 1000 ); if ($arItem['type'] === 'modifier') { $arElement['SECTION_XML_ID'] = $key = strlen($arItem['groupId']) > 0 ? $arItem['groupId'] : $this->defaultSectionID; $this->arModifiers[$key]['ITEMS'][] = $arElement; continue; } $arElement = array_merge($arElement, array( 'MODIFIERS' => array(), 'GROUP_MODIFIERS' => array() )); if (!empty($arItem['modifiers'])) // обычные модификаторы { foreach ($arItem['modifiers'] as $arModifier) { $arElement['MODIFIERS'][] = array( 'XML_ID' => $arModifier['modifierId'], 'REQUIRED' => intval($arModifier['required']) > 0 ? 'Y' : 'N' ); } } if (!empty($arItem['groupModifiers'])) // групповые модификаторы { foreach ($arItem['groupModifiers'] as $arModifier) { $arElement['GROUP_MODIFIERS'][] = array( 'XML_ID' => $arModifier['modifierId'], 'REQUIRED' => intval($arModifier['required']) > 0 ? 'Y' : 'N' ); } } $this->arProducts[] = $arElement; } $iblockFields = \CIBlock::GetFields($this->CATALOG_ID); $iblockFields["XML_IMPORT_START_TIME"] = array( "NAME" => "XML_IMPORT_START_TIME", "IS_REQUIRED" => "N", "DEFAULT_VALUE" => date("Y-m-d H:i:s"), ); \CIBlock::SetFields($this->CATALOG_ID, $iblockFields); }
public function updateIblockFields($iblockId, $fields = array()) { $default = \CIBlock::GetFields($iblockId); $fields = array_replace_recursive($default, $fields); \CIBlock::SetFields($iblockId, $fields); return true; }