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

селект в форме

00 голосов
8
может и боян, но всеже
подскажите адекватный способ делать динамичесий селект в стандартной форме, т.е. чтобы список генерился напр. из записей в инфоблоке
спросил 03 Июнь, 13 от MaJopKa (240 баллов)

8 Ответы

00 голосов
Попробуй в в справочнике, в поиске вбей GetList
ответил 03 Июнь, 13 от WETERa (800 баллов)
00 голосов
проблема не в том, чтобы получить данные из инфоблока, а в том чтобы скормить их форме и чтобы она не подавилась )
ответил 09 Июнь, 13 от MaJopKa (240 баллов)
00 голосов
Опишите по подробнее, не совсем понимаю что именно требуется
ответил 11 Сен, 13 от WETERa (800 баллов)
00 голосов
есть форма отправки резюме
в этой форме естественно должен быть выбор вакансии
все вакансии хранятся в иблоке
вопрос - как вакансии засунуть в форму

пока есть одно решение, но очень тупое и кривое.
суть - на странице с формой выбираем список вакансий из иблока, выбираем список ответов для данного конкретного поля (тупо sql запросом SELECT * FROM b_form_answer WHERE FIELD_ID='42' )
сравниваем получившиеся результаты, что лишнее удаляем из b_form_answer, что новое добавляем в b_form_answer

Код
<?php
   // получаем список вакансий
$arSelect = array( 'ID', 'NAME', 'PREVIEW_TEXT', 'DETAIL_PAGE_URL', 'IBLOCK_SECTION_ID' );
$arResult = array( );
$arFilter = array (
   "IBLOCK_CODE" => 'vacancy',
   "ACTIVE" => "Y",
   "ACTIVE_DATE" => "Y",
);
$arSort = array (
   'IBLOCK_SECTION_ID' => 'ASC'
);


$arItem = array ( );
$rsElements = CIBlockElement::GetList($arSort, $arFilter, false, array("nTopCount"=>10000), $arSelect); // OMG
while ( $obElement = $rsElements->GetNextElement() ) {
   $arElement = $obElement->GetFields();

   $arItem[] = array (      'ID' => $arElement['ID'],
                     'NAME' => $arElement['NAME'],
                     'ANONCE' => $arElement['PREVIEW_TEXT'],
                     'DETAIL_PAGE_URL' => $arElement['DETAIL_PAGE_URL'],
                     'IBLOCK_SECTION_ID' => $arElement['IBLOCK_SECTION_ID'],
                  );

}


$vacancies_old = array ( );
$sql = "SELECT * FROM b_form_answer WHERE FIELD_ID='42'";   // Magic number :)
$res = $DB->query ( $sql );
while ( $row = $res->Fetch() ) {
   $vacancies_old[] = array ( 'name' => $row['MESSAGE'], 'id' => $row['VALUE'] );
}

$vacancies_new = array ( );
foreach ( $arItem as $k => $v ) {
   $vacancies_new[] = array ( 'name' => $v['NAME'], 'id' => $v['ID'] );
}

$to_delete = array();
foreach ( $vacancies_old as $k => $v ) {
   if ( !in_array ( $v, $vacancies_new ) )
      $to_delete[] = $v;
}

$to_insert = array ( );
foreach ( $vacancies_new as $k => $v ) {
   if ( !in_array ( $v, $vacancies_old ) )
      $to_insert[] = $v;
}

/////
foreach ( $to_delete as $k => $v ) {
   $sql = "DELETE FROM b_form_answer WHERE FIELD_ID='42' AND MESSAGE='{$v['name']}' AND VALUE='{$v['id']}'";
   $DB->query ( $sql );
}
foreach ( $to_insert as $k => $v ) {
   $sql = "INSERT INTO b_form_answer
         (FIELD_ID, TIMESTAMP_X, MESSAGE, C_SORT, ACTIVE, VALUE, FIELD_TYPE, FIELD_WIDTH, FIELD_HEIGHT, FIELD_PARAM)
         VALUES
         (42, NOW(), '{$v['name']}', 0, 'Y', '{$v['id']}', 'dropdown', 0, 0, '')";
   $DB->query ( $sql );
}
?>


может есть что-нибудь более адекватное?)
ответил 09 Дек, 13 от MaJopKa (240 баллов)
00 голосов
Ни каких запросов к БД, задача я бы сказал "бытовая" в api все есть, GetList используйте для формирования массива,

<select>
foreach($arr as $val)
{

?><option VALUE="<?=$val["ID"]?>"><?=$val["NAME"]?></option><?
}
</select>

Примерно так.. там все элементарно, зачем делать запросы к бд?
ответил 23 Март, 14 от Lekar (2,220 баллов)
00 голосов
вообще не понимаю, почему такой элементарной вещи не предусмотрено изначально
ответил 16 Июль, 14 от MaJopKa (240 баллов)
00 голосов
Цитата
Alex K. пишет:
вообще не понимаю, почему такой элементарной вещи не предусмотрено изначально



А что именно? Это элементарно, в цикле вывести в селект <option> со значениями
ответил 16 Ноя, 14 от Lekar (2,220 баллов)
00 голосов
Цитата
Рамиль Юналиев пишет:
Ни каких запросов к БД, задача я бы сказал "бытовая" в api все есть, GetList используйте для формирования массива,

<select>
foreach($arr as $val)
{

?><option VALUE="<?=$val["ID"]?>"><?=$val["NAME"]?></option><?
}
</select>

Примерно так.. там все элементарно, зачем делать запросы к бд?


угу и куда это втыкать здесь -
Код
<?$APPLICATION->IncludeComponent(
   "bitrix:form",
   "template",
   Array(
      ....
   )
);?>


или хотите сказать, что список автоматически сформируется от запроса пользователя?))) ну если да, то я вам соболезную )))
ответил 13 Март, 15 от MaJopKa (240 баллов)