Magento 2.2.4, вывод данных из настроек в шаблоне

Задача: В Magento 2.2.4 вывести, к примеру, телефон в шапке своей темы. Или любые другие данные для настроек

Решение (очень долго искал на разных источниках в интернете, везде попадалось устаревшее решение через класс Mage, которого теперь нету. Оказалось надо сделать так:

Во-первых, создать у себя в папке app/code класс, который будет ассоциирован с этим блоком, содержащим телефон, унаследовать его от Magento\Framework\View\Element\Template

Magento\Framework\View\Element\Template наследует от своего предка protected поле $_scopeConfig, дающее доступ к конфигурации магазина. Поэтому, во-вторых, создаём в нашем классе блока метод доступа либо ко всему _scopeConfig (кстати, это могли бы сделать и разработчики, будь они порядочными), либо, как сделал я, к конкретным настройкам.

<?php


namespace Helper;


use Magento\Framework\View\Element\Template;

class ShopDataBlock extends Template
{
    public function getPhone()
    {
        return preg_replace('!\\+38(\d{3})(\d{3})(\d{2})(\d{2})!', "($1) $2-$3-$4", $this->getFullPhone());
    }

    public function getFullPhone()
    {
        return $this->_scopeConfig->getValue("general/store_information/phone");
    }

    public function getWorkTime()
    {
        return $this->_scopeConfig->getValue("general/store_information/hours");
    }
}

Теперь телефон мне доступен в шаблоне этого блока так

<?= $this->_currentBlock->getPhone(); ?>

Как по мне, немного многовато действий для такой простой задачи, но, как пишут в интернете, это самый правильный способ добраться до телефона из шаблона

Выравнивание элементов списка (меню) по ширине, HTML+CSS

Иногда необходимо, чтоб меню точно выравнивалась по ширине. Тут на помощь приходят несколько замечательных приёмов, найденных мной на одном из форумов
Continue reading ‘Выравнивание элементов списка (меню) по ширине, HTML+CSS’ »

Динамическое формирование where для создания фильтров

Написать этот пост меня побудили вопросы на эту тему на форуме php.ru. Итак, нужно при задании фильтров каких-то объектов (например, товаров) динамически формировать where. Сейчас я покажу, как это делается в построителях запросов известных мне фреймворкоа. Возьмём простой случай, когда все поля для фильтрации в одной таблице, и не требуется join-ов.
Continue reading ‘Динамическое формирование where для создания фильтров’ »

Запрос на удаление дубликатов

Для удаления дубликатов записей можно использовать следующие команды:
table_name — заменить на название таблицы
unique_key — заменить на поле в котором, после выполнения запроса, не останется дубликатов.
ID — уникальный ключ в таблице.
DELETE tn FROM table_name tn JOIN (SELECT MAX(ID) AS ID FROM TABLE_NAME GROUP BY unique_key HAVING COUNT(*) > 1) tn2 USING(ID)
*хорошо работает на больших таблицах, проверенно =)

Правильные окончания для количества

Ещё одна функция из разряда «маленький полезный пустячок». Задача — подставить правильное окончание для количества чего-нибудь. К примеру, 1 комментарий, 2 комментария и т.п.

function wordsSpan($n = 0, $words) {
    $words    = explode('|', $words);
    $n        = intval($n);
    return ($n % 10==1 && $n % 100!=11) ? $words[0] . $words[1] : ($n % 10>=2 && $n % 10<=4 && ($n % 100<10 || $n % 100>=20) ? $words[0] . $words[2] : $words[0] . $words[3]);
}

foreach ($i in range(1, 100))
   echo $i . " " . wordSpan($i, "комметари|й|я|ев");

MySQL, сортировка в произвольном порядке (in и сортировка)

Задача такая: выдать все строки таблицы с id, входящим во множество (13, 15, 14, 29, 11), и к тому же именно в таком порядке. Недавно обнаружил, что в MySQL есть оператор, решающий именно эту задачу
Continue reading ‘MySQL, сортировка в произвольном порядке (in и сортировка)’ »

Универсальный обработчик форм на PHP своими руками

Практически во всех фреймворках реализована очень удобная работа с формами, позволяющая легко сделать валидацию вводимых данных. А что, если проект не настолько крупный, чтоб использовать целый фреймворк, но формы для ввода данных все равно хочется проверять. Сегодня я хочу показать, как на php можно написать достаточно универсальный класс валидации данных.
Continue reading ‘Универсальный обработчик форм на PHP своими руками’ »

AJAX-формы с помощью плагина jQuery Form

Плагин jQuery Form существует достаточно давно, но я им начал пользоваться относительно недавно. Отправка формы по AJAX — задача, в принципе, не сложная, и я обычно программировал её сам. Но недавно решил попробовать этот плагин, и понял, что это гораздо удобнее.
Continue reading ‘AJAX-формы с помощью плагина jQuery Form’ »