Шпаргалка: привязка к элементам в компоненте altasib:feedback.form
Запись от 22.12.2014
altasib:feedback.form - компонент, позволяющий выводить формы на сайте, очень выручает и экономит время на младших редакциях. Но нашелся один недостаток - если сделать свойство "Привязка к элементам" - он выведет обычное текстовое поле input="text" вместо выбора элементов.
Решил исправить эту ситуацию. Что нужно отредактировать:
result_modifier.php
template.php
style.css
Теперь по порядку. В result_modifier.php нужно дополнить информацию о полях и загрузить элементы к которым должна быть установлена привязка:
Затем, эту информацию необходимо вывести в шаблоне из файла template.php. Добавим следующий код перед строкой "<?elseif($arField["TYPE"] !== 'F'):?>":
И дооформим все это в style.css:
Решил исправить эту ситуацию. Что нужно отредактировать:
result_modifier.php
template.php
style.css
Теперь по порядку. В result_modifier.php нужно дополнить информацию о полях и загрузить элементы к которым должна быть установлена привязка:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
$resProperty = CIBlockProperty::GetList(
Array("SORT" => "ASC"),
Array("IBLOCK_ID" => $arParams["IBLOCK_ID"])
);
$iFieldKey = 0;
while($arProp = $resProperty->Fetch()) {
if(in_array($arProp["CODE"], $arParams["PROPERTY_FIELDS"])) {
$arResult["FIELDS"][$iFieldKey]["PROPERTY"] = $arProp;
$iFieldKey++;
}
}
// elements for E property
foreach($arResult["FIELDS"] as $keyField=>$arField) {
if($arField["TYPE"] == "E") {
$iBlockID = $arField["PROPERTY"]["LINK_IBLOCK_ID"];
$resElement = CIBlockElement::GetList(
Array("SORT" => "ASC"),
Array(
"IBLOCK_ID" => $iBlockID,
"ACTIVE" => "Y"
),
false,
false,
Array("IBLOCK_ID", "ID", "ACTIVE", "NAME")
);
while($arElement = $resElement->Fetch()) {
$arResult["FIELDS"][$keyField]["LINKED_ELEMENTS"][] = $arElement;
}
}
}
?>
Затем, эту информацию необходимо вывести в шаблоне из файла template.php. Добавим следующий код перед строкой "<?elseif($arField["TYPE"] !== 'F'):?>":
<?elseif($arField["TYPE"] == "E"):?>
<div class="alx_feed_back_form_element_bg" id="error_<?=$arField["CODE"]?>">
<?if($arField["PROPERTY"]["MULTIPLE"] == "Y"):?>
<?foreach($arField["LINKED_ELEMENTS"] as $arElement):?>
<p class="alx_feed_back_form_checkbox">
<input type="checkbox"
name="FIELDS[<?=$arField["CODE"]?>][]"
value="<?=$arElement["ID"]?>"
id="<?=$arField["CODE"]?>1_<?=$arElement["ID"]?>"
<?if(!empty($_POST["FIELDS"][$arField["CODE"]]) && in_array($arElement["ID"], $_POST["FIELDS"][$arField["CODE"]])):?>checked="checked"<?endif;?>
/>
<label for="<?=$arField["CODE"]?>1_<?=$arElement["ID"]?>"><?=$arElement["NAME"]?></label>
</p>
<?endforeach;?>
<?endif;?>
</div>
И дооформим все это в style.css:
/* element & checkbox */
.alx_feed_back_default .alx_feed_back_form_feedback_poles .alx_feed_back_form_item_pole .alx_feed_back_form_element_bg {
margin-left: 20px;
}
.alx_feed_back_default .alx_feed_back_form_feedback_poles .alx_feed_back_form_item_pole .alx_feed_back_form_element_bg .alx_feed_back_form_checkbox {
margin-bottom: 8px;
}
.alx_feed_back_default .alx_feed_back_form_feedback_poles .alx_feed_back_form_item_pole .alx_feed_back_form_element_bg .alx_feed_back_form_checkbox input {
vertical-align: baseline;
margin: 0 !important;
}
.alx_feed_back_default .alx_feed_back_form_feedback_poles .alx_feed_back_form_item_pole .alx_feed_back_form_element_bg .alx_feed_back_form_checkbox label {
vertical-align: middle;
}