Шпаргалки | Заметки https://t-jo.com малого бизнеса Tue, 14 May 2024 18:02:02 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.8.1 Документирование кода PHP на основе DocBlock комментариев https://t-jo.com/dokumentirovanie-koda-php-na-osnove-docblock-kommentariev.html https://t-jo.com/dokumentirovanie-koda-php-na-osnove-docblock-kommentariev.html#respond Thu, 22 Oct 2020 15:41:16 +0000 https://t-jo.com/?p=5596

Хорошие комментарии позволяют упростить читаемость и дальнейшее сопровождение кода. А при написании комментариев с учетом стандарта DocBlock Вы получите возможность автоматически генерировать документацию и ускорить написание нового кода при помощи подсказок IDE выводимых на основе этих комментариев

Пример подсказок на основе DocBlock комментариев:

DocBlock — это многострочный комментарий переведенный к определенному виду (синтаксису). На основании этих комментариев можно автоматически генерировать документацию с помощью утилиты phpDocumentor. Пример генерируемой документации можно посмотреть на официальном сайте phpDocumentor.

И так разберем подробнее как использовать эти «чудо» комментарии.

Пример использования DocBlock комментариев

Простой пример комментария:

  1. <?php
  2.  
  3. /**
  4. * Имя или краткое описание объекта
  5. *
  6. * Развернутое описание
  7. *
  8. * @имя_тега значение
  9. * @return тип_данных
  10. */
  11.  

Комментарий должен находиться перед документируемым элементом (классом, функцией, переменной, константой).

Строка комментария должна начинаться с *. Блоки разделяются пустыми строками. Остальные комментарии не подходящий под данный синтаксис будут игнорироваться. Теги также могут находиться в описании объекта, такие теги заключаются в {} скобки и называются инлайн (inline) теги.

Пример с использованием инлайн тегов:

  1. <?php
  2.  
  3. /**
  4. * Имя или краткое описание объекта
  5. *
  6. * Развернутое описание
  7. * Здесь мы будеи использовать инлайн {@inlinetag} тег
  8. *
  9. * @имя_тега значение
  10. * @return тип_данных
  11. */
  12.  

Общий пример:

  1. <?php
  2.  
  3. /**
  4. * Краткое описание класса
  5. *
  6. * Подробное описание класса
  7. * которое может растянуться на несколько строк с использованием HTML тегов.
  8. * Теги можно использовать следующие:
  9. * <b> — жирное начертание;
  10. * <code> — код;
  11. * <br> — разрыв строки;
  12. * <i> — курсив;
  13. * <kbd> — сочетание клавиш;
  14. * <li> — элемент списка;
  15. * <ol> — нумерованный список;
  16. * <p> — абзац;
  17. * <pre> — форматированный текст;
  18. * <samp> — пример;
  19. * <ul> — маркированный список;
  20. * <var> — имя переменной.
  21. * Инлайн тег. Использует данные с {@link http://кодер.укр/data.php}
  22. * Далее будет список используемых тегов
  23. *
  24. * @author Coder UA <web@кодер.укр>
  25. * @version 1.0
  26. * @package MyPackageName
  27. * @category MyCategoryNews
  28. * @todo описание необходимых доработок
  29. * @example http://кодер.укр/example.php
  30. * @copyright Copyright (c) 2014, Coder UA
  31. */
  32. class ClassName {
  33.  
  34. /**
  35. * Описание переменной, если необходимо
  36. *
  37. * @var array массив данных
  38. */
  39. public $var1 = array();
  40.  
  41. /**
  42. * Описание переменной, если необходимо
  43. *
  44. * @var integer очень важные данные
  45. */
  46. private $var2;
  47.  
  48. /**
  49. * Краткое описание функции
  50. *
  51. * Подробное описание функции, если необходимо
  52. *
  53. * @param string $param1 Первый параметр функции
  54. * @param string $param2 Второй параметр
  55. * @return string
  56. */
  57. function myFuncName ($param1, $param2 = ‘value’) {
  58. //…
  59. //код
  60. //…
  61.  
  62. return $var;
  63. }
  64.  
  65. //…
  66.  
  67. }

Еще пример:

  1. <?php
  2. /**
  3. * Контроллер работы с новостями
  4. *
  5. * Выполняет обработку и вывод списка новостей и подробную информацию о новости
  6. *
  7. * @package Fronend
  8. * @category News
  9. * @author Coder UA <web@кодер.укр>
  10. * @version 1.1
  11. * @copyright Copyright (c) 2014, Coder UA
  12. */
  13. class NewsController extends Controller {
  14.  
  15. /**
  16. * @var integer количество новостей на страницу в списке
  17. */
  18. public $limit = 10;
  19.  
  20. /**
  21. * Вывод списка новостей
  22. *
  23. * @return array список новостей
  24. */
  25. public function actionIndex() {
  26. //…
  27. //код
  28. //…
  29. return $data;
  30. }
  31.  
  32. /**
  33. * Вывод подробной информации о новости
  34. *
  35. * @param integer $id — id текущей новости
  36. * @return array данные о новости
  37. */
  38. public function actionDetail($id) {
  39. //…
  40. //код
  41. //…
  42. return $data;
  43. }
  44.  
  45. //…
  46.  
  47. }

Описание основных тегов (дискрипторов) phpDoc

Тег Синтаксис Пример Описание
@access @access [private | protected | public] @access private
@access protected
@access public
Описывает доступ к элементу. Особой надобности в этом дискрипторе нет, т.к. перед методом(функцией) или свойством(переменной) обычно указывается область видимости.
@author @author [имя автора] [<email адрес>] @author Coder UA
@author Coder UA <web@кодер.укр>
Автор кода(элемента) и его электронная почта (не обязательно).
@category @category [описание] @category MyCategory Используется для организации групп пакетов.
@copyright @copyright [описание] @copyright Copyright (c) 2014, Coder UA Информация о правообладателе кода.
@deprecated @deprecated [<версия>] [<описание>] @deprecated
@deprecated 1.0.0
@deprecated Использует небезопасные методы.
@deprecated 1.0.0 Использует небезопасные методы.
Тег указывает на то, что код устарел. Указывается версия, начиная с которой код считается устаревшим и описание почему код устарел.
@example @example [путь] [<стартовая линия> [<количество строк>] ] [<описание>] @example myExample.php Пример выполнения метода.
@example http://example.com/myExample.php Пример выполнения метода при условии, что старт == 1.
@example «My Own Example.php» My counting.
Путь к файлу с примером использования кода. Стартовая линия — номер строки, с которой нужно отобразить пример (не обязательно). Количество строк — количество строк для представления примера от стартовой линии. Если не указано, файл примера будет показан ​​от линии старта до конца файла (не обязательно). Если нет стартовой линии, то файл примера будет представлен полностью.
@final @final @final Применяется для методов или свойств которые запрещено перегружать в дочерних классах. Также можно отметить класс который не должен быть родителем.
@filesource @filesource @filesource Тег может быть использован только в начале файла. Указывает, что необходимо вывести исходный код текущего файла.
@global @global [тип] [имя] [<описание>] @global string $gStr глобальная строчная переменная Декларирует глобальные переменные.
@ignore @ignore [<описание>] @ignore
@ignore описание почему мы игнорируем текущий элемент
Игнорирование элемента.
@internal @internal [описание] @internal Этот комментарий не будет добавлен в документацию Значение тега не будет добавлено в документацию. Можно использовать для комментариев предназначенных для тех кто работает с кодом.
@license @license [<url>] [название] @link http://кодер.укр/license.txt GNU Public License
@link GPL
Ссылка на лицензию, под которой распространяется код.
@link normal
@link [<описание>] inline
Больше информации об объекте ({@link http://кодер.укр/doc})
@link http://кодер.укр/doc дополнительная документация Указывает ссылку на документацию элемента.
@method @method [возвращаемый тип] [название]([[тип] [параметр]<, …>]) [<описание>] @method string getStr()
@method setStr(integer $integer)
Позволяет описать магический метода __call().
@name @name [имя] @name $globalVarName Используется в связки с @global. Для отождествления.
@package @package [уровень 1]\[уровень 2]\[и т.д.] @package Yii\Documentation\API Указывает имя пакета, в который входит код (файл). Используется в начале файла или в блоке комментариев класса.
@param @param [тип] [имя] [<описание>] @param integer $value
@param integer $value описание переменной
Тег описывает входные параметры для функций и методов классов.
@return @return [тип] [<описание>] @return integer количество строк.
@return string|null строка после проверки.
Описывает возвращаемые данные функцией или методом класса. В качестве типа можно указать имя класса, phpDocumentor автоматически создаст ссылку на этот класс.
@see @see [<описание>] @see http://кодер.укр/doc Подробная документация.
@see MyClass::$val
@see MyClass::myFunction()
Тег указывает на то, что документация уже существует в другом докблоке. Например класс имплементирует интерфейс, который уже содержит подробный докблок. Позволяет избежать дублирование информации.
@since @since [версия] [<описание>] @since 1.0.2 Добавлен аргумент $b.
@since 1.0.1 Добавлен аргумент $a.
@since 1.0.0
Указывает на версию класса, метода или функции с которой комментируемый элемент стал доступен.
@static @static @static Указывает на то, что метод или свойство является статическим.
@subpackage @subpackage [имя] @subpackage Documentation\API Объеденяет несколько пакетов в один раздел документации. Используется с тегом @package. Применяется в начале файла или заглавном докблоке класса.
@todo @todo [описание] @todo исключить возможность вызова без авторизации Описывает необходимые доработки кода.
@throws @throws [тип] [<описание>] @throws InvalidArgumentException если элемент не массив. Указывает тип исключения, которое может быть возвращено методом или функцией.
@uses @uses [метод|переменная] [<опимание>] @uses MyClass::$items для получения счетчика. Описывает связь между текущем элементом и другим структурным элементом.
@var @var [тип] [имя] [<описание>] @var string $value строка с данными Тип, имя и описание свойства класса.
@version@version [<вектор>] [<описание>] @version 1.1
@version V. 1.4
Текущая версия.

В конечном итоге при использовании docBlock комментариев Вы получите:

  • Код с комментариями
  • Подсказку IDE при использовании функций, методов и свойств, которые были прокомментированы с помощью docBlock
  • Автоматически сгенерированную документацию с помощью phpDocumentor
]]>
https://t-jo.com/dokumentirovanie-koda-php-na-osnove-docblock-kommentariev.html/feed 0
Git and AWS for WEB development — CodeCommit — CLI — EC2 or either Linux servers https://t-jo.com/git-and-aws-for-web-development-codecommit-cli-ec2-or-either-linux-servers.html https://t-jo.com/git-and-aws-for-web-development-codecommit-cli-ec2-or-either-linux-servers.html#respond Tue, 01 Sep 2020 16:39:07 +0000 https://t-jo.com/?p=5542 There is main idea this chain:

Your  local computer Git repo <-> AWS CodeCommit Git repo <-> Any path and folders for site(his copy another domain names) on server Git repo

AWS CodeCommit service is central repository for Git.

 

You can check it in local Git version.

#git remote -v

origin ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/laravel (fetch)
origin ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/laravel (push)

 

CLI CodeCommit docs — https://docs.aws.amazon.com/cli/latest/reference/codecommit/index.html

 

Short instruction for use AWS CLI for simple projects

This is list minimum commands for console «aws»:

list-repositories

create-repository

get-repository

list-branches

create-branch

get-branch

get-comment

delete-branch

delete-repository

 

The most Important command

#git [any command] —help

and

#aws codecommit [any-command] help

and first look EXAMLPE command in this help!

 

Sometimes aws pass through branches after push, then you can upload specific branch

#git push —set-upstream origin any-branch-name

]]>
https://t-jo.com/git-and-aws-for-web-development-codecommit-cli-ec2-or-either-linux-servers.html/feed 0
Виртуалка Laravel Vagrant Homestead для Mac OS под VirtualBox https://t-jo.com/virtualka-laravel-vagrant-homestead-dlya-mac-os-pod-virtualbox.html https://t-jo.com/virtualka-laravel-vagrant-homestead-dlya-mac-os-pod-virtualbox.html#respond Fri, 12 Jun 2020 06:44:10 +0000 https://t-jo.com/?p=5515 Практика показала, что MAMP на Mac OS не выполняет задачи по созданию среды если проект становиться профессионального уровня.
На помощь приходит Vagrant образ под названием Homestead.

Основные проблемы при установке на 2020 год были с ssl
Для этого после установки и запуска виртуалки копируем его себе на ПК и добавляем в доверенные сертификаты, кликнув на него два раза.
$ vagrant ssh -c ‘cat /etc/nginx/ssl/ca.homestead.homestead.crt’ > ca.homestead.homestead.crt
Примерно с 2021-2022 все локальные домены желательно, чтобы находились в доменной зоне .local, чтобы избежать непредвиденных багов в браузерах на клиентских машинах в момент разработки. К примеру разрабатываем сайт в PHPStorm на домене mysite.local и прописываем его в /etc/hosts по стандарту на vagrant внешний IP интерфейс.

Вообще не плохая идея после установки и сборки образа по официальной документации потренероваться на этом сервере установкой phpmyadmin, чтобы поднять уверенности в том, что с образом все в порядке.
В настройка nginx не была прописана директива минимально загружаемго файла, от этого через phpmyadmin не проходил импорт.
Если вы хотите сделать нескольво виртуальных машин на разные большие проекты, чтобы их отделить, то нужно задать разные имена этим машина через конифиг в дериктиве «name:».
Если вы постоянно в ходе работы передвигаетесть с места на место, где разные сети(роутеры), то конфигурация сетевого моста Вам скорее всего не подойдет и нужно прописать ip для виртуальной машины ОТЛИЧНОЙ от СЕТИ РОУТЕРА(предположим 192.168.1.1/24) ip: «192.168.10.13», но настройка дебага будет уже сложнее, если вы хотите отлаживать на профессиональном уровне через Charles, тут уже без заворота портов средствами фаервола в разных сетях Вам не обойтись и нужно погрузиться в эту тему и досконально все изучить.

Если у Вас не Intel или AMD архитектура на метеллическом процессоре, а Apple Silicon — ARM, то нужно посмотреть в листинге через консоль последнюю доступную для Вас версию HomeStead — вот такой вот командой.
~: vagrant box list
laravel/homestead (parallels, 14.0.2, (arm64))
laravel/homestead-arm (parallels, 13.0.0)

Вот пример Тру конфига:


memory: 2048
cpus: 2
provider: virtualbox

version: 14.0.2
name: yourvirtualmachinename

authorize: ~/.ssh/id_rsa.pub

keys:
— ~/.ssh/id_rsa

folders:
— map: /Users/joker/Downloads/websites/com2.all-uk.dev
to: /home/vagrant/code
type: «nfs»

sites:
— map: heart.loc
to: /home/vagrant/code/public/heart.uk
php: «7.2»
— map: heart.com.loc
to: /home/vagrant/code/public/heart.com
type: «apache»
— map: heart.loc
to: /home/vagrant/code/phpmyadmin

databases:
— homestead
— laravel3
— laravel4
— tuc
— tuc2

features:
— mariadb: false
— ohmyzsh: false
— webdriver: false

networks:
— type: «public_network»
ip: «192.168.1.13»
bridge: «en1: Wi-Fi (AirPort)»

# ports:
# — send: 50000
# to: 5000
# — send: 7777
# to: 777
# protocol: udp

В чем заключается что он тру?
Если мак то включаем для ускорения вот эту штуку
type: «nfs»
В название файла .loc. Если поставить .dev или .app на 2020 год на последнем образе, то могут быть разные глюки!
site.loc — вполне нормальный домен для правильной работы
По умолчанию создается пользователь базы дынных homestead с паролем secret
Для того, чтобы из локалки было удобно с помощью мобилок заходить по вай-фай на сайты на этой виртуалке включаем сетевой мост, а не нат, как это идет по умолчанию вот этой директивой:
networks:
— type: «public_network»
ip: «192.168.1.13»
bridge: «en1: Wi-Fi (AirPort)»

Ну, а далее вот основные команды для постоянного использования
#vagrant up — запуст виртуалки
#vagrant halt — остановка
#vagrant list — список других команд
#vagrant destroy —force — грохнуть образ

#vagrant reload —provision — перечитать правленный конфиг без гроханья образа — виртуальной машины с базами данных и т.п. или #vagrant provision

 

Бывает нужна пересборка образа после обновления, не забывает перед обновлением сохранить все базы данных, которые находятся на виртуальном образе, так как он будет полностью уничтожен. Если все конфиги, которые разварачиваются в vagrant установятся по умолчанию, то базы данных которые были на старом образе никто Вам не развернет!

1.1) and you can always destroy your old vagrant box from your vagrant folder usually ~/homestead by running — заходим в активную папку с ваши vagrant образом виртуалки

vagrant destroy 

2) create a new vagrant box by running собираем новую конфигруцию

vagrant up --provision Далее пользуемся всем как обычно.

Далее источник — https://github.com/RomanSarvarov/larastorm/blob/master/homestead/ru.md

Laravel + Homestead + PHPStorm + XDebug

Инструкция для простого разворачивания Laravel 7 на Vagrant Homestead и связки его с IDE PHPStorm для комфортной работы.

Требования к установке

Инструкция

1. Установка виртуальной машины

  1. Скачать и установить Oracle VirtualBox — https://www.virtualbox.org/wiki/Downloads
  2. Скачать и установить Vagrant — https://www.vagrantup.com/downloads.html

2. Установка Homestead и Laravel

  1. Перейти в папку с проектом
  2. Выполнить composer create-project --prefer-dist laravel/laravel . (точка на конце — не ошибка)
  3. Выполнить composer require laravel/homestead --dev
  4. Выполнить vendor\\bin\\homestead make (Windows) или php vendor/bin/homestead make (Linux/macOS)
  5. (НЕ ОБЯЗАТЕЛЬНО) В Homestead.yaml поменять директиву map в разделе sites c homestead.test на какой-то абстрактный домен, который будет использоваться в будущем (например test.loc). Должно получится так:
sites:
    -
        map: test.loc
        to: /home/vagrant/code/public
  1. Добавить новую запись 192.168.10.10 test.loc (вместо test.loc — ваш домен) в файле /etc/hosts (в Windows файл расположен в папке по данному пути: C:\Windows\System32\drivers\etc)
  2. В файле .env (в корневой папке проекта) внести настройки подключения к БД:

Настройки подключения к БД Mysql

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=33060
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Настройки подключения к БД PostgreSQL

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=54320
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

3. Настройка PHPStorm

  1. Активировать плагин Laravel (Settings > Plugins > Laravel (активировать)). Затем включить его для проекта (Settings > Languages & Frameworks > Laravel > Enable plugin for this project
  2. Установить стиль PHP кода на стиль Laravel (Settings > Editor > Code Style > PHP)
  3. Подключиться к БД, используя параметры для подключения к БД (которые в файле .env)
  4. Перейти в Settings > Languages & Frameworks > PHP
  5. Изменить PHP Language Level на текущую версию PHP (узнать версию PHP можно, выполнив сначала vagrant ssh, а затем php -v)
  6. Нажать на […] в CLI Interpreters > Нажать на [+] (добавить) > From Docker, Vagrant… > Vagrant > OK
  7. Перейти в Settings > Command Line Tool Support > Нажать на [+] (добавить)
  8. В Choose Tool выбрать Tool Based On Symphone Console, для Visibility — выбрать Project, в Alias поставить artisan, в Path To Script поставить путь к файлу artisan (который в корневой папке проекта)

4. Установка и настройка Laravel Ide Helper

  1. Выполнить composer require --dev barryvdh/laravel-ide-helper
  2. В config/app.php добавить Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class (в блок Package Service Providers)
  3. Добавить в composer.json в директиву scripts:
"post-update-cmd": [
    "Illuminate\\Foundation\\ComposerScripts::postUpdate",
    "@ide-helper"
],
"ide": [
    "@ide-helper"
],
"ide-helper": [
    "@php artisan clear-compiled",
    "@php artisan ide-helper:generate",
    "@php artisan ide-helper:meta",
    "@php artisan ide-helper:models -N"
]
  1. Выполнить composer ide-helper

Более подробно о библиотеке — https://github.com/barryvdh/laravel-ide-helper

5. Настройка Xdebug

  1. Перейти в Settings > Languages & Frameworks > PHP > Servers > Нажать на [+]
  2. В поле Name и поле Host ввести название хоста (которое в Homestead.yaml)
  3. Поставить галочку на Use path mappings
  4. В File/Directory установить значение Absolute Path для поля с корневой папкой проекта в /home/vagrant/code/и папкой public /home/vagrant/code/public/

Дополнительно

  1. Заменить содержимое .gitignore:
# Laravel gitignore
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
/.idea
/.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
.env

# Larave IDE Helper
_ide_helper.php
_ide_helper_models.php
.phpstorm.meta.php

# misc
.DS_Store
reports/*
!reports/.gitkeep
npm-debug.log
yarn-error.log
.phpunit.result.cache
/user-customizations.sh
/postgres_backup
/mysqldump.sql.gz
/mysql_backup
/aliases
/after.sh
/Homestead.yaml
/Homestead.json/.idea
/vendor
/.vagrant
phpunit.xml
.buildpath
.settings
.project
  1. Пометить папки в PHPStorm — правой кнопкой по папке > Mark directory as (папку public => Resource root, папку tests => Test Sources Root, папку vendor и storage => Excluded)

Полезные фичи (устанавливать по желанию)

  1. Установить Laravel Debugbar, выполнив команду composer require barryvdh/laravel-debugbar --dev Более подробно про библиотеку — https://github.com/barryvdh/laravel-debugbar
  2. Сгенерировать функционал для входа/регистрации пользователей: установить специальный пакет composer require laravel/ui, выполнить команду php artisan ui <тип> --auth (<тип> заменить на bootstrap, vue, react)
  3. Установить удобное средство для отладки Laravel Telescope: выполнить composer require laravel/telescope, выполнить php artisan telescope:install, выполнить php artisan migrate

На заметку

  1. Если после установки выдает ошибку — выполнить php artisan config:clear
  2. Чтобы дебажить с помощью Chrome — необходимо установить расширение Xdebug helper —https://chrome.google.com/webstore/detail/xdebug-helper/eadndfjplgieldjbigjakmdgkmoaaaoc

Управление виртуальной машиной

  1. Запуск машины — vagrant up
  2. Остановка машины — vagrant halt
  3. Подключние через SSH — vagrant ssh (отключение — vagrant exit)
  4. Удалить виртуальную машину — vagrant destroy -f <название/ID машины>
  5. Посмотреть список машин — vagrant global-status

Все команды можно посмотреть в документации к Vagrant — https://www.vagrantup.com/docs/cli/

 

4- shh to the vagrant machine

vagrant ssh

5- flip the server, by running:

flip

you’ll get this message:

nginx stopped
apache started

или в конфиги нужного домена прописать директиву настройки
type: «apache» — как сказано в официальной документации ларавел
НО на последних версиях виртуальных машин Homestead, есть глюк, по умолчанию апатч не в автозагрузке, поэтому при этом методе после сборки образа заходим на него по ssh и
#sudo update-rc.d apache2 enable
Так мы добавим Apache в автозагрузку.

My LinkedIn Blog

]]>
https://t-jo.com/virtualka-laravel-vagrant-homestead-dlya-mac-os-pod-virtualbox.html/feed 0
Laravel. Установка e-commerce Aimeos интернет магазина на ISPManager сервер. https://t-jo.com/laravel-ustanovka-e-commerce-aimeos-internet-magazina-na-ispmanager-server.html https://t-jo.com/laravel-ustanovka-e-commerce-aimeos-internet-magazina-na-ispmanager-server.html#respond Sun, 03 May 2020 18:40:56 +0000 https://t-jo.com/?p=5512 Пришлось написать очень краткую шпаргалку, под этот замечательный фреймворк Ларавел, который славиться своей простатой в профессиональных кругах PHP программистов и при этом выполняет самые не стандартные и гибкие задачи.
Имея на сервере или VPS самую популярную панель администрирования Линукс серверов ISPManager установить этот интернет магазин Aimeos так просто из коробки не получится, есть ряд нюансов на которые нужно обратить внимание:
Внимательно выполняем стандартную инструкцию разработчика данного модуля на гите, а именно обартите внимание, если устанавливаете на дефоултную панель АСП Менеджер вот на это —
PHP >= 7.2 (Должно быть и на сайте и в консоли линукс — Гуглим, как сделать в консоли другую версию PHP)
MySQL >= 5.7.8, MariaDB >= 10.2.2 (По умолчанию в ISPManager панели сейчас идет 5.6, поэтому танцы с бубнами и пляски вокруг ошибок при установки этого интернет магазина не к чему не приведут — выполните этот пункт) Посмотреть в консоли версию май скьюел #mysql —version. Рекомендации нубов, как установить новую версию баз данных на ваш сервер в сторону, в основном пишут как обычно всякую херню. Делаем средствами ISPManager панели через докер(докер сам установится при установке базы данных)!
Проще установить эту версию через Docker, который есть в ISPmanager в настройках самой панели. Setting -> Database server и вынести все это на внешний IP интерфейс вашего сервера, предположим 164.132.2.2:3310
Далее можно идти в Tools — Database и добавлять там нужную базу на основе этого докера станадртным интерфейсом ISPManager

Только после этого можно приступать к установке Laravel Aimeos

1) Создаем новый хост site.com
2) Заходим в PHP настройки модулей сайта и устанавливаем модуль intl. Должно быть у сайта минимум PHP 7.2
3) Заходи через Линукс консоль в корневую папку сайтов, где и видим эту папку с сайтом, которую создал ISPManager. Удаляем ее #rm -rf site.com
4) Устанавливаем сразу этот пакет, он уже включает в себя Laravel ядро. ДОЛЖНА БЫТЬ В КОНСОЛИ PHP 7.2 минимум и MySQL более чем 5.7.8 или MariaDB более 10.2.2
#composer create-project aimeos/aimeos site.com

Внимательно заполняем эти пункты при инсталляции пакета — если решили использовать как базу данных MySQL, то

DB_CONNECTION=mysql
DB_HOST=164.132.2.2
DB_PORT=3310
DB_DATABASE=YourBaseName
DB_USERNAME=root
DB_PASSWORD=YourPassowrd

Далее надо ручками подправить все конфиги Апатча и Nginx, а именно по стандарту Laravel указать корневую директорию root и $root_path — /public
/var/www/user/data/www/site.com/public — так должно быть, где:
DocumentRoot, Directory у апатча и set $root_path для http и https у Nginx
и сделать вот так с этой настройкой Apache на вашу новую консольную версию PHP — php_admin_value open_basedir «/opt/php73/:/var/www/joker/data»

При таких не сложных пунктах магазин должен заработать.
Данная инструкция напоминалка для себя любимого.))

TOP 10 CMS based Laravel

]]>
https://t-jo.com/laravel-ustanovka-e-commerce-aimeos-internet-magazina-na-ispmanager-server.html/feed 0
How to check open ports on CentOS Linux https://t-jo.com/how-to-check-open-ports-on-centos-linux.html https://t-jo.com/how-to-check-open-ports-on-centos-linux.html#respond Thu, 03 Oct 2019 13:32:48 +0000 https://t-jo.com/?p=1479
  • First install nmap and lsof. #yum install nmap && yum install lsof
  • You can use these comands:
  • #lsof -i
    #lsof -n -P | grep 1723 //1723 anyport
    #lsof -i tcp

    #nmap -sT -O localhost
    #nmap -sU localhost

    ]]>
    https://t-jo.com/how-to-check-open-ports-on-centos-linux.html/feed 0
    Webpack — шпора https://t-jo.com/webpack-shpora.html https://t-jo.com/webpack-shpora.html#respond Wed, 02 Oct 2019 13:21:33 +0000 https://t-jo.com/?p=1393 npm inint — команда инициализации главного файла в активной папке и базывае настройки через ноду — конфигурационный файл package.json, а так же

    webpack — webpack.config.js — конфигурационный файл данного пакета, где моно добовлять разные зависимости и настройки по документации пакетов npm. Руководствуемся актуальными гайдами  на официальной странице webpack.

    Старт процесса:

    #npm install webpack —save-dev

    #npm install webpack- cli —save-dev (Возможность параметров команд из консоли)

    Предварительное ознакомление:
    https://webpack.js.org/concepts/
    https://www.youtube.com/watch?v=kLMjOd-x0aQ&list=PLDyvV36pndZHfBThhg4Z0822EEG9VGenn
    https://tproger.ru/translations/configure-webpack4/

    Делаем так.
    src — исходная рабочая папка с js файлами и index.js(указываем в package.json) — входная точка.
    dict или build — выходная, куда будем складывать всю переработку — webpack.config.js
    package.json — конфигурационный файл любого node.js приложения
    webpack.config.js — файл в ктором создаем объект конфигурации, предположим стандартный выходной файл — bundle.js и все остальное.
    папка node_modules — с архивом всем приложений которые зависят от конфигурационного файла.
    webpack —mode development позволяет не оптимизировать исходный файл bundle.js и будет проще отлаживать. Можно задать не через консоль, а через конфигурационный файл webpack.config.js в объекте module.exports параметр mode: ‘production’ — режим оптимизации или можно задать в package.json в объект ‘scripts’
    «scripts»: {
    «dev»: «webpack —mode development», //npm run dev набрать в консоли в этой активной папке//
    «build»: «webpack —mode production»
    },

    Одна из основных проблем — глобальная область видемости из html файлов (причина — бандл оборачивает все своей функцией)



    http://qaru.site/questions/2338112/export-global-function-using-webpack

     

    работа с html шаблонами, предположим у нас несколько точек входа в  конфигурационном файле, тогда можно на выходе получить несколько банделов и разместить их в любой точке страницы по примеру такого шаблона.

    <script async defer src=»<%= htmlWebpackPlugin.files.chunks.language.entry %>»></script>
    <script async defer src=»<%= htmlWebpackPlugin.files.chunks.index.entry %>»></script>
    <script async defer src=»<%= htmlWebpackPlugin.files.chunks.scriptmailjson.entry %>»></script>
    <script async defer src=»<%= htmlWebpackPlugin.files.chunks.tablesort.entry %>»></script>
    … т.д.

    Выделено название бандлов(несколько точек входа), которые лежат в папке src

     

     

    webpack.config.js — шпора с комментариями — без официальной документации и доп. поисков по сети по каждой строчке не разберешься. Помни нормальные конфиги за день не пишутся! Даже за неделю!!!

    const HtmlWebpackPlugin = require('html-webpack-plugin'); //Work with HTML page: generation, copy, templete.
    const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); //minify code
    const webpack = require('webpack'); // Install Local - main Object webpack - look to oficeal site about plugins metod.
    const path = require('path');
    console.log (getRandomInt(99, 99999999)); //You can add yourself logic in this config. AND console.log can show main object webpack.config.js
    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    module.exports = {
        entry: { //You can use any entry points files in yourself config
            index: [
                '@babel/polyfill', //add polyfill in this "entry" file
                './src/index.js'
            ], // Anothe entry files:
            scriptmailjsonar: './src/scriptmailjsonar.js',
            tablesortar: './src/tablesortar.js',
            languagear: './src/languagear.js'
        },
        output: {
            filename: '[name].bundle.js?hash=[hash]',   //I use parameter hash for CDN tehnology. [name] - It's name entry point - key object entry.
            path: path.resolve(__dirname, './build'), //root path JS - __dirname
            library: "[name]" // Name Global variable will have been viewing into HTML file from main webpack entry functions. All function parametrs will be property(var) or method(var) - don't fogot with exports.nameVariable = anyArray [rst, rstr, ...] then you can take console.log ([name].nameVariable.var)
        },
        devtool: "source-map", //Source-map for JS. SCSS into IDE or webpack plugins
        module: {
            rules: [
                {
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: "babel-loader"
                }
            ]
        },
        optimization: {
             minimizer: [
                new UglifyJsPlugin({
                    test: /\.js(\?.*)?$/i, //Default options for minify scripts and intelect guard.
                    }),
            ],
        },
        plugins: [
            new HtmlWebpackPlugin({
                hashhtml: getRandomInt(99, 99999999), //I have cache in browser then i use link *.css?hash=someunicnumber
                filename: "../index.html",
                template: "./src/index.html",
                inject: false,
                minify: { // #npm install html-minifier // For this functional
                    html5                          : true,
                    minifyCSS                      : true,
                    minifyJS                       : true,
                    collapseWhitespace: true,
                    removeComments: true,
                    removeRedundantAttributes: true,
                    removeScriptTypeAttributes: true, //Maybe that was delete type="name" input - MaterializeCSS
                    removeStyleLinkTypeAttributes: true,
                    useShortDoctype: true
                }
            } )
        ]
    };
    ]]>
    https://t-jo.com/webpack-shpora.html/feed 0
    Английские времена — супер простая для понимания шпаргалка. English Tense https://t-jo.com/anglijskie-vremena-super-prostaya-dlya-ponimaniya-shpargalka-english-tense.html https://t-jo.com/anglijskie-vremena-super-prostaya-dlya-ponimaniya-shpargalka-english-tense.html#respond Mon, 16 Sep 2019 13:39:09 +0000 https://t-jo.com/?p=1113 Не было в интернете нормальной таблицы с примерами для русскоязычного сигмента, поэтому пришлось все сделать самому.
    Пользуйтесь на здоровье.

    Скачать файл для редактирования и распечатывания можно ниже по ссылке.

    Эксель таблица с понятными для пониманиями схемами в картинках.
    ENGLISH TENSE в эксель таблице.

    Список частотных слов от Оксфард 3000 — USA Oxford 3000 слов.

    Список частотных слов от Оксфард 5000 — USA Oxford 5000 слов.

    Список частотных слов для печати 7000 в эксель USA 7000 слов распечатать.

    Список частотных слов для печати 7000 в PDF 46 листов или 46/2 = 23 листа А4 формата USA 7000 слов распечатать PDF.

    ]]>
    https://t-jo.com/anglijskie-vremena-super-prostaya-dlya-ponimaniya-shpargalka-english-tense.html/feed 0
    SASS — SCSS Шпаргалка для глупеньких. https://t-jo.com/sass-scss-shpargalka-dlya-glupenkih.html https://t-jo.com/sass-scss-shpargalka-dlya-glupenkih.html#respond Mon, 03 Jun 2019 16:38:59 +0000 https://t-jo.com/?p=397 Webstorm настройки



    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta http-equiv="X-UA-Compatible" content="IE=Edge">
      <title>Example SASS -SCSS</title>
      <link rel="stylesheet" href="/css/style.css">
    </head>
    <body>
    <h1>Hello world!</h1>
    <h2 class="one">Hello world 2!</h2>
    <h3 class="two">Hello world 3!</h3>
    </body>
    </html>


    style.scss

    /* Так делаются комментарии */
    
    @import "reset"; //импорт других разных блоков в один файл: хедер, футер, сайдбар, меню, контент и т.п. То что начинается на _reset по умолчанию не создается файл .css с таким же названием.
    @import "variables";
    
    body {
      color: $fontcolor;
      background: $arcolor;
    }
    nav {
      color: white;
        li {
          color: yellow;
        }
    }
    .link {
      color: greenyellow;
      &:hover{
        color: yellow;
      }
    }
    .borradbott {
      @include bradius(10px); //Миксины задаются "@mixin bradius($rad)" - с парраметрами - переменно, что облегчает интегрирование больших кусков кода.
      @extend .link; //расширяется - тоесть наследует стили указанного селлектора.
    }
    .one {
     color: $colorte;
     widows: $w;
     margin: 0 auto;
     @include bradius(5px) { //Расширили Миксин, потому что в нем прописано свойство @content
      background: #6c97aa;
     }
    }
    .two {
     @extend .one;
     color: darken($colorte, 15%); // В SASS существует множество готовых функций, чтобы выполнять самые разнообразные цели, предположим эта затемняет цвет на 15 процентов.
     width: $w/3;
    }
    @debug -(10px - 15px);
    


    variables.scss

    $arcolor: #7ed8e2;
    $fontcolor: #fdfbfb;
    $fsb: 14px; //базовый размер шрифта темы, делается для того, чтобы изменить шрифт разом
    $ff: Roboto, Helvetica, Arial, sans-serif;
    $colorte: #507f9b; //тестовый цвет
    $w: (70% + 5%); //ширина // Все математические операции оборачиваем в скобки!!! Одна единица измерения: пиксели, проценты и т.п.


    _reset.scss

    * {
      margin: 0;
      padding: 0;
    }
    
    @mixin bradius($rad: 3px){ // Параметры можно задавать со значением по умолчанию
      -webkit-border-radius: $rad;
      border-radius: $rad;
      @content; //можно не пладить миксины из-за пару свойств, а создать этот парметр, тога к месту где инклюдится данный микс можно добовлят дополнительные свойства через {css свойства}
    }
    @mixin padd($padd...) { // чтобы можно было передавать несколько значений в парметр, ставим "..." @include padd (20px 22px 27px 2px)
      padding: $padd;
    }
    
    @mixin grid($cols, $margin){
      float: left;
      background: blueviolet;
      margin-right: $margin;
      margin-bottom: $margin;
      height: 150px;
    
      @if($cols >=5 ) { //можно задавать условные операторы
        width: 100%;
        margin-right: 0;
      }
      @else {
        width: ((100% -(($cols - 1) * $margin)) / $cols) // можно задавать сложные математические функции для высчита колонок в процентах на гридах, где можно будет потом легко менять их колличество и дизайн.
    }
    
      &:nth-child(#{$cols}n) { //высчитывает колличество дочерних эллементов и проставляет последний.
        margin-right: 0;
      }
    }
    @for $i from 24 to 29 {}
    

    По мотивам этой сказки —

    SASS and LESS

    ]]>
    https://t-jo.com/sass-scss-shpargalka-dlya-glupenkih.html/feed 0
    LESS шпора. https://t-jo.com/less-shpora.html https://t-jo.com/less-shpora.html#respond Mon, 29 Apr 2019 16:38:02 +0000 https://t-jo.com/?p=390 ВСЕ ФУНКЦИИ LESS

    ВСЕ ВОЗМОЖНОСТИ LESS НА ПРОФЕССИОНАЛЬНОМ УРОВНЕ.

    Коротко о самом используемом:

    Что такое препроцессор CSS?

    CSS препроцессоры не заменяют CSS. На самом деле, препроцессоры просто дают нам дополнительные функциональные возможности, такие как переменные,  операторы и функции, с которыми мы можем упростить создание и управление файлами CSS.

    Препроцессоры позволяют определить свойства один раз и затем повторно использовать их в нашем проекте, что в гораздо более функционально, чего простой CSS делать не может.

    Что такое LESS?

    LESS относительно новый препроцессор, ему около 4 лет. Его часто сравнивают с SASS, более старым препроцессором. Как и LESS, так и SASS, имеют свои корни в языке программирования Ruby, но в настоящее время используются гораздо шире. LESS теперь основан на Javascript.

    Люди, использующие LESS, могут создать заранее определенный набор цветов для своего сайта. Они могут определить особый стиль один раз и затем многократно использовать его везде, где необходимо.

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

    Чтобы воспользоваться тем, что LESS может предложить, мы сначала должны сохранить наш CSS-код в файл с расширением .less. Использовать LESS очень просто. Он работает как на веб-сервере, так и на стороне клиента.

    Самый простой способ начать работу на стороне клиента. Добавьте ссылку на less-файл на вашей веб-странице, так же как добавляете CSS-файл, но с атрибутом rel установленным как «stylesheet/less», а затем файл less.js, который можно загрузить с www.lesscss.org

    <link rel=»stylesheet/less» type=»text/css» href=»/styles.less» />
    <script src=»/less.js» type=»text/javascript»></script>

    Этот метод работает только в современных браузерах и подходит только для использования на локальном сервере. Для рабочего сайта необходима предварительная компиляция с применением Node на веб-сервере или различные инструменты от сторонних производителей.

    Некоторые из инструментов сторонних производителей:

    LESS Синтаксис: Переменные

    Одни из вещей, которые часто повторяются в файле CSS — это цвета. Одни и те же цвета повторяются в файлах CSS для разных элементов, заголовков, ссылок и т.д.

    #header {
    background-color: #CCCCCC
    }
    .aside {
    background-color: #CCCCCC;
    color: #000000;
    .sidebar a {
    border-bottom: 1px solid #CCCCCC;
    }

    В LESS, мы можем просто объявить переменную для сохранения цвета, вот так:

    @grey: #CCCCCC;

    И затем повторно использовать это так:

    #header {
    background-color: @grey;
    }
    .aside {
    background-color: @grey;
    color: #000000;
    }
    .sidebar a {
    border-bottom: 1px solid @grey;
    }

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

    LESS Синтаксис: Mixins

    Переменные полезны для повторного использования отдельных значений, таких как цвет, размер шрифта. В LESS с mixins мы можем использовать набор свойств из одного или нескольких правил. Mixins могут быть использованы, например, для определения стиля границ, размер шрифта и т.д.

    .border_top_bottom {
    border-top: dotted 1px #000;
    border-bottom: solid 2px #000;
    }

    В приведенном выше коде мы определили верхнюю и нижнюю границу внутри класса border_top_bottom. Теперь, когда мы хотим добавить эти стили к другими элементами, мы можем использовать их так:

    #header {
    color: #000000;
    .border_top_bottom;
    }
    .content a {
    color: #000000;
    .border_top_bottom;
    }

    Приведенный выше код выведет следующее:

    #header {
    color: #000000;
    border-top: dotted 1px #000000;
    border-bottom: solid 2px #000000;
    }
    .content a {
    color: #000000;
    border-top: dotted 1px #000000;
    border-bottom: solid 2px #000000;
    }

    Чтобы добавить больше гибкости, mixins также позволят нам передавать переменные (называемые здесь параметры). Например:

    .border-radius (@radius: 5px) {
    border-radius: @radius;
    -moz-border-radius: @radius;
    -webkit-border-radius: @radius;
    }

    В приведенном выше примере, мы задали параметр для радиуса. Мы также дали ему значение по умолчанию равное 5px, которое не является обязательным. Теперь мы хотим добавить это для класса button:

    .button {
    .border-radius(6px);
    }

    Если мы уберем 6px из приведенного выше примера, границы радиуса будут заданы по умолчанию, который указан в нашем классе border-radius и равен 5px.

    Синтаксис LESS: Nesting

    Одна из вещей, распространеных в CSS, это длинные селекторы, которые нам часто приходится писать для стилей дочерних элементов:

    nav { }
    nav li { }
    nav li a { }
    nav li a:hover { }
    nav li a.active { }
    nav li a.visited { }

    И если у вас есть несколько подуровней выпадающего меню, то это становится более сложным для понимания. В LESS это может быть записано как:

    nav {
    li {
    a {
    &:hover { }
    &:active { }
    &:visited { }
    }
    }
    }

    Символ «&» используется перед псевдо-классами в нашей вложенной структуре. Описанную выше конструкцию гораздо легче понять и показать иерархию именно так, как она есть.

    Синтаксис LESS: Операции

    LESS также позволяет нам выполнять такие операции как сложение, вычитание, умножение и деление числовых значений, цветов и переменных в таблице стилей. Допустим, мы объявили переменную padding, которая применяется ко всем нашим элементам H1. Но теперь мы хотим добавить дополнительный отступ для нашего заголовка на главной странице. Мы можем сделать это следующим образом:

    @padding: 5px;
    h1 {
    padding: @padding;
    }
    h1.page-title {
    padding: (@padding * 2);
    }

    Значение по умолчанию будет умножено на 2, что задаст заголовку на главной странице padding равный 10px. Операции должны выполняться в круглых скобках, однако они могут также работать без скобок.

    Синтаксис LESS: Scope

    Область действия в LESS похожа на область действия в других языках программирования. Переменные и mixins сначала ищутся на локальном уровне, и если они не найдены, то компилятор будет искать их в родительской области и так далее.

    @var: red;

    #page {
    @var: white;

    #header {
    color: @var; // выведет white
    }
    }
    #footer {
    color: @var; // выведет red
    }

    Заключение

    Эта статья не охватывает все что LESS может предложить. Цель состоит в том, чтобы объяснить, как используя LESS можно помочь нам сделать наш CSS более динамичным. CSS препроцессоры позволяют нам создавать и управлять CSS более эффективно. Даже имея хорошее понимание CSS, LESS позволит нам использовать его более продуктивно.

    SASS and LESS

    ]]>
    https://t-jo.com/less-shpora.html/feed 0
    Lazy load подгрузка картинок с задержкой, js плагин встанет на любую CMS: Webasyst, CS Cart, Magento, 1C-Bitrix и многие другие. https://t-jo.com/lazy-load-podgruzka-kartinok-s-zaderzhkoj-js-plagin-vstanet-na-lyubuyu-cms-webasyst-cs-cart-magento-1c-bitrix-i-mnogie-drugie.html https://t-jo.com/lazy-load-podgruzka-kartinok-s-zaderzhkoj-js-plagin-vstanet-na-lyubuyu-cms-webasyst-cs-cart-magento-1c-bitrix-i-mnogie-drugie.html#respond Mon, 01 Apr 2019 19:01:27 +0000 https://t-jo.com/?p=372 Google Page Speed нам дал указание к работе по нашим сайтам:

    Чтобы уменьшить время до начала взаимодействия, рекомендуем использовать принцип lazy loading для скрытых изображений после того, как все важные ресурсы будут загружены

    Не вопрос, сделаем отложенную загрузку скрытых изображений.

    Напоминалка самому себе, как сделать под требовательный Google Page Speed, одну из его задач. Никаких разных версий jQuery, а то устанешь следить за ПО от версии к версии, только js по возможности. Увы плагин писать не целесообразно, только правка тем. И так, вот схема:

    1) img стандарт — тег в html

    Используем Lazysizes — https://github.com/aFarkas/lazysizes
    Можно в тело темы вставить и CDN — ссылку на скрипт

    <script src="https://unpkg.com/lazysizes@4.1.7/lazysizes.js"></script>

    Основной массив настроечек, который мы видим в опенсорс коде:

    var lazySizesDefaults = {
    lazyClass: 'lazyload',
    loadedClass: 'lazyloaded',
    loadingClass: 'lazyloading',
    preloadClass: 'lazypreload',
    errorClass: 'lazyerror',
    //strictClass: 'lazystrict',
    autosizesClass: 'lazyautosizes',
    srcAttr: 'data-src',
    srcsetAttr: 'data-srcset',
    sizesAttr: 'data-sizes',
    //preloadAfterLoad: false,
    minSize: 40,
    customMedia: {},
    init: true,
    expFactor: 1.5,
    hFac: 0.8,
    loadMode: 2,
    loadHidden: true,
    ricTimeout: 0,
    throttleDelay: 125,
    };

    Наглядный пример ленивого тега img с разными извращенными настройками перечисленными в верхнем массиве — http://afarkas.github.io/lazysizes/
    Короче скрипт реально крут, чего там только нельзя залЭзить. )))

    Ну, а если по самому легкому, то подправить тег img и crs меняем на data-src, на примере популярно CMS Вебасист, со ставкой смарти кода.

    <img class="lazyload" data-src="https://site.com/wa-data/public/shop/img/2019/01/beautyview/{if $wa->isMobile()}mobile/{/if}topshort.jpg" alt="Я ленивая картинка">

    2) CSS — Background url

    Кто-то уверял, что для сайта лучше по возможности использовать не тег img, а background через css url правило для вставки изображений. Вот так появляется лишняя работа, очередной горе СЕО специалист бредил, лучше бы программирование учил и зачем я уши развесил))). Один стандарт везде — стандартизация, вот сила. В итоге оказались в такой ситуации, что для бэкграунда нужно сделать совсем не так, как в первом пункте, а по другому и подцепить еще один скрипт.

     

     

    Подсоединяем вот этот, только минифицированый скрипт https://github.com/aFarkas/lazysizes/blob/gh-pages/plugins/bgset/ls.bgset.js в тело страницы, он лежит там же в родительской директории, где его не сжатая версия, либо сожмите этот сами.
    <script src="https://site.com/wa-content/js/lazyload/ls.bgset.min.js"></script>

     

    Для того, чтобы было проще Вам понять суть, мы выносим url стиль из css в нужный нам тег, у меня это сделано опять в комбинации со smarty

    <div class="advantage__content" style="background: url(https://site.com/wa-data/public/shop/img/2019/01/advartages/{if $wa->isMobile()}AdvartageMobile.jpg{else}AdvartageDesctop.jpg{/if}) no-repeat center;">

    и приводим этот код к нужному виду, для этого второго подсоединенного js скрипта на html страницу.

    <div class="advantage__content lazyload" data-bgset="https://www.fvsport.com/wa-data/public/shop/img/2019/01/advartages/{if $wa->isMobile()}AdvartageMobile.jpg{else}AdvartageDesctop.jpg{/if}">

     

    Все проверяем эти две интеграции через консоль Chrome DevTools вкладка «Network»
    Обновляем страницу. Ждем в шапке пока она вся прогрузица, зачищаем табло нажатием на значек clear(кружок перечеркнутый линией), крутим вниз до фоток.
    Ура, инициатор загрузок картинок скрипт lazysizes! У меня получилось, надеюсь и у Вас.

    3) Формат изображений webp.

    Допустим нужно интегрировать в ленивую подгрузку также изображения формата webp.

    Вес так же просто как в первом и втором пункте. Вот такой код:

    <picture>

    <source type="image/webp" srcset="https://site.com/wa-data/public/shop/img/2019/03/beautyview/{if $wa->isMobile()}mobile/{/if}Clothes-for-dancing.webp">

    <img src="https://site.com/wa-data/public/shop/img/2019/03/beautyview/{if $wa->isMobile()}mobile/{/if}Clothes-for-dancing.jpg" alt="одежда для танцев">

    </picture>

    Преобразуем к такому:

    <picture>

    <source type="image/webp" class="lazyload" data-srcset="https://site.com/wa-data/public/shop/img/2019/03/beautyview/{if $wa->isMobile()}mobile/{/if}Clothes-for-dancing.webp">

    <img class="lazyload" data-src="https://site.com/wa-data/public/shop/img/2019/03/beautyview/{if $wa->isMobile()}mobile/{/if}Clothes-for-dancing.jpg" alt="одежда для танцев">

    </picture>

     

    Мне просьба не писать и вопросы умные не задавать, а если задаете, то донат вперед!)

    ]]>
    https://t-jo.com/lazy-load-podgruzka-kartinok-s-zaderzhkoj-js-plagin-vstanet-na-lyubuyu-cms-webasyst-cs-cart-magento-1c-bitrix-i-mnogie-drugie.html/feed 0