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

init.php и OnBeforeIBlockElementAdd

00 голосов
7
Задача - в статьях в поле анонса подставлять содержимое полного текста статьи.
В init.php делаю так:
Код
AddEventHandler("iblock", "OnBeforeIBlockElementAdd",   array("SmallText", "OnBeforeIBlockElementAdd"));
AddEventHandler("iblock", "OnBeforeIBlockElementUpdate",   array("SmallText", "OnBeforeIBlockElementUpdate"));

class SmallText
{
function OnBeforeIBlockElementAdd (&$arFields)
{
if (1 == intval($arFields['IBLOCK_ID']))
{
$arFields["PREVIEW_TEXT"]=$arFields["DETAIL_TEXT"];
}
}
} 

Но все-равно выводится "Обязательное поле "Описание для анонса" не заполнено."
Где я не прав?
И еще не подскажет ли кто, есть ли в Битрикс API функция, которая обрезает большие тексты до указанного количества символов, но обрезает не тупо посредине слова, а допустим указанное количество символов + точка, дабы свою функцию не писать..
спросил 24 Авг, 13 от Snezhka (2,240 баллов)

7 Ответы

00 голосов
может все таки $arFields['IBLOCK_ID'] не 1?
или $arFields["DETAIL_TEXT"] пуст.. а так код правильный.

Есть TruncateText, но обрезает тупо по количеству.
ответил 24 Авг, 13 от H9kA (480 баллов)
00 голосов
и еще вопрос
данная ошибка возникает при добавлении через админку?
ответил 06 Ноя, 13 от jenia (1,500 баллов)
00 голосов
Цитата
может все таки $arFields['IBLOCK_ID'] не 1?
или $arFields["DETAIL_TEXT"] пуст.. а так код правильный.

нет, переменная не пуста, да и номер иблока точно равен 1. Т.е. я пробовал делать дамп переменных, проверка на номер иблока проходит, и переменная DETAIL_TEXT не пуста..почему и задаю вопрос тут..
Цитата
и еще вопрос
данная ошибка возникает при добавлении через админку?

нет, в публичной части есть форма добавления элемента иблока.
ответил 12 Фев, 14 от Snezhka (2,240 баллов)
00 голосов
А может, все-таки, получать из иблока DETAIL_TEXT и вставлять его после анонса в шаблоне?

Обрезать по слову например как-то так
$s = preg_replace('~^(.*?)[A-zа-яА-Я]*$~','$1',substr($s,0,$trunclength+1));
ответил 02 Июнь, 14 от Eddie (2,060 баллов)
00 голосов
Цитата
А может, все-таки, получать из иблока DETAIL_TEXT и вставлять его после анонса в шаблоне?

ну, можно и так, разницы то я так думаю особой нет..
Тогда вопрос, как получить в шаблоне значение DETAIL_TEXT?
ответил 30 Сен, 14 от Snezhka (2,240 баллов)
00 голосов
Разница есть, делая по-нормальному, вы значительно облегчаете жизнь потомкам :)
ответил 02 Фев, 15 от Eddie (2,060 баллов)
00 голосов
Цитата
Разница есть, делая по-нормальному, вы значительно облегчаете жизнь потомкам :)

эм..а почему в init.php это не нормально? :)
ответил 16 Май, 15 от Snezhka (2,240 баллов)

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

0 голосов
4 ответов
0 голосов
4 ответов
спросил 27 Ноя, 13 от maxdj (480 баллов)
0 голосов
6 ответов
спросил 09 Окт, 13 от Amentet (2,080 баллов)
0 голосов
2 ответов
спросил 21 Авг, 13 от Shiori (180 баллов)
0 голосов
2 ответов
спросил 22 Июль, 13 от Cmeptb (160 баллов)