Рассмотрим создание инфоблока на примере скрипта «Вопрос-Ответ» с применением функции(метода) CIBlockElement::GetList
Заметка из цикла «Продолжаем знакомство с Битриксом». В ней вы найдете описание простого скрипта «Вопрос-Ответ» для реализации обратной связи с посетителями.
Инструкция по созданию инфоблока
(неофициальная, на примере найденного скрипта):
1. Создать тип инфоблока, например, «Вопрос-Ответ».
2. Создать инфоблок этого типа (запромнить его ID). После чего необходимо добавить пару свойств (на вкладке «Свойства»), а именно две строки с «Вопрос»,"Ответ" в поле «Название», тип в обоих случаях «HTML/тeкcт», сортировки 400 и 500, коды vopros и otvet.
3. Во вкладке «Разработка» выбрать Создать::Раздел. И создать раздел и индексный файл в нем.
4. Поместить в код страницы (через меню «Изменить::Страницу как PHP») следующий код:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");// подключение хедера$APPLICATION->SetTitle("Вопрос - Ответ");// устанавливаем тайтл страницы
CModule::IncludeModule("iblock");if(isset($_POST['add_question']))// если в массиве POST есть 'add_question' обрабатываем и отправляем вопрос в БД{$errors=array();if(!$USER->IsAuthorized()){if(!$APPLICATION->CaptchaCheckCode($_POST["captcha_word"],$_POST["captcha_code"])){$errors[]='Введен неверный защитный код';}}if(!strlen(trim($_POST['name'])))$errors[]='Введите ваше имя';if(!strlen(trim($_POST['text'])))$errors[]='Введите сообщение';if(sizeof($errors)==0){$el=new CIBlockElement;$PROP=array();$PROP['vopros']['VALUE']['TYPE']='text';$PROP['vopros']['VALUE']['TEXT']=trim($_POST['text']);// записываем отправленный текст в поле инфоблока$arLoadProductArray=Array("MODIFIED_BY"=>$USER->GetID(),"IBLOCK_SECTION"=>false,"IBLOCK_ID"=>123,// ID созданного инфоблока"PROPERTY_VALUES"=>$PROP,"NAME"=>trim($_POST['name']),"ACTIVE"=>"N");if($el->Add($arLoadProductArray))echo'Вопрос отправлен';elseecho"Ошибка: ".$el->LAST_ERROR;}else{echo'<div class="error_msg">';foreach($errorsas$error)echo$error.'<br/>';echo'</div>';}}// выводим список вопросов и ответов$arSelect=Array("ID","NAME","PROPERTY_vopros","PROPERTY_otvet","TIMESTAMP_X");// задаем поля селекта$arFilter=Array("IBLOCK_ID"=>123,"ACTIVE"=>"Y");// указываем из какого инфоблока$arOrder=Array("ID"=>"DESC");// явно задаем сортировку$res= CIBlockElement::GetList($arOrder,$arFilter,false,Array("nPageSize"=>10),$arSelect);$res->NavStart(10);$count=$res->SelectedRowsCount();$i=0;while($ob=$res->GetNextElement()){$arFields=$ob->GetFields();?>
<table>
<tr>
<td><b><?phpechosubstr($arFields['TIMESTAMP_X'],0,10);?></b> <strong style="color: blue;"><?=$arFields['NAME']?></strong> <strong>вопрос:</strong></td>
</tr>
<tr>
<td><?=$arFields['PROPERTY_VOPROS_VALUE']['TEXT']?></td>
</tr>
<tr>
<td style="color: blue; font-weight: bold; padding-left: 20px;">ответ:</td>
</tr>
<tr>
<td style="padding-left: 20px;"><?=$arFields['~PROPERTY_OTVET_VALUE']['TEXT']?></td>
</tr>
</table>
<?$i++;if($i!=$count)echo'<hr />';}echo$res->NavPrint('Вопросы');// счетчик страниц с элементами инфоблока?>
<br/><br/>
<form action="<?=$_SERVER['REQUEST_URI']?>" method="post">
<table>
<tr>
<td>Ваше имя:</td>
<td><input type="text" name="name" width="200" /></td>
</tr>
<tr>
<td>Ваш вопрос:</td>
<td><textarea name="text" cols="40" rows="10"></textarea></td>
</tr>
<?if(!$USER->IsAuthorized()){include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php");$cpt=new CCaptcha();$captchaPass= COption::GetOptionString("main","captcha_password","");if(strlen($captchaPass)<=0){$captchaPass= randString(10);
COption::SetOptionString("main","captcha_password",$captchaPass);}$cpt->SetCodeCrypt($captchaPass);?>
<tr>
<td>Введите код с картинки:<input type="hidden" name="captcha_code" value="<?=htmlspecialchars($cpt->GetCodeCrypt());?>" /></td>
<td valign="top">
<input type="text" id="captcha_word" name="captcha_word" />
<img src="/bitrix/tools/captcha.php?captcha_code=<?=htmlspecialchars($cpt->GetCodeCrypt());?>" />
</td>
</tr>
<?}?>
<tr>
<td align="center" colspan="2"><input type="submit" value="Отправить" name="add_question" /></td>
</tr>
</table>
</form>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Небольшие особенности скрипта:
1. Добавлена сортировка элементов инфоблока по убыванию значения поля ID (дефолтная Array(«SORT»=>«ASC») нелогична и похоже, что сортирует по ID по возрастанию). Исторически ID — поле автоинкрементное, поэтому в нормальных условиях элемент с максимальным ID и будет последним созданным.
2. Добавлен вывод даты смены статуса у записи в инфоблоке, так как sysdate задания вопроса мы вроде как нигде не фиксируем.
Примечание:
Любознательные безусловно заглянут в файл \bitrix\modules\iblock\classes\mysql\iblockelement.php (найдя его в ТС по подстроке «class CIBlockElement» с учетом регистра) для изучения класса CIBlockElement и его функции GetList.
Также нелишним будет заглянуть в официальную документацию http://dev.1c-bitrix.ru/api_help/iblock/classes/ciblocksection/getlist.php.
Пользуясь случаем, немного рекламы: если вам необходимо создание сайта на 1С-Битрикс сходите по ссылке, рекомендую.