PWA приложение

Чтобы иметь возможность просматривать сайт в оффлайн режиме, можно создать PWA приложение с расширенным кешированием контента. Это позволит кешировать на стороне устройства ранее просмотренные страницы, а также можно указать предварительный список страниц, которые будут закешированы при установки приложения.
Читать дальше

Облако тегов для Modx

Мое решение задачи по созданию облака тегов для Modx Revo.
Какие были задачи: создать раздел Вопрос-ответ, для каждого ответа можно было задавать любое кол-во тегов. Выводить облако тегов в сайдбаре, при этом размером тегов показывать какие из них больше используются, чем больше размер, тем чаще они встречаются. На самой странице тега, кроме вывода материалов по данному тегу, иметь возможность прописывать вручную мета-теги и выводить текст.
Читать дальше

Yii2 Связанные таблицы


2:20:00 — подтаблица в админке
2:31:00 — добавляем поле в таблицу при extends
3:18:00 — виртуальное поле в виде геттера
3:39:00 — update страница при связанных данных
3:43:00 — сценарий проверки
3:50:00 — транзакция при сохранении связанных данных

Добавить git на готовый проект

Добавляю git к действующему проекту.
Локальные изменения отправляем в удаленный репозиторий.
На сервере, куда требуется добавить GIT и выкатить изменения выполняю команды
git init
git add .
git commit -m "инициализация на сервере"
Далее копируем файл ./git/config на сервер
Выполняем команды
git fetch
git reset --hard origin/master

MIGX примеры

Пример для слайдера. Используются поля:
  • Изображение
  • Заголовок
  • Текст
  • Ссылка
Вкладки формы:
[{"caption":"Элементы","fields": [
{"field":"img","caption":"Картинка","inputTVtype":"image"},
{"field":"caption","caption":"Заголовок"},
{"field":"text","caption":"Текст"},
{"field":"link","caption":"Ссылка"}]
}]
Разметка колонок:
[{"header": "Картинка","dataIndex": "img","renderer":"this.renderImage","width":"100"},
{"header": "Заголовок","dataIndex": "caption","width":"400"},
{"header": "Ссылка","dataIndex": "link","width":"400"}]

[{"caption":"Gallery","fields": [
{"field":"img","caption":"Картинка","inputTV":"image"},
{"field":"caption","caption":"Заголовок"},
{"field":"subcaption","caption":"Подзаголовок"},
{"field":"text","caption":"Текст"},
{"field":"link","caption":"Ссылка"},
{"field":"tmpl","caption":"Шаблон слайда","inputTVtype": "listbox","inputOptionValues": "@SELECT IF(description!='', description, name), name FROM [[+PREFIX]]site_htmlsnippets WHERE `category` = 33;"}
]}]

Чтобы pdoMenu выводил документы в заданном порядке

Для того, чтобы pdoMenu выводил ресурсы в том порядке, в котором они перечислены в параметре resources, необходимо добавить пустой параметр sortby
{$_modx->runSnippet('pdoMenu', [
'parents' => '0',
'resources' => '7,9,10,11,8,12,13',
'sortby' => '',
])}

Вывод даты на MODx через Fenom

У документа Modx есть несколько дат, которые можно использовать для отображения на сайте:
  • Дата создания — поле createdon
  • Дата публикации — поле publishedon
  • Дата изменения — поле editedon
MODx хранит их в формате Timestamp, поэтому, чтобы вывести их в человеческом виде, нужно использовать модификатор Fenom
Например так:
{$publishedon | date : "d.m.Y"}

Стоит различать место вывода. Тут возможно несколько ситуаций.
1. Вывод непосредственно в шаблоне. Тогда поле будет доступна у объекта $_modx->resource
И вывод будет выглядеть так
{$_modx->resource.publishedon | date : "d.m.Y"}
2. В чанке сниппета, например, в чанке pdoResource или msProduct. Тогда выводим дату непосредственно из переменной
{$publishedon | date : "d/m/Y"}

И, чтобы настроить нужный формат вывода даты, используем дополнительный параметр, где указываем что и как выводить.
"d/m/Y" -> 12/02/2017
"d.m.Y" -> 12.02.2017
"d.m.Y H:i:s" -> 12.02.2017 17:30:12

Все возможные подстановочные символы можно найти на официальной документации PHP php.net/manual/en/function.date.php

Чтобы вывести текущее дату:
{'' | date : "d.m.Y"}

Так можно вывести через fenom текущий год:
{'' | date : "Y"}

Например, для вывода текущего года в копирайте:
© {'' | date : "Y"} - название компании

Превышение нагрузки на хостинге Timeweb

Итак, обратился клиент с проблемой — в контрольной панели хостинга Timeweb имеется открытый тикет с темой 'TIMEWEB> Критическая нагрузка на сервер.'. В тикете сообщается, что ваш аккаунт превышает допустимую нагрузку и перенесен на специальный сервер TMPB3. Далее приложены текстовые инструкции общего характера и никакой конкретики.
Читать дальше

Импорт из CSV

По многочисленным просьбам общественности написал скрипт импорта в miniShop2 из CSV. У нас уже проскакивало несколько вариантов, но все они как то не очень.

Особенности:


  1. Это не сниппет, это самодостаточный скрипт.
  2. Использует процессоры для импорта ресурсов и изображений.
  3. Умеет обновлять ресурсы по указанному ключевому полю.
  4. Поддерживает ТВ параметры и поля товаров, включая JSON типа size и color.
  5. Есть режим отладки, с подробным логом и обработкой только первой строки файла.
  6. Выводит сообщения через системный лог.

Теретически, можно импортировать не только товары, но и категории или другие ресурсы, но не проверял.

Скрипт входит в состав miniShop2 с версии 2.1.4 и лежит в /core/components/minishop2/import/csv.php. Запускать его можно как из браузера (если у вас открыта директория core), так и из консоли.

Если захотите его перенести в другое, более подходящее место, то нужно отредактировать строку


Читать дальше

Прикрепляем в письмо менеджеру Excel файл с данными заказа

Обратился ко мне заказчик по доработкам minishop2, чтобы в письма менеджеру добавлять файд Excel с данными заказа. Изначально подумал про счет какой-то, или накладную. Оказалось обычная таблица с четырьмя колонками: код товара, название, цена и кол-во. Сроки как всегда поджимают — сделать надо было еще вчера.
Собственно вот так выглядил шаблон, который нужно было заполнить:

Читать дальше