К примеру мы хотим куда-то, для каких-то целей строкой выводить название товара, товаров. Стандартно Битрикс24 выводит название из поля типо текст с HTML тегами </b> и так далее. Давайте напишем код, который будет очищать название от лишних символов и выводить в переменную Variable2 чистое название.
// 1. Получаем данные из Variable1
$input = $this->GetVariable('Variable1');
if ($input === null) {
$input = '';
}
// 2. Создаем лог
$log = "=== Лог обработки товара ===\n";
$log .= "[1] Получено из Variable1: " . var_export($input, true) . "\n";
// 3. Декодируем HTML-сущности
$decoded = html_entity_decode($input, ENT_QUOTES | ENT_HTML5, 'UTF-8');
$log .= "[2] После декодирования HTML-сущностей: " . var_export($decoded, true) . "\n";
// 4. Ищем название товара (содержимое между td тегами)
if (preg_match('/<td[^>]*>(.*?)<\/td>/', $decoded, $matches)) {
$productName = strip_tags($matches[1]);
$log .= "[3] Найдено название товара в первом td: " . var_export($productName, true) . "\n";
$output = $productName;
} else {
// 5. Альтернативный поиск - между квадратными скобками
if (preg_match('/\[td\](.*?)\[\/td\]/', $decoded, $matches)) {
$productName = $matches[1];
$log .= "[3] Найдено название товара в [td]: " . var_export($productName, true) . "\n";
$output = $productName;
} else {
// 6. Если не нашли, используем простую очистку
$output = strip_tags($decoded);
$log .= "[3] Использована простая очистка: " . var_export($output, true) . "\n";
}
}
// 7. Удаляем лишнее (суммы, валюту и т.д.)
$cleanPatterns = [
'/\d[\d\s]*[₽руб]/u', // суммы типа "3 000 000 ₽"
'/Товар/ui',
'/Сумма/ui',
'/ /',
'/₽/',
'/₽/'
];
$output = preg_replace($cleanPatterns, '', $output);
$output = trim($output);
$output = preg_replace('/\s+/', ' ', $output);
$log .= "[4] После очистки от лишнего: " . var_export($output, true) . "\n";
// 8. Если результат пустой, пробуем другой подход
if (empty($output)) {
// Разбиваем по строкам и берем первую содержательную
$lines = preg_split('/[\r\n]+/', $decoded);
foreach ($lines as $line) {
$cleanLine = trim(strip_tags($line));
if (!empty($cleanLine) && !preg_match('/^(Товар|Сумма|\d)/ui', $cleanLine)) {
$output = $cleanLine;
$log .= "[5] Найдено в строках: " . var_export($output, true) . "\n";
break;
}
}
}
// 9. Сохраняем результат в Variable2
try {
$this->SetVariable('Variable2', $output);
$log .= "[6] Сохранение в Variable2: УСПЕШНО\n";
$savedValue = $this->GetVariable('Variable2');
$log .= "[7] Проверка Variable2: " . var_export($savedValue, true) . "\n";
} catch (Exception $e) {
$log .= "[6] ОШИБКА сохранения: " . $e->getMessage() . "\n";
}
// 10. Сохраняем лог
$this->SetVariable('Variable3', $log);
// 11. Возвращаем результат
return $output;
В Variable1 мы принимаем данные из поля {{Товарные позиции (текст)}}
В Variable2 отдаем очищенное название
По желанию в Variable3 выводим логи