Поле "Символьный код"(CODE) в компоненте "Добавление элементов инфоблока"(iblock.element.add)
На многих сайтах поле "Символьный код"(CODE) элемента инфоблока генерируется из "Названия" элемента. Но при использовании компонента "Добавление элементов инфоблока"(iblock.element.add) это становится невозможно, так как в нём это не реализовано.
Для реализации необходимо кастомизировать три компонента
:
- "Добавление элементов инфоблока"(iblock.element.add)
- "Форма добавления / редактирования"(iblock.element.add.form)
- "Список своих элементов"(iblock.element.add.list)
Поэтому копируем их в своё пространство имён, например, в папку "/bitrix/components/demo/". Затем потребуется:
1. переименовать папку "/bitrix/components/demo/iblock.element.add/templates/.default/
bitrix/" в "/bitrix/components/demo/iblock.element.add/templates/.default/
demo/".
2. в файлах
- /bitrix/components/demo/iblock.element.add/templates/.default/list.php
- /bitrix/components/demo/iblock.element.add/templates/.default/form.php
заменить
bitrix на
demo.
3. заменить во всех скопированных файлах "component.php" и "template.php":
-
CODE= на
ID=-
"CODE" на
"ID" (кроме случаев, где
"CODE" расположен в коде
$arr["CODE"] в файлах .parameters.php)
Поиск и замену можно осуществить средствами Продукта, перейдя в "Контент - Структура сайта - Файлы и папки" в каждую папку скопированного компонента, нажав на кнопку "Поиск" и указав во вкладке "Заменить" следующие параметры(один пример):
Имя файла или папки: *mp*.php Слово или фраза в файле: CODE= Заменить на: ID= Искать в папке: /bitrix/components/demo/iblock.element.add.list Во всех подпапках: Да |
4. найти в скопированных файлах ".parameters.php" код
"NAME" => GetMessage("IBLOCK_ADD_NAME"), |
и добавить после него:
5. в файле "/bitrix/components/demo/iblock.element.add.form/component.php" после строк:
"NAME" => array(
"PROPERTY_TYPE" => "S",
"MULTIPLE" => "N",
"COL_COUNT" => $COL_COUNT,
), |
добавить:
"CODE" => array(
"PROPERTY_TYPE" => "S",
"MULTIPLE" => "N",
"COL_COUNT" => $COL_COUNT,
), |
6. заменить в файле "/bitrix/components/demo/iblock.element.add/templates/.default/demo/iblock.element.add.form/.default/template.php" строчку:
<input type="text" name="PROPERTY[<?=$propertyID?>][<?=$i?>]" size="25" value="<?=$value?>" /><br /><? |
на код:
<?
$inputID = ($propertyID == "NAME" || $propertyID == "CODE"? 'id="'.$propertyID.'"': "");
$arIBlock = CIBlock::GetArrayByID($arParams["IBLOCK_ID"]);
if($propertyID == "CODE")
{
$arTranslit = $arIBlock["FIELDS"]["CODE"]["DEFAULT_VALUE"];
if($arTranslit["TRANSLITERATION"] == "Y")
{
CUtil::InitJSCore(array('translit'));
?>
<script type="text/javascript">
var oldValue = '';
function transliterate()
{
var from = document.getElementById('NAME');
var to = document.getElementById('CODE');
if(from && to && oldValue != from.value)
{
BX.translit(from.value, {
'max_len' : <?echo intval($arTranslit['TRANS_LEN'])?>,
'change_case' : '<?echo $arTranslit['TRANS_CASE']?>',
'replace_space' : '<?echo $arTranslit['TRANS_SPACE']?>',
'replace_other' : '<?echo $arTranslit['TRANS_OTHER']?>',
'delete_repeat_replace' : <?echo $arTranslit['TRANS_EAT'] == 'Y'? 'true': 'false'?>,
'use_google' : <?echo $arTranslit['USE_GOOGLE'] == 'Y'? 'true': 'false'?>,
'callback' : function(result){to.value = result; setTimeout('transliterate()', 250);}
});
oldValue = from.value;
}
else
{
setTimeout('transliterate()', 250);
}
}
transliterate();
</script>
<?
}
}
?>
<input <?=$inputID?> type="text" name="PROPERTY[<?=$propertyID?>][<?=$i?>]" size="25" value="<?=$value?>" /><br /><? |
Назад в раздел