header

content

Футуристическая анимированная кнопка
Футуристическая анимированная кнопка
<div class="wrapper">
    <button class="button1">
        <i></i><i></i>
        <span>button</span>
    </button>
</div>
<script>
    let btn = document.querySelector('button');
    btn.addEventListener('mousemove', e => {
        let rect = e.target.getBoundingClientRect();
        let x = e.clientX *2 - rect.left;
        btn.style.setProperty('--x', x + 'deg');
    })
</script>
:root{--x: 45deg;}
.button1{position:relative;width:150px;height:55px;border-radius:5px;background:transparent;cursor:pointer;}
.button1 i{position:absolute;inset:-2px;display:block;border-radius:5px;}
.button1 i, .button1 i:nth-child(2){background:linear-gradient(var(--x),#00ccff,#0e1538,#0e1538,#d400d4);}
.button1 i:nth-child(2){filter:blur(10px);}

.button1 span{
position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;
display:flex;justify-content:center; align-items:center;
text-transform:uppercase;color:#fff;letter-spacing:2px;
border:1px solid #040a29;border-radius:3px; background:rgba(14,21,56,.65);
}
Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений
Ошибка! Есть ошибки при отправке системных почтовых сообщений, число неотправленных сообщений
// очистить очередь неотправленных писем:
DELETE FROM b_event WHERE DATE_EXEC <> "Y";

// или очистить всю таблицу:
DELETE FROM b_event;
Формирование значений value для полей в Умном фильтре
Формирование значений value для полей в Умном фильтре
abs(crc32("Значение поля"))

Для поля "Дата и Время" использовать только дату
$date_time = $item['PROPERTIES']['DATETIME']['VALUE'];
$arDatetime = explode(' ', $date_time);
$field_val =  abs(crc32($arDatetime[0]));

/*
DATETIME - название пользовательского поля для времени и даты
444 - id пользовательского поля DATETIME
$field_val - результат преобразования значения поля в формат умного фильтра

14.12.2025 10:20:00  ----->     122141703

Ссылка на страницу с фильтром, отфильтрованная по дате:

/путь/?set_filter=y&arrFilter_444=<? echo $field_val; ?>
*/
Убрать внешнюю обертку у компонентов
Убрать внешнюю обертку у компонентов
При вызове компонента пятым параметром добавить array('HIDE_ICONS'=>'Y')
<?$APPLICATION->IncludeComponent(
    "компонент",
    "шаблон",
    [параметры],
    false,
    array('HIDE_ICONS'=>'Y')
);?>
[LICENSE_NOT_FOUND] «Лицензия не найдена»
[LICENSE_NOT_FOUND] «Лицензия не найдена»
«Настройки» > «Настройки продукта» > «Настройки модулей»

«Система обновлений»

«Адрес сервера обновлений»: заменить bitrixsoft.com на 1c-bitrix.ru
Видео из Rutube по ссылке
php (php)
Видео из Rutube по ссылке
<?
$rutube_url = 'https://rutube.ru/video/ebdba2ad5128d00a2b04582425b5df36/'; // ссылка на страницу с видео
$file_id = preg_replace("#https://rutube\.ru/video/([a-f0-9]+)/?#is", "\$1", $rutube_url);  
?>

<div class="bg_rutube_videoContainer">
     <iframe class="bg_rutube_video" src="https://rutube.ru/video/embed/<? echo $file_id; ?>" allowfullscreen frameborder="0">
     </iframe>
</div>
Склонение чисел
php (php)
Склонение чисел
<?php
// некоторые варианты окончаний м/ж/с рода
$arNum1 = array( '0' => '', '1' => '', '2' => 'а', '3' => 'а', '4' => 'а', '5' => '', '6' => '', '7' => '', '8' => '', '9' => '', );
$arNum2 = array( '0' => 'ок', '1' => 'ка', '2' => 'ки', '3' => 'ки', '4' => 'ки', '5' => 'ок', '6' => 'ок', '7' => 'ок', '8' => 'ок', '9' => 'ок', );
$arNum3 = array( '0' => 'й', '1' => 'е', '2' => 'я', '3' => 'я', '4' => 'я', '5' => 'й', '6' => 'й', '7' => 'й', '8' => 'й', '9' => 'й', );
?>

<?php
$count = 23421342; // пример
?>

<?php
$last_letter = '';
$last_num = substr($count, -1); // получаем последнюю цифру числа
if(isset($last_num) && $last_num){$last_letter = $arNum3[$last_num]; }
?>


<?php echo $count; ?> предложени<?php echo $last_letter; ?>
Преобразуем ссылки в текст
php (php)
Преобразуем ссылки в текст
$content =  preg_replace("#<a href=[^>]*.(.*?)<\/a>#is", "\$1", $content);
Менять прозрачность фона при прокрутке страницы
Менять прозрачность фона при прокрутке страницы
<div  class="opacity_bg">

</div>

<script>
    window.addEventListener('scroll', function() {
        const scrolled = window.pageYOffset;
        const background = document.querySelector('.opacity_bg');
        background.style.backgroundPositionY = -(scrolled * 0.1) + 'px';

        // Изменяем прозрачность в зависимости от прокрутки
        const maxScroll = document.body.scrollHeight - window.innerHeight;
        const opacity = 1 - (scrolled / maxScroll);
        background.style.opacity = opacity;
    });
</script>
body{background:#fff;}
.opacity_bg{height:1000vh;background:#000;}
Показать/скрыть длинный текст
Показать/скрыть длинный текст
Текст размещен в блоке с классом ".readmore_item". Изначально блоку присвоен добавочный класс ".closed" для управления отображением через css.

".readmore_item.closed" стилями ограничен по высоте (75px), видимость ограничена по высоте.
Псевдокласс ":after" добавлен для декоративного скрытия нижней части блока с текстом градиентным фоном (от прозрачного к белому)

В скрипте при клике по элементу с классом ".readmore_button": 
- ищем внутри его родительского блока текстовый блок с классом ".readmore_item". Добавляем (если нет) или удаляем (если есть) класс ".closed".
- кнопке ".readmore_button" добавляем (если нет) или удаляем (если есть) класс ".opened".
- в зависимости от наличия у ".readmore_button" класса ".opened" меняем текст на кнопке.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<div class="item">
    <div class="readmore_item closed">
        Длинный текст
    </div>
    <button class="readmore_button">
        Подробнее
    </button>
</div>

<script>
jQuery(document).ready(function($){
    $(".readmore_button").on("click", function(){
        $(this).parent().find(".readmore_item").toggleClass("closed");
        $(this).toggleClass("opened");
        if( $(this).hasClass("opened") ) { $(this).text("Скрыть"); } else { $(this).text("Подробнее"); }

    });
});
</script>
.readmore_item.closed{
position:relative;
height:75px;
overflow-y:hidden;
}

.readmore_item.closed:after{
content:'';
position:absolute;
height:60px;
bottom:0;
left:0;
right:0;
background:linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%)
}

.readmore_item{
height:100%;
}
Анимированный счетчик
Анимированный счетчик
Декоративный счетчик прокрутки числовых данных в заданных пределах.

Используется jquery-модуль jquery.countTo.js

Параметры:
data-from - начало отсчета
data-to - окончание отсчета
data-speed - скорость прокрутки
data-refresh-interval - интервал обновления

Блокам счетчика задать класс, указанный в настройках скрипта (.timer)
<div class="timer" data-to="444" data-speed="10000"></div>
<div class="timer" data-from="20" data-to="150" data-speed="5000" data-refresh-interval="300"></div>

<script src="jquery.countTo.js"></script>

<script type="text/javascript">
    jQuery(function ($) {
      $('.timer').each(count);
    });

      function count(options) {
        var $this = $(this);
        options = $.extend({}, options || {}, $this.data('countToOptions') || {});
        $this.countTo(options);
      }
</script>
Ошибка "Не удалось внести информацию о вложении в базу данных"
Ошибка "Не удалось внести информацию о вложении в базу данных"
Возможно, не включен Auto Increment для поля ID в таблице wp_posts базы данных.
phpQuery
php (php)
phpQuery

include_once(__DIR__ . '/cclassparser.php'); // подключаем парсер

$donor_url = 'https://site.com'; // ссылка на страницу парсинга

$arHtml = Parser::getPage(["url" => $donor_url]);
$content = $arHtml["data"]["content"];

include_once(__DIR__ . '/phpQuery.php'); // подключаем phpQuery
$mainpage = phpQuery::newDocument($content);

$page_h1 = $mainpage->find('h1');
$page_h1->find('a')->remove(); // удалить ссылки из заголовка
$h1 = $page_h1->text();

Фоновое изображение

Элемент на странице:
<div class="photo" style="background-image: url(https://site.com/image.jpg);"></div>

Действие:
$img_item = $mainpage->find('.photo');
$str = $img_item->attr('style');
preg_match("(background-image: url\((.+)\))", $str, $result);
$ar_img = $result;

Результат:
$ar_img => Array
(
[0] => background-image: url(https://site.com/image.jpg)
[1] => https://site.com/image.jpg
)
Отключить управление активностью разделов при обмене с 1С
Отключить управление активностью разделов при обмене с 1С
в файл init.php
AddEventHandler("iblock", "OnBeforeIBlockSectionUpdate", "skipSectionActivity_If1C");

// не управляем активностью раздела при обмене товарами с 1С
function skipSectionActivity_If1C(&$arParams){
    
    if( $_SERVER["SCRIPT_NAME"] == '/bitrix/admin/1c_exchange.php')
    unset($arParams["ACTIVE"]);

}
Плавная прокрутка к якорю
Плавная прокрутка к якорю
$("body").on('click', '[href*="#"]', function(e){
    var fixed_offset = 100;
    $('html,body').stop().animate({ scrollTop: $(this.hash).offset().top - fixed_offset }, 1000);
    e.preventDefault();
});
Заголовки в компоненте NEWS
Заголовки в компоненте NEWS
1. В шаблоне:
<?$APPLICATION->ShowTitle();?>
bitrix:news.list:
"SET_TITLE" => "N" - Заголовок из свойств страницы
"SET_TITLE" => "Y" - Заголовок из свойств страницы

bitrix:news.detail:
"SET_TITLE" => "N" - Заголовок из свойств страницы
"SET_TITLE" => "Y" - Заголовок из свойств страницы


2. В шаблоне:
<?$APPLICATION->ShowTitle(false);?>
bitrix:news.list:
"SET_TITLE" => "N" - Заголовок из свойств страницы
"SET_TITLE" => "Y" - Заголовок из названия инфоблока

bitrix:news.detail:
"SET_TITLE" => "N" - Заголовок из свойств страницы
"SET_TITLE" => "Y" - Заголовок из названия элемента


Как средствами php удалить внутреннюю ссылку VK
vk (vk)
Как средствами php удалить внутреннюю ссылку VK

Подскажите как удалить и из текста:

"Какой то текст [club112773578|+ Подпишись] далее еще текст какой-то..."

средствами php [club112773578|+ Подпишись] вот эту ссылку? от [ и до ] включительно

************************************************************************************************************
Используйте регулярные выражения:
$text = "Какой то текст [club112773578|+ Подпишись] далее еще текст какой-то...";
$text = preg_replace('/\[(club|public|id)\d*\|.*\]/', '', $text);
//Удалить все в квадратных скобках:
//$text = preg_replace('/\[.*\]/', '', $text); 
echo $text; // Какой то текст далее еще текст какой-то...
************************************************************************************************************
там может быть club, public, id вот именно удаление начинается с [ заканчивается ]
************************************************************************************************************ 
$text = "Какой то текст [club112773578|+ Подпишись] далее еще текст какой-то...";
$text = preg_replace('/\[.*\|.*\]/', '', $text);
echo $text; // Какой то текст далее еще текст какой-то...
************************************************************************************************************ 
Удалить все ссылки с club, public, id:
$text = preg_replace('/\[(club|public|id)\d*\|.*\]/', '', $text);

Удалить весь текст в квадратных скобках:
$text = preg_replace('/\[.*\]/', '', $text);
Сделать картинки ссылками
Сделать картинки ссылками
Берутся все изображения с классом "foto", размещенные внутри блока с классом "contentblock". 
.contentblock ограничивает использование только вложенных в него изображений, отсеивая элементы оформления сайта и из других блоков.
.foto - класс, назначаемый фотографиям при загрузке, для фильтрации. Можно убрать из скрипта, если среди фотографий нет лишних графических элементов.

Скрипт под fancybox. Атрибут "title" фотографии используется для описания. Класс "fancy_image" добавлен для возможности визуального оформления миниатюр на странице.
jQuery(document).ready(function($){
    $(".contentblock img.foto").each(function() {
        var item_image_title = $(this).attr('title');
        $(this).wrap('<a href="' + this.src + '" data-fancybox="group" data-caption="' + item_image_title + '" class="fancy_image"></a>');
    });
});
Иконка WhatsApp (svg)
Иконка WhatsApp (svg)
<svg x="0px" y="0px" width="30" height="30" viewBox="0 0 172 172"
style=" fill:#339900;"><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g fill="#2ecc71"><path d="M86,6.88c-43.62608,0 -79.12,35.49392 -79.12,79.12c0,13.6224 3.51912,27.01776 10.19272,38.8376l-10.06544,35.9136c-0.33024,1.17992 -0.01032,2.44584 0.8428,3.32304c0.65704,0.67768 1.55144,1.04576 2.46992,1.04576c0.2752,0 0.55384,-0.0344 0.8256,-0.09976l37.48224,-9.28456c11.44488,6.14384 24.33456,9.38432 37.37216,9.38432c43.62608,0 79.12,-35.49392 79.12,-79.12c0,-43.62608 -35.49392,-79.12 -79.12,-79.12zM125.8008,113.91904c-1.69248,4.68528 -9.81088,8.9612 -13.71184,9.53568c-3.50192,0.51256 -7.93264,0.73272 -12.7968,-0.79464c-2.94808,-0.9288 -6.73208,-2.16032 -11.57904,-4.22776c-20.37512,-8.68944 -33.68104,-28.9476 -34.69928,-30.28576c-1.0148,-1.33816 -8.29384,-10.87384 -8.29384,-20.7432c0,-9.86936 5.246,-14.7232 7.11048,-16.73216c1.86448,-2.00896 4.06264,-2.5112 5.418,-2.5112c1.35536,0 2.70728,0.0172 3.89408,0.07224c1.24872,0.06192 2.924,-0.47128 4.57176,3.44344c1.69248,4.01792 5.75512,13.88728 6.25736,14.8952c0.50912,1.00448 0.84624,2.17752 0.172,3.51568c-0.67424,1.33816 -1.01136,2.17408 -2.0296,3.34712c-1.01824,1.17304 -2.1328,2.6144 -3.04784,3.51568c-1.01824,1.00104 -2.07432,2.08464 -0.89096,4.0936c1.18336,2.00896 5.25976,8.57592 11.3004,13.89416c7.7572,6.83184 14.30352,8.95088 16.33312,9.95536c2.0296,1.00448 3.2164,0.83592 4.39976,-0.50224c1.18336,-1.3416 5.07744,-5.85832 6.42936,-7.86384c1.35192,-2.00552 2.70728,-1.67528 4.57176,-1.00448c1.86448,0.66736 11.8508,5.51776 13.8804,6.52224c2.0296,1.00448 3.38496,1.50672 3.89408,2.34264c0.50912,0.83248 0.50912,4.8504 -1.18336,9.53224z"></path></g></g></svg>
Ссылки с сайта
Ссылки с сайта

Открыть чат, работает только по имени пользователя:

<a href="tg://resolve?domain=имя_пользователя">Telegram</a>

или

<a href="https://t.me/имя_пользователя">Telegram</a>

Приглашение в групповой чат по инвайту:

<a href="tg://join?invite=id_группы">Telegram</a>
Ссылки с сайта
Ссылки с сайта

Открыть чат с номером:

<a href="whatsapp://send?phone=+7903xxxxxxx">WhatsApp</a>

или

<a target="_blank" href="https://wa.me/+7903xxxxxxx">WhatsApp</a>

Открыть чат с номером и написать сообщение:

<a href="whatsapp://send?phone=+7903xxxxxxx&text=Hello world!">WhatsApp</a>

Поделится текстом, в приложение откроется список контактов для отправки:

<a href="whatsapp://send?text=Hello world!">WhatsApp</a>
Warning: Trying to access array offset on value of type bool
Warning: Trying to access array offset on value of type bool
$id_block_projects = $el["IBLOCK_ID"];

изменить на:

$id_block_projects = (is_array($el) ? $el["IBLOCK_ID"] : NULL);
[Error] Call to undefined function each() (0) /***/bitrix/modules/statistic/classes/general/statistic.php:782
[Error] Call to undefined function each() (0) /***/bitrix/modules/statistic/classes/general/statistic.php:782
При обновлении не обновился системный модуль "statistic".

В указанном файле 782-ю строку:

list(,$value) = each($arrADV);

заменить на:

$value = reset($arrADV);
call_user_func_array(): Argument #1 ($function) must be a valid callback, non-static method НазваниеМодуля::МетодКласса() cannot be called statically (0)
call_user_func_array(): Argument #1 ($function) must be a valid callback, non-static method НазваниеМодуля::МетодКласса() cannot be called statically (0)
Необходимо найти код данного модуля по следующему пути (/bitrix/modules/название.модуля), определиться с классом в котором возникает данная ошибка и к данному классу приписать служебное слово static, примерно так:

static function МетодКласса()
[Ux11] Ошибка описания модуля "название.модуля"
[Ux11] Ошибка описания модуля "название.модуля"
Не установлено соединение с сервером обновлений. [Ux11] Ошибка описания модуля "название.модуля"

При возникновении данной ошибки нужно либо обновить модуль до последней версии, либо в файле /bitrix/modules/название.модуля/install/index.php заменить название функции function название_модуля() на function __construct() После этого ошибка должна уйти
Argument #1 ($value) must be of type Countable|array, null given (0)
Argument #1 ($value) must be of type Countable|array, null given (0)
Данная ошибка характерна, например, для функций count(), sort(), ksort() и подобных.

В битриксе можно часто встретить подобный код, которым разработчики проверяли наличие элементов в массиве и, в зависимости от результата, выполняли какое либо действие:

if (count($arResult["ITEMS"]) > 0) {}
или
if (count($arResult["ITEMS"])) {}

Ранее данная конструкция нам возвращала false и в случае если $arResult["ITEMS"] === Array(), и в случае если $arResult["ITEMS"] неопределен. Теперь же возникнет ошибка, если $arResult["ITEMS"] не определен или его значение не может быть "посчитано", например если значение типа Integer

Быстро исправить данную ошибку можно следующим образом:

if (is_countable($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)
Или
if (is_array($arResult["ITEMS"]) && count($arResult["ITEMS"]) > 0)

Главная суть в том, что переменная, передаваемая в функцию count() должна существовать, быть определена и иметь тип, который может быть "посчитан", например Array

Для быстрого решения этой ошибки в функциях сортировки sort(), ksort() и т.д. можно использовать следующий код:

if (is_array($arResult["ITEMS"])) sort($arResult["ITEMS"]);

А так же возможен вариант явного приведения переменной к необходимому типу:

$arResult["ITEMS"] = (array)$arResult["ITEMS"];
Или
sort((array)$arResult["ITEMS"]);


Но в данном случае нужно понимать, что изначальное значение типа null, boolean, integer будет приведено к типу Array, что не всегда правильно для дальнейшего выполнения кода
PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported
PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported
возникает в среде PHP 8 и выше из-за изменения синтаксиса доступа к элементам массива. Теперь для этого допускается использовать только квадратные скобки.

Чтобы исправить ошибку, нужно заменить фигурные скобки { } на квадратные скобки [ ] в коде, где используется доступ к массиву с помощью фигурных скобок.

Например:

$string = $chars{rand(0, $chars_length)};

изменить:

$string = $chars[rand(0, $chars_length)];


//////////////////////////////
Другой вариант:

Array and string offset access syntax with curly braces is no longer supported

$url{0}

изменить:

substr($url, 0, 1)
Unknown collation: 'utf8mb4_0900_ai_ci'
Unknown collation: 'utf8mb4_0900_ai_ci'

Некоторые причины возникновения ошибки:

  • Использование устаревшей версии MySQL. Сортировка utf8mb4_0900_ai_ci была введена в MySQL 8.0, более ранние версии её не поддерживают.
  • Импорт базы данных. Если пытаться импортировать базу данных, созданную в MySQL 8.0, в более раннюю версию, возникнет эта ошибка.
  • Неверные настройки хостинга. Некоторые хостинг-провайдеры могут использовать старые версии MySQL или неправильно настроить сервер.
Решение проблемы:

Если вы используете SQL-запросы, убедитесь, что не задействуете utf8mb4_0900_ai_ci. Замените её на utf8mb4_general_ci или utf8mb4_unicode_ci.
Правится заменой в текстовом редакторе.

*****************************************************

Далее может появиться другая ошибка:
#1071 - Указанный ключ был слишком длинным; максимальная длина ключа составляет 767 байт

Замечено при экспорте базы данных Битрикса после изменения utf8mb4_0900_ai_ci на utf8mb4_general_ci.
Помогла замена всех вхождений utf8mb4 на utf8
Размещение отдельной записи
Размещение отдельной записи
<?php
$args = array(
    'p' => 59, // ID нужной записи
    'post_type' => 'post', // Тип записи
    'post_status' => 'publish' // Статус
);
$query = new WP_Query($args);
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_content();
    }
    wp_reset_postdata();
}                
?>
Размещение записей из рубрики
Размещение записей из рубрики
<?php
    $id=4; // Идентификатор нужной рубрики
    $n=8;  // Количество выводимых записей
    $orderby = 'id'; // Индекс сортировки
    $order = 'ASC'; // Порядок сортировки
      
    $recent = new WP_Query("cat=$id&showposts=$n&orderby=$orderby&order=$order"); //Запрашиваем нужные записи
    while($recent->have_posts()) : $recent->the_post(); //Если они есть, то выводим в цикле
?>

        <?php the_title(); // Заголовок записи ?>
        <?php the_post_thumbnail(); // Изображение записи ?>

<?php endwhile; //Конец цикла вывода ?>

Новости 1 - 30 из 52
Начало | Пред. | 1 2 | След. | Конец