Идеи пользователя 17890

Рейтинг: -0.6528  
Отложено
Предложил Пользователь 17890 17.03.2014 17:14:14

позволять через CIBlockElement::Add() добавлять элементы с заранее известным ID

Предвижу вопросы, зачем это может быть нужно, сразу отвечу:
в ID идет автоинкремент, поэтому при удалении возникает фрагментация. Я хочу бывшие удаленные элементы добавлять с теми же ID, с которыми они существовали ранее.
Рейтинг: 0.0731  
Ответил Жуков Евгений 18.03.2014 11:02:25
Можем лишь предложить не удалять, а деактивировать элементы.
Рейтинг: 0.2428  
Отложено
Предложил Пользователь 17890 14.03.2014 22:41:17

сделать чтобы при сохранении элемента строка значений в таблице b_iblock_element_prop_s#iblockId# восстанавливалась автоматически.

Если я добавляю элемент инфоблока 2.0 (свойства в отдельной таблице) через запрос:

 $DB ->Query('
  INS ERT IN TO       b_iblock_element
  (ID, IBLOCK_ID, NAME)
  VALUES (' . $elementId . ',' . $iblockId . ', "-")
');

То одиночные свойства элемента теперь никак не удасться сохранить, ни через
сохранение элемента в админке, ни через CIBlockElement::SetPropertyValuesEx().

оказывается, чтобы работало нужно добавлять также и заглушку-строку для будущих значений свойств:

 
if (CIBlockElement::GetIBVersion($iblockId) == 2) {
  $DB->Query("INS ERT IN TO b_iblock_element_prop_s".$iblockId."(IBLOCK_ELEMENT_ID)VALUES(".$elementId.")");
}

Собственно идея, сделать чтобы при сохранении элемента строка значений в таблице b_iblock_element_prop_s#iblockId# восстанавливалась автоматически.
Рейтинг: 0.3742  
Ответил Жуков Евгений 17.03.2014 11:46:06
Прямые запросы к "родным" таблицам БД продукта не рекомендуются и не поддерживаются.
Рейтинг: -1.5806  
Отложено
Предложил Пользователь 17890 27.09.2013 19:43:41

Add2BasketByProductID не добавляет в корзину не активные товары, возможность управлять этим поведением

Было бы не плохо добавить последний параметр:

function Add2BasketByProductID(
  $PRODUCT_ID,
  $QUANTITY = 1,
  $arRewriteFields = array(),
  $arProductParams = false,
  $arFilterToCheckElementExistsRewrite = array()
)

и использовать его для проверки существования элемента перед выбросом исключения:
"NO_IBLOCK_ELEMENT".

Сейчас для этой проверки используется жесткий фильтр:
array(
"ID" => $PRODUCT_ID,
"ACTIVE" => "Y",
"ACTIVE_DATE" => "Y",
"CHECK_PERMISSIONS" => "Y",
"MIN_PERMISSION" => "R",

 )

Довеской кроме ID хочется управлять.

UPD Как я понял смысл минуса:
нецелесообразно. Хотите изменить - копируете функцию и меняете
Рейтинг: -0.3687  
Ответил Жуков Евгений 28.09.2013 12:48:47
Вы можете воспользоваться методом CSaleBasket::Add для реализации собственной логики добавления в корзину и актуализации ее содержимого.