Кастомный ползунок для выбора цены на jQuery UI

$(function() {
    // Инициализация слайдера
    $("#slider-range").slider({
        range: true,
        min: 0,
        max: 500,
        values: [0, 500],
        slide: function(event, ui) {
            updatePriceInputs(ui.values[0], ui.values[1]);
        },
        change: function(event, ui) {
            updatePriceInputs(ui.values[0], ui.values[1]);
        }
    });

    // Функция для обновления полей ввода
    function updatePriceInputs(minVal, maxVal) {
        $(".input_price_min").val(minVal).trigger('change');
        $(".input_price_max").val(maxVal).trigger('change');
    }

    // Обработчики для ручного ввода значений
    $(".input_price_min").on('input', function() {
        var currentValues = $("#slider-range").slider("values");
        var newMin = Math.min($(this).val(), currentValues[1]);
        $("#slider-range").slider("values", 0, newMin);
    });

    $(".input_price_max").on('input', function() {
        var currentValues = $("#slider-range").slider("values");
        var newMax = Math.max($(this).val(), currentValues[0]);
        $("#slider-range").slider("values", 1, newMax);
    });

    // Инициализация начальных значений
    updatePriceInputs(
        $("#slider-range").slider("values", 0),
        $("#slider-range").slider("values", 1)
    );
});

 

Яндекс.Карта через API со стандартными иконками

<script>
    initMap();

    async function initMap() {

        await ymaps3.ready;

        ymaps3.import.registerCdn('https://cdn.jsdelivr.net/npm/{package}', [
            '@yandex/ymaps3-default-ui-theme@latest'
        ]);

        const {
            YMap,
            YMapDefaultSchemeLayer,
            YMapDefaultFeaturesLayer,
        } = ymaps3;

        // Иницилиазируем карту
        const map = new YMap(
            // Передаём ссылку на HTMLElement контейнера
            document.getElementById('map'),

            // Передаём параметры инициализации карты
            {
                location: {
                    // Координаты центра карты
                    center: [<?php normalizeMapPoint(get_field('map_center', 'option')); ?>],
                    // Уровень масштабирования
                    zoom: <?php the_field('map_zoom', 'option'); ?>
                }
            }
        );

        map.addChild(new YMapDefaultSchemeLayer());
        map.addChild(new YMapDefaultFeaturesLayer());

        const {
            YMapDefaultMarker
        } = await ymaps3.import('@yandex/ymaps3-default-ui-theme');

        // Добавляем слой для отображения схематической карты


        <?php while (have_rows('map', 'option')):
            the_row(); ?>
            map.addChild(new YMapDefaultMarker({
                coordinates: [<?php normalizeMapPoint(get_sub_field('koordinaty', 'option')); ?>],
                title: '<?php translateSubAcf('title', 'title_en', false); ?>',
                subtitle: '<?php translateSubAcf('text', 'text_en', false); ?>',
                color: ['#173F35'],
                draggable: false
            }));
        <?php endwhile; ?>


    }
</script>

 

Шпаргалка по WP_Query

<?php $args = [
   'post_type' => 'product', // Тип записи "товар" (WooCommerce)
   'post_status' => 'publish',
   'posts_per_page' => -1,
];

$products_query = new WP_Query($args);

if ($products_query->have_posts()) {
   while ($products_query->have_posts()) {
      $products_query->the_post();
      wc_get_template_part('content', 'product');
}
  } else { ?>
 <p class="filter-description">Товары с такими характеристиками отсутствуют. Попробуйте изменить ваш
                                запрос</p>
<?php } ?>

 

Основные функции ORM Bitrix D7

В папке /local/php_interface/lib/ClassName.php создаем экземпляр таблицы

<?php

namespace xgerasim;

use Bitrix\Main\Entity;

class ExampleTable extends Entity\DataManager
{
    // название таблицы
    public static function getTableName()
    {
        return 'example_table';
    }

    // колонки таблицы

    public static function getMap()
    {
        return [
            new Entity\IntegerField('ID', [
                'primary' => true,
                'autocomplete' => true
            ]),
            new Entity\IntegerField('DEAL', [
                'required' => true
            ]),
            new Entity\IntegerField('PRODUCT', [
                'required' => true
            ]),
            new Entity\IntegerField('QUANTITY', [
                'required' => true
            ]),
            new Entity\IntegerField('CUSTOM_PRICE', [
                'required' => true
            ]),
        ];
    }
}

Далее нужно зарегистрировать класс, добавили его в событие registerAutoLoadClasses

В папку /local/php_interface/autoload.php регистрируем класс

 

<?php

Bitrix\Main\Loader::registerAutoLoadClasses(null, [
    'xgerasim\ExampleTable' => '/local/php_interface/lib/ClassName.php',
]);

В init.php не забываем добавить этот файл в загрузку

require_once($_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/autoload.php');

Использование класса

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

use xgerasim\ExampleTable;

// создаем таблицу, если ее нет

if (!ExampleTable::getEntity()->getConnection()->isTableExists(ExampleTable::getTableName())) {
    ExampleTable::getEntity()->createDbTable();
}


// удаляем таблицу

// ExampleTable::getEntity()->getConnection()->dropTable('example_table');


// Выборка элементов таблицы как массива

 $exampleElems = ExampleTable::getList([
    'select' => ['ID', 'DEAL', 'PRODUCT', 'CUSTOM_PRICE'],
    'filter' => ['DEAL' => $dealID, 'PRODUCT' => $productId],
 ])->fetchAll();

Добавляем новый элемент

$result = ExampleTable::add([
        'DEAL_ID' => $dealID,
        'VID_RABOT' => 'Пустая строчка',
    ]);

    if ($result->isSuccess()) {
        $success[] = 'Добавлена новая строчка ' . $action;
    }

Редактируем элемент

$result = ExampleTable::update($exampleElems[0]['ID'], ['DEAL_ID' => '555']);

 

Функция парсинга JSON из 1С

function parseStructure($data)
{
    $result = [];

    if (isset($data['#type']) && $data['#type'] === 'jv8:Structure') {
        $structure = $data['#value'];
        foreach ($structure as $element) {
            $key = $element['name']['#value'];
            $value = $element['Value'];

            if ($value['#type'] === 'jv8:Structure') {
                $result[$key] = parseStructure($value);
            } elseif ($value['#type'] === 'jv8:Array') {
                $result[$key] = array_map('parseStructure', $value['#value']);
            } else {
                $result[$key] = $value['#value'];
            }
        }
    }

    return $result;
}

 

Функция BX.ajax

BX.ajax({
                url: 'php-handler.php', // URL обработчика на сервере
                method: 'POST',
                dataType: 'json',
                timeout: 10,
                data: {
                    dealID: <?= $dealID; ?>,
                },
                onsuccess: function (response) {
                    console.log(response);
                    window.location.reload(true);
                },
                onfailure: function (e) {
                    console.error(e);
                }
            });

 

Проверка на администратора в WordPress

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

<?php if ( current_user_can( 'manage_options' ) ) : ?>

<div class="new-block">
   <p>Допустим, блок, который не должен видеть случайный посетитель сайта </p>
</div>

<?php endif;?>

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

<?php if ( current_user_can( 'manage_options' ) ) : ?> 
   <script src="/assets/js/test-app.js"></script> 
<?php elseif:?> 
  <script src="/assets/js/app.js"></script> 
<?php endif;?>