Бывает полезно для просмотра ключей больших многомерных массивов.

function showArrayKeysStructure(array $array, $level = 0)
{
    echo '<pre>';

    foreach ($array as $key => $value) {
        echo str_repeat("\t", $level) . var_export($key, true) . PHP_EOL;

        if (is_array($value)) {
            showArrayKeysStructure($value, $level + 1);
        }
    }

    echo '</pre>';
}
try {
    // путь к картинке, которая либо есть на деве, либо её нужно загрузить с прода на дев
    $src = $image['src'];

    // адрес прода, откуда будем скачивать картинки
    $externalDomain = 'https://example.com';

    $root = \Bitrix\Main\Application::getDocumentRoot();

    $filePath = $root . $src;

    // если картинки нет на деве
    if (!file_exists($filePath)) {
        $fileExternalLink = $externalDomain . $src;

        // то скачиваем её один раз
        $fileExternalContent = file_get_contents($fileExternalLink);

        if (!empty($fileExternalContent)) {
            // и сохраняем себе
            \Bitrix\Main\IO\File::putFileContents($filePath, $fileExternalContent);
        }
    }
} catch (\Exception $e) {
    ShowError($e->getMessage());
}

AMP (Accelerated Mobile Pages) это по сути тоже самое, что и Турбо-страницы от Яндекса, только с отличиями в реализации.

технология позволяет создавать лёгкие версии страниц, которые открываются быстро даже при медленном подключении к интернету

Если для Турбо-страниц мы выгружаем rss со своим контентом, и дальше Яндекс сам хостит наши страницы, то в AMP мы делаем у себя на сайте AMP-версии нужных страниц (html страницы в определённом формате), или даже целую AMP-версию сайта (получается что-то вроде отдельной мобильной версии), или даже делаем только AMP-сайт без обычной версии.

AMP-страницы работают и без Google и вроде как не зависят от него.

На AMP-странице нельзя использовать свои js скрипты, но можно использовать готовые js плагины от AMP (типа боковой панели меню или для слайдера и прочего).

hg cherry-pick

#hg

Включаем расширение transplant - добавляем в .hg/hgrc:

[extensions]
transplant=

Выполняем перенос коммитов в текущую ветку:

hg transplant -b <имя ветки из которой мы хотим скопировать коммит> <номер или хэш коммита 1> <номер или хэш коммита 2>  <номер или хэш коммита N>
function arrayToCsv(array $data): string
{
    $fh = fopen('php://temp', 'rw');

    fputcsv($fh, array_keys(current($data)), ';');

    foreach ($data as $row) {
        $row = array_map(
            function ($value) {
                return mb_convert_encoding($value, 'windows-1251', 'utf-8');
            },
            $row
        );

        fputcsv($fh, $row, ';');
    }

    rewind($fh);

    $csv = stream_get_contents($fh);

    fclose($fh);

    return $csv;
}

Формат подходит для excel.

visually-hidden

.visually-hidden {
    position: absolute !important;
    clip: rect(1px 1px 1px 1px); /* IE6, IE7 */
    clip: rect(1px, 1px, 1px, 1px);
    padding:0 !important;
    border:0 !important;
    height: 1px !important; 
    width: 1px !important; 
    overflow: hidden;
}

Ветки

Создать ветку:

hg branch my_branch_name_123
hg push --new-branch

Переключить ветку:

git update my_branch_name_123

Узнать в какой мы ветке:

hg branch

Изменения

Цветной diff:

hg diff --color always | less -R

Сбросить изменения на локальной копии:

hg update -C

Сбросить изменения отдельного файла:

hg revert filename.txt

Список измененных файлов:

hg status

Коммиты

История коммитов:

hg log --color always | less -R

Забрать коммиты:

git pull

Отправить коммиты:

git push

Создать коммит:

Страницы