$count_questions = count($processedQuestion);
// Сохраняем значение в сессии
$_SESSION['COUNT_QUESTIONS'] = $count_questions;
// Получаем значение из сессии
$count_questions = isset($_SESSION['COUNT_QUESTIONS']) ? $_SESSION['COUNT_QUESTIONS'] : 0;
// Добавляем вкладку с количеством вопросов
$arResult['PROPERTIES']['TABS'][] = array(
'CODE' => 'FAQ',
'TITLE' => 'Вопросы о товаре ' . $count_questions,
'VALUE' => 'FAQ_FORM'
);
$count_questions = count($processedQuestion);
// Сохраняем значение в кеше
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheTime = 3600; // Время жизни кеша (например, 1 час)
$cacheId = 'count_questions_faq_product'; // Уникальный идентификатор кеша
$cacheDir = '/form_faq_product/';
$cache->startDataCache($cacheTime, $cacheId, $cacheDir);
$cache->endDataCache(['COUNT_QUESTIONS' => $count_questions]);
// Получаем значение из кеша
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheId = 'count_questions_faq_product'; // Используем тот же идентификатор кеша
$cacheDir = '/form_faq_product/';
if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) {
$cachedData = $cache->getVars();
$count_questions = $cachedData['COUNT_QUESTIONS'];
} else {
$count_questions = 0; // Значение по умолчанию, если кеша нет
}
// Добавляем вкладку с количеством вопросов
$arResult['PROPERTIES']['TABS'][] = array(
'CODE' => 'FAQ',
'TITLE' => 'Вопросы о товаре ' . $count_questions,
'VALUE' => 'FAQ_FORM'
);
<!DOCTYPE html>
<html>
<head>
<title>Пример проверки элемента в DOM и применения стиля</title>
<style>
.highlight {
background-color: yellow;
font-weight: bold;
}
</style>
</head>
<body>
<div id="myElement">Это мой элемент</div>
<script>
// Проверяем наличие элемента с ID "myElement" в DOM
var element = document.getElementById("myElement");
// Если элемент найден, применяем к нему класс "highlight"
if (element) {
element.classList.add("highlight");
}
</script>
</body>
</html>
<script>
$(document).ready(function() {
let block = $('#rec779589211'),
longText = block.find($('.t-text')),
rowHeight = Math.round(parseInt(longText.css('line-height'),10)),
collapsedHeight = rowHeight * 1,
longTextClasses = longText.attr('class');
longText.readmore({
speed: 200,
collapsedHeight: collapsedHeight,
moreLink: '<a href="#read-more" class="' + longTextClasses + ' t-name read-more"><u>Подробнее</u></a>',
lessLink: '<a href="#read-less" class="' + longTextClasses + ' t-name read-less"><u>Скрыть</u></a>',
beforeToggle: function(trigger, element, expanded) {
if (!expanded) { // Перед сворачиванием
element.css('height', '');
let text = element.text();
let truncated = text.slice(0, text.lastIndexOf(' ', element.height() / rowHeight * 50)); // Примерное количество символов
element.html(truncated + '<span class="ellipsis">...</span>');
}
},
afterToggle: function(trigger, element, expanded) {
if (expanded) { // После разворачивания
element.html(element.data('originalText'));
}
}
});
longText.data('originalText', longText.html());
longText.readmore('toggle');
});
</script>
<style>
.read-more,
.read-less {
color: #342a23 !important;
font-size: 24px;
font-family: 'Lato', Arial, sans-serif;
font-weight: 700;
}
#rec779589211 .t-text {
margin-bottom: 10px;
text-align: justify;
position: relative;
overflow: hidden;
}
.ellipsis {
padding-left: 3px;
}
#rec779589211 .readmore-js-toggle {
margin-top: 10px;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Readmore.js/2.2.1/readmore.js"></script>
<script>
$(document).ready(function() {
let block = $('#rec779589211'),
longText = block.find($('.t-text')),
rowHeight = Math.round(parseInt(longText.css('line-height'),10)),
collapsedHeight = rowHeight * 1,
longTextClasses = longText.attr('class');
longText.readmore({
speed: 200,
collapsedHeight: collapsedHeight,
moreLink: '<a href="#read-more" class="' + longTextClasses + ' t-name read-more"><u>Подробнее</u></a>',
lessLink: '<a href="#read-less" class="' + longTextClasses + ' t-name read-less"><u>Скрыть</u></a>',
afterToggle: function(trigger, element, expanded) {
if(expanded) {
element.removeClass('collapsed');
} else {
element.addClass('collapsed');
}
}
});
// Добавляем класс collapsed изначально
longText.addClass('collapsed');
});
</script>
<style>
.read-more,
.read-less {
color: #342a23 !important;
font-size: 24px;
font-family: 'Lato', Arial, sans-serif;
font-weight: 700;
}
#rec779589211 .t-text {
margin-bottom: 10px;
text-align: justify;
}
#rec779589211 .t-text.collapsed {
position: relative;
overflow: hidden;
}
#rec779589211 .t-text.collapsed::after {
content: '...';
position: absolute;
bottom: 0;
right: 0;
padding-left: 3px;
background: white; /* Цвет фона, подберите под ваш дизайн */
}
</style>
# config/packages/verify_email.yaml
symfonycasts_verify_email:
lifetime: 360000 #
public function handleEmailConfirmation(Request $request, User $user): void
{
try {
$this->verifyEmailHelper->validateEmailConfirmationFromRequest($request, (string) $user->getId(), $user->getEmail());
} catch (VerifyEmailExceptionInterface $e) {
// Логируем детали исключения
$this->logger->error('Email verification failed: ' . $e->getReason(), [
'request_uri' => $request->getUri(),
'user_id' => $user->getId(),
'user_email' => $user->getEmail(),
]);
throw $e;
}
$user->setVerified(true);
$this->entityManager->persist($user);
$this->entityManager->flush();
}