Шпаргалка по 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: '/local/cbp/scripts/bron/actions/razviz-kp.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;?>

 

 

Задать комбинацию смены раскладки на Ubuntu

Почему-то в Ubuntu, в отличие от Mint, не работает стандартное переключение раскладки. Приходится с каждой установкой оси прописывать эти команды:

gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>Control_L']"
gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Alt>Shift_L']"