Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Управление свойством товара со страницы сайта.

00 голосов
6
Добрый день. Имеем сайт на Битриксе - megabitcomp.ru. На данном сайте реализовал два свойства - наши новинки и top-20. Хозяин магазина, жалуется - чтобы управлять данными свойствами очень неудобно - долго ищешь товар, который нужно исключить и очень долго ищешь товар, который нужно добавить. Решил ему облегчить жизнь и пока написал такую вот страничку - megabitcomp.ru/megabit/enew/ . Использовал catalog.section. Теперь мне нужно, чтобы при переходе по ссылке "Удалить" из таблицы b_iblock_element_property для этого IBLOCK_ELEMENT_ID удалялось свойство IBLOCK_PROPERTY_ID = 102. Очень слаб в php - хотелось бы наглядный примерчик, как это сделать. В дальнейшем необходимо доработать, чтобы можно было добавлять любой товар - введя его артикул. Спасибо.
спросил 27 Сен, 13 от Aypuka (340 баллов)

6 Ответы

00 голосов
При работе с битриксом вам не обязательно быть гуру php, достаточно синтаксис знать.И лучше даже вовсе не знать имена и структуру таблиц в БД, пока не сможете внятно объяснить, зачем вам это надо при наличии api.
А вот api знать крайне желательно.

http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/delete.php — этот метод делает то, что вам нужно: удаляет элемент инфоблока вместе с его свойствами.

Но, если честно, сомневаюсь, что нужно даже это.
Ибо интерфейс «эрмитаж» хорош тем, что позволяет значительную часть административных действий производить из публичной части.
В шаблоне в начале каждой итерации цикла стоят такие волшебные строки:
Код
<?
   $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
   $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
?>
Надеюсь, вы их не удаляли?

Вот это скорее всего и есть то, что вам надо.
ответил 08 Окт, 13 от Ameliy (140 баллов)
00 голосов
Огромное спасибо - натолкнуло на верный путь. Только мне не нужно удалять элемент, а только свойство.
Поковырялся и нашел функцию - CIBlockElement::SetPropertyValues. Оттуда же и пример взял, сварганил файлик php:


Код
<?
$ELEMENT_ID = $_GET['ELEMENT_ID'];  // код элемента
$PROPERTY_CODE = "CML_NEW";  // код свойства
$PROPERTY_VALUE = 0;  // значение свойства
// Установим новое значение для данного свойства данного элемента
$dbr = CIBlockElement::GetList(array(), array("=ID"=>$ELEMENT_ID), false, false, array("ID", "IBLOCK_ID"));
if ($dbr_arr = $dbr->Fetch())
{
  $IBLOCK_ID = $dbr_arr["IBLOCK_ID"];
  CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE);
}
?>
 

Только мне выдается ошибка при его вызове:

Fatal error: Class 'CIBlockElement' not found in

Порылся в инете и нашел "очень умное" замечание, что при этой ошибке нужно использовать:

CModule::IncludeModule("iblock");

Но тогда мне выдает:

Fatal error
: Class 'CModule' not found in

Понимаю, что туплю, но как и где? Спасибо.
ответил 07 Янв, 14 от Aypuka (340 баллов)
00 голосов
Вы не подключили пролог и эпилог. Откройте любую страницу сайта - увидите.
ответил 24 Апр, 14 от Pomnep (13,960 баллов)
00 голосов
Евгений Жуков,
Вы имеете ввиду так:

Код
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Title");
?>

<?
$ELEMENT_ID = $_GET['ELEMENT_ID'];  // код элемента
$PROPERTY_CODE = "CML_NEW";  // код свойства
$PROPERTY_VALUE = 0;  // значение свойства
// Установим новое значение для данного свойства данного элемента
$dbr = CIBlockElement::GetList(array(), array("=ID"=>$ELEMENT_ID), false, false, array("ID", "IBLOCK_ID"));
if ($dbr_arr = $dbr->Fetch())
{
  $IBLOCK_ID = $dbr_arr["IBLOCK_ID"];
  CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, $PROPERTY_CODE);
}
?>

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
 

Не помогает - все тоже:

Fatal error: Class 'CIBlockElement' not found in /home/megabitc/public_html/megabit/enew/nedit.php on line 11
ответил 19 Авг, 14 от Aypuka (340 баллов)
00 голосов
А все потому, что

Код
Перед использованием модуля необходимо проверить установлен ли он и подключить его при помощи конструкции:
 
<? if(CModule::IncludeModule("iblock")) {    //здесь можно использовать функции и классы модуля } ?>
 
http://dev.1c-bitrix.ru/api_help/iblock/index.php
ответил 24 Дек, 14 от Texnik (1,860 баллов)
00 голосов
Julliet,
Огромное спасибо - все получилось.
ответил 13 Апр, 15 от Aypuka (340 баллов)

Похожие вопросы