admin — Odlord https://odlord.ru Персональный сайт веб-мастера Wed, 15 Apr 2026 11:20:29 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.9.4 https://odlord.ru/wp-content/uploads/2025/06/favicon.png admin — Odlord https://odlord.ru 32 32 Ошибки в админке Bitrix при установке на OpenServer 6.2 https://odlord.ru/2026/04/15/oshibki-v-adminke-bitrix-pri-ustanovke-na-openserver-6-2/ https://odlord.ru/2026/04/15/oshibki-v-adminke-bitrix-pri-ustanovke-na-openserver-6-2/#respond Wed, 15 Apr 2026 10:51:30 +0000 https://odlord.ru/?p=414 По адресу \OSPanel\home\project-name.local\.osp\apache создал project-name.local.conf с таким содержанием:

<LocationMatch "/\.(?!well-known)">
    Require all granted
</LocationMatch>

]]>
https://odlord.ru/2026/04/15/oshibki-v-adminke-bitrix-pri-ustanovke-na-openserver-6-2/feed/ 0
Bitrix. Ajax подгрузка элементов через «Показать еще» https://odlord.ru/2026/03/02/bitrix-ajax-podgruzka-elementov-cherez-pokazat-eshhe/ https://odlord.ru/2026/03/02/bitrix-ajax-podgruzka-elementov-cherez-pokazat-eshhe/#respond Mon, 02 Mar 2026 16:01:37 +0000 https://odlord.ru/?p=384 Подгрузка элементов через кастомный компонент с параметрами «offset» и «pageSize». Не через пагинацию.

Создаем компонент. В component.php:

$pageSize = !empty((int)$arParams['pageSize']) ? (int)$arParams['pageSize'] : 8;
$offset = !empty((int)$arParams['offset']) ? (int)$arParams['offset'] : 0;

$res = CIBlockElement::GetList(
    ["ID" => "ASC"],
    ["IBLOCK_ID" => 1, "ACTIVE" => "Y"],
    false,
    [
        "nTopCount" => $pageSize + 1,
        "nOffset" => $offset
    ],
    ["ID", "NAME"]
);
$count = 0;
while ($item = $res->GetNext()) {
    $count++;
    if ($count <= $pageSize) {
        $arResult['ITEMS'][] = $item;
    }
}
$arResult['HAS_MORE'] = ($count > $pageSize);

Для чего мы добавляем в $pageSize плюс один. Чтобы понять, нужно ли нам показывать кнопку «Показать еще», мы запрашиваем на один элемент больше.

В шаблоне «…/templates/.default/template.php» выводим элементы:

<div class="wrap_list_items">
    <div class="list_items">
        <?php foreach ($arResult['ITEMS'] as $item): ?>
            <div class="item"><?php echo $item['NAME']?></div>
        <?php endforeach; ?>
    </div>
    <?php if ($arResult['HAS_MORE']) : ?>
        <a class="link_more_cta" href="#" id="items_more_cta" data-offset="<?=((int)$arParams['offset']+(int)$arParams['pageSize']);?>" data-cnt="<?=(int)$arParams['pageSize']?>" data-url="/local/components/mycomp/news.list/ajax.php">Показать еще</a>
    <?php endif; ?>
</div>

В файле js «…/templates/.default/script.js»:

var load_more = false;
$(document).on("click", "#items_more_cta", function(e) {
    e.preventDefault();
    if (load_more)
        return false;
    load_more = true;
    $.ajax({
        url: $(this).attr('data-url'),
        type: "POST",
        data: {
            offset: $(this).attr('data-offset'),
            pageSize: $(this).attr('data-cnt')
        },
        success: function(data) {
            $('#items_more_cta').parent().remove();
            $('.wrap_list_items').append(data);
            load_more = false;
        }
    });
});

В файле ajax.php:

<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

/** @global CMain $APPLICATION */
define("NO_KEEP_STATISTIC", true);
define('PUBLIC_AJAX_MODE', true);
define("NOT_CHECK_PERMISSIONS", true);

use Bitrix\Main\Application,
    Bitrix\Main\Context;

$request = Context::getCurrent()->getRequest();
$POST = $request->getPostList()->toArray();

//$APPLICATION->ShowAjaxHead();

$APPLICATION->IncludeComponent(
    "mycomp:news.list",
    "",
    [
        "offset" => $POST['offset'],
        "pageSize" => $POST['pageSize'],
    ]
);

Это пример. В коде есть ошибки. Например этот ajax скрипт добавит в класс «wrap_list_items» еще один «wrap_list_items». Возможно стоит добавить параметр и завернуть код в шаблоне в:

if ($arParams["IS_AJAX"] == "Y") {
    	$APPLICATION->RestartBuffer();
}
// код
if ($arParams["IS_AJAX"] == "Y") {
    	die();
}

PS. А лучше всего использовать D7 и через «BX.ajax.runComponentAction»

]]>
https://odlord.ru/2026/03/02/bitrix-ajax-podgruzka-elementov-cherez-pokazat-eshhe/feed/ 0
Поездка на базу отдыха Оленья речка 6-8.02.2026 https://odlord.ru/2026/02/09/poezdka-na-bazu-otdyha-olenya-rechka/ https://odlord.ru/2026/02/09/poezdka-na-bazu-otdyha-olenya-rechka/#respond Mon, 09 Feb 2026 05:29:37 +0000 https://odlord.ru/?p=334

База отдыха Ергаки

]]>
https://odlord.ru/2026/02/09/poezdka-na-bazu-otdyha-olenya-rechka/feed/ 0
1CBitrix 403 Forbidden Access Denied https://odlord.ru/2026/01/20/1cbitrix-403-forbidden-access-denied/ https://odlord.ru/2026/01/20/1cbitrix-403-forbidden-access-denied/#respond Tue, 20 Jan 2026 05:00:28 +0000 https://odlord.ru/?p=325 При попытке входа в административную панель 1С Битрикс ваш_сайт/bitrix/admin возникает ошибка «403 Forbidden Access Denied».

Причина возникновения:

Ошибка возникает при наличии высталенных блокировок доступа в административную часть панели 1С Битрикс по IP-адресу или некорректной конфигурации модуля проактивной защиты 1С-Битрикс.

1. Перейти в директорию ./bitrix/modules/security/admin/

2. Найти файл security_403.php, скопировать и сохранить у себя содержимое.

3. Очистить содержимое security_403.php, применить изменения.

p.s. Данная процедура отключает контроль доступа в административную панель Вашего сайта и позволяет исправить ошибки системы проактивной защиты 1С-Битрикс.

4. Проверить доступ в административную часть CMS Bitrix Вашего сайта ваш_сайт/bitrix/admin

5. Административная часть должна открыться => далее перейти в «Настройки» => «Проактивная защита» => «Защита административного раздела».

6. Произведите настройку корректного списка IP-адресов, которым разрешен доступ к административной панели, либо полностью отключите проактивную защиту.

7. После изменения настроек необходимо обратно вернуть содержимое файла security_403.php.

 Стандартный вид файла security_403.php:

<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();?><?
CHTTP::SetStatus("403 Forbidden");
?>
<html>
	<head>
		<title>403 Forbidden</title>
	</head>
	<body>
		<h1>Forbidden</h1>
		Access denied.
	</body>
</html>
<?die();?>

]]>
https://odlord.ru/2026/01/20/1cbitrix-403-forbidden-access-denied/feed/ 0
Функция возврата окончания слова при склонении (PHP) https://odlord.ru/2025/09/08/funktsiya-vozvrata-okonchaniya-slova-pri-sklonenii/ https://odlord.ru/2025/09/08/funktsiya-vozvrata-okonchaniya-slova-pri-sklonenii/#respond Mon, 08 Sep 2025 14:14:42 +0000 https://odlord.ru/?p=291 // склонение слов после числительных // uni_declension($i, 'жена, жены, жён') function uni_declension($num, $str) { $exp = explode(',', $str); $num = (($num < 0) ? $num-$num*2 : $num)%100; $dig = ($num > 20) ? $num%10 : $num; return trim((($dig == 1) ? $exp[0] : (($dig > 4 || $dig < 1) ? $exp[2] : $exp[1]))); } Вариант из ядра битрикс:
use Bitrix\Main\Grid\Declension;
$yearDeclension = new Declension('год', 'года', 'лет');
$yearDeclension->get($year);
]]>
https://odlord.ru/2025/09/08/funktsiya-vozvrata-okonchaniya-slova-pri-sklonenii/feed/ 0
Настройка PHPStorm под работу с удаленным сервером без гита, используя гит локально https://odlord.ru/2025/09/03/nastrojka-phpstorm-pod-rabotu-s-udalennym-serverom-bez-gita-ispolzuya-git-lokalno/ https://odlord.ru/2025/09/03/nastrojka-phpstorm-pod-rabotu-s-udalennym-serverom-bez-gita-ispolzuya-git-lokalno/#respond Tue, 02 Sep 2025 17:33:48 +0000 https://odlord.ru/?p=282 Есть сайт без git, с которым периодически необходимо работать. Но с ним еще работают другие программисты. Мне нужно сохранять свои изменения и при этом не удалять, сохранять чужие.

Мы хотим работать, как нормальные люди, с использованием гита. Хотя бы локально.

Как я настроил phpstorm:

Создаем новый проект. В настройках создаем ftp (sftp) соединение:

Заполняем стандартные поля для соединения. Тестируем «Test Connection».
В «Root path» проставляем путь до директории сайта, например «/www/mydomen.ru».
Ставим галку отображения скрытых файлов.
Во вкладке «Mappings» в параметре «Deployment path» ставим «/» и сохраняем.

Если в «Root path» путь правильный, то в «Browse Remote Host» все папки и файлы отобразятся зеленым.

Теперь мы можем скачивать себе файлы с сервера и работать с ними локально, используя git.

Для отправки их на сервер нажимаем «Ctrl»+»Alt»+»Shift»+»x» и выбираем наш сервер. Или правой клавишей мыши и выбираем «Deployment» -> «Upload to myserver».

Но! Нам важно, чтобы при открытии файлов через какое-то время, проверялись изменения файлов с удаленным сервером. Иначе мы будем затирать все изменения, которые были добавлены другими разработчиками. Для этого заходим в настройки:

В параметре «Warn when uploading over newer file» (Предупреждать при загрузке поверх более нового файла) ставим «Compare content» (Сравнение содержимого). И ставим галку «Notify of remote changes» (Уведомлять об удаленных изменениях).

Теперь если мы откроем файл, а он был изменен на сервере, мы получим уведомление:

Нажимаем «Download» и он загрузится к нам.

P.S.
Эти телодвижения все равно не гарантируют того, что мы с некоторой вероятностью не затрем чужие наработки. Но хоть чуточку упрощают жизнь и позволяют отлеживать с помощью гит историю изменений скриптов, если с проектом приходится работать достаточно долго.

]]>
https://odlord.ru/2025/09/03/nastrojka-phpstorm-pod-rabotu-s-udalennym-serverom-bez-gita-ispolzuya-git-lokalno/feed/ 0
Этапы создания сайта https://odlord.ru/2025/07/31/etapy-sozdaniya-sajta/ https://odlord.ru/2025/07/31/etapy-sozdaniya-sajta/#respond Thu, 31 Jul 2025 05:28:21 +0000 https://odlord.ru/?p=264 Перед разработкой сайта необходимо обговорить все этапы

1. Планирование и подготовка

  • Определение целей сайта: для чего он нужен (продажи, блог, портфолио и т.д.).
  • Анализ целевой аудитории.
  • Формирование структуры (сайт-карта): какие страницы будут (главная, о нас, контакты и т.д.).
  • Выбор платформы/технологий: CMS (WordPress, Joomla), фреймворк (React, Django), или ручная верстка (HTML/CSS/JS).

2. Проектирование (UX/UI дизайн)

  • Создание прототипов (wireframes) — наброски макетов страниц.
  • Разработка дизайна: цветовая палитра, шрифты, иконки, логотип.
  • Интерактивный макет (опционально) — с помощью Figma, Adobe XD или аналогов.

3. Верстка и разработка

  • HTML/CSS верстка: создание структуры и стилей страниц.
  • JavaScript: добавление интерактивности.
  • Бэкенд (если нужен): серверная логика, база данных (например, на PHP, Node.js, Python).
  • Интеграция с CMS или фреймворком (если используется).

4. Контент

  • Наполнение сайта текстом, изображениями, видео и т.д.
  • SEO-оптимизация: заголовки, мета-теги, alt-теги, структура URL и др.

5. Тестирование

  • Кроссбраузерность: корректное отображение в разных браузерах.
  • Адаптивность: работа на мобильных устройствах.
  • Проверка форм, скриптов, ссылок.
  • Тестирование скорости загрузки.

6. Размещение (деплой)

  • Выбор хостинга и регистрация домена.
  • Загрузка сайта на сервер (через FTP, Git или панель хостинга).
  • Настройка базы данных, SSL-сертификата, почты и т.д.

7. Поддержка и развитие

  • Обновление контента.
  • Мониторинг ошибок и исправление багов.
  • Улучшение SEO, внедрение аналитики (Google Analytics, Yandex Metrika).
  • Разработка новых функций по мере необходимости.

Клиенту не нужно знать все технические детали, но ему полезно понимать общую структуру процесса.

Зачем клиенту знать этапы создания сайта:

Контроль и прозрачность

  • Клиент понимает, на каком этапе сейчас проект.
  • Может адекватно оценивать сроки и прогресс.
  • Легче выявить задержки или проблемы.

Ожидания = Реальность

  • Снижается риск недопонимания (например, «а я думал, что вы и тексты напишете», или «а почему это не адаптивно?»).
  • Четко разграничивается, что входит в услугу, а что — дополнительно.

Вовлеченность

  • На некоторых этапах клиенту нужно участвовать: предоставить контент, утвердить макет, протестировать.
  • Если он понимает свою роль — работа идет быстрее и без конфликтов.

Финансовое планирование

  • Поэтапная оплата понятна и оправдана.
  • Можно заранее определить, какие функции критичны, а что можно отложить.

Долгосрочная поддержка

  • Клиент лучше понимает, что сайт требует обслуживания и обновлений — это не «сделал и забыл».

Как это преподносить клиенту достаточно показать простую схему:

Сайт создается в 5 этапов:

  1. Обсуждаем цели и структуру
  2. Делаем дизайн
  3. Верстаем и программируем
  4. Наполняем контентом
  5. Публикуем и запускаем
]]>
https://odlord.ru/2025/07/31/etapy-sozdaniya-sajta/feed/ 0
Тропа предков 27.07.2025 https://odlord.ru/2025/07/30/tropa-predkov-27-07-2025/ https://odlord.ru/2025/07/30/tropa-predkov-27-07-2025/#respond Wed, 30 Jul 2025 09:45:59 +0000 https://odlord.ru/?p=239

]]>
https://odlord.ru/2025/07/30/tropa-predkov-27-07-2025/feed/ 0
Ханкуль 29.06.2025 https://odlord.ru/2025/06/30/hankul/ https://odlord.ru/2025/06/30/hankul/#respond Mon, 30 Jun 2025 13:51:20 +0000 https://odlord.ru/?p=109 ]]> https://odlord.ru/2025/06/30/hankul/feed/ 0 Поездка на озеро Ханкуль 21.06.2025 https://odlord.ru/2025/06/22/poezdka-na-ozero-hankul/ https://odlord.ru/2025/06/22/poezdka-na-ozero-hankul/#respond Sun, 22 Jun 2025 08:56:49 +0000 https://odlord.ru/?p=68 Спонтанная поездка.

]]>
https://odlord.ru/2025/06/22/poezdka-na-ozero-hankul/feed/ 0