• Адаптивный список в несколько столбцов?

    IgorPI
    @IgorPI Автор вопроса
    Решение!

    // Загрузка городов
          let cities_items = await getCities({
            country_id: 3159,
            offset: 0,
            count: 50
          });
    
          // Загрузка регионов
          let regions_items = await getRegions({
            country_id: 3159
          });
    
          const max_cols = 4
    
          let regions = []
          let regions_size = Math.ceil(regions_items.length / max_cols); //размер подмассива
          for (let i = 0; i < Math.ceil(regions_items.length / regions_size); i++) {
            regions[i] = regions_items.slice((i * regions_size), (i * regions_size) + regions_size);
          }
    
          let cities = []
          let cities_size = Math.ceil(cities_items.length / max_cols); //размер подмассива
          for (let i = 0; i < Math.ceil(cities_items.length / cities_size); i++) {
            cities[i] = cities_items.slice((i * cities_size), (i * cities_size) + cities_size);
          }


    <v-row>
          <v-col md="12" cols="12">
            <v-card class="pb-5">
              <v-card-title>Популярные города</v-card-title>
              <v-card-text>
                <v-row>
                  <v-col
                    md="3"
                    sm="6"
                    cols="12"
                    v-for="(cities_item, cities_index) in cities"
                    :key="cities_index"
                    class="pa-0 text-left"
                  >
                    <ul>
                      <li v-for="(item, index) in cities_item">{{ item.name }}</li>
                    </ul>
                  </v-col>
    
                </v-row>
              </v-card-text>
            </v-card>
          </v-col>
    
          <v-col md="12" cols="12">
            <v-card class="pb-5">
              <v-card-title>Регионы России</v-card-title>
              <v-card-text>
                <v-row>
                  <v-col
                    md="3"
                    sm="6"
                    cols="12"
                    v-for="(regions_item, region_index) in regions"
                    :key="region_index"
                    class="pa-0 text-left"
                  >
                    <ul>
                      <li v-for="(item, index) in regions_item">{{ item.name }}</li>
                    </ul>
                  </v-col>
                </v-row>
              </v-card-text>
            </v-card>
          </v-col>
        </v-row>


    image
    Ответ написан
    Комментировать
  • Как заставить apache/nginx под докером работать вместе с локальным nginx?

    IgorPI
    @IgorPI
    Я тоже совсем недавно работаю с докером.
    Поделюсь своим опытом.

    Использую Docker-compose.

    Например мне нужно для сайта, открыть внешний доступ, который крутится где-то там в докере.
    # Development configuration
    version: "3.1"
    
    services:
    
      app:
        container_name: rusaddress.app
        build:
          context: .
          dockerfile: ./docker/php/Dockerfile-dev
        volumes:
          - .:/www
          - ./docker/php/log:/var/log
        depends_on:
          - db
        links:
          - db
        expose:
          - 9000
    
    
    
      # Nginx api server
      nginx-api:
        container_name: rusaddress.nginx-api
        restart: always
        build: ./docker/nginx
        volumes:
          - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./docker/nginx/sites-enabled/vhost-api.rusaddress.conf:/etc/nginx/sites-enabled/vhost-api.rusaddress.conf
        ports:
          - "127.0.0.150:8090:90"
        depends_on:
          - app
        expose:
          - "90"
        command: ["nginx", "-g", "daemon off;"]
    ...


    Конфигурация сервера который крутится в докере
    /docker/nginx/sites-enabled/vhost-api.rusaddress.conf
    server {
        listen                          90;
    
        client_max_body_size            208M;
        access_log                      /var/log/nginx/api.access.log;
        root                            /www/public;
    
        location / {
            try_files                   $uri $uri/ /api.php?$query_string;
        }
    
        location ~ \.php$ {
            fastcgi_split_path_info     ^(.+\.php)(/.+)$;
            fastcgi_pass                app:9000;
            fastcgi_index               api.php;
            include                     fastcgi_params;
            fastcgi_param               SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param               PATH_INFO $fastcgi_path_info;
        }
    }


    Теперь у меня сайт доступен локально
    по адресу 127.0.0.150:8090

    Как я понял, у Вас именно с этим проблема.

    Теперь нам как то нужно открыть внешний доступ, для этого делаем следующее...

    На реальном хосте, настраиваем nginx

    server {
        listen      			%ip%:%httpport%;
        server_name 		api.rusaddress.local;
       
        access_log  			"%sprogdir%/userdata/logs/api.rusaddress.local.access.log combined";
        error_log   			"%sprogdir%/userdata/logs/api.rusaddress.local.error.log error";
    	
    	add_header				"Access-Control-Allow-Origin" "*";
    	add_header				"Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept, Authorization";
    	add_header				"Access-Control-Request-Methods" "GET, POST, OPTIONS";
    
        location / {
    	proxy_pass  		http://127.0.0.150:8090;	
            proxy_set_header	Host $host;
            proxy_set_header	X-Real-IP $remote_addr;
            proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header	X-Forwarded-Host $server_name;
        }
    }


    Обратите внимание на адрес 127.0.0.150:8090

    Теперь сайт доступен по api.rusaddress.local

    api.rusaddress.local <---- это ваш публичный адрес

    В моём случае локальный, так как я это сделал для себя, для разработки.
    Восстановил картину, как это будет работать на реальном сервере.
    Ответ написан
    1 комментарий
  • Как правильно обработать большой JSON файл, расположенный на удаленном сервере?

    IgorPI
    @IgorPI
    Интересно, за каким это **** 15 GB в JSON.
    Стандартными средствами не прочитать.

    Как минимум нужно разбить данные, по 1 MB, можно чуть больше.

    json_decode и file_get_contents не осилят эту задачу.
    Я уверен, что у вас недостаточно памяти, для решения этой задачи.
    Даже если на сервере 30 GB, всё ровно не хватит, так как в "оперативке" данных будет гораздо больше.

    Нужно писать парсер, локально парсить и больше так не делать!

    Побайтное чтение файла.
    3 строчки кода на delphi.

    На данный момент, в одном проекте я работаю с файлом 1,5 GB
    И поверьте, что бы подсчитать количество строк в нём, требуется 2 часа как минимум,
    Учитывая характеристики ПК, где выполняется эта программа.
    Но я себя хорошо чувствую с побайтовым чтеним.
    Да хоть 100 GB, если файловая система позволяет.
    Ответ написан
    7 комментариев
  • Будет ли падение в производительности, если несколько "сервисов" (nginx + php-fpm) сделать в одном Dockerfile?

    IgorPI
    @IgorPI
    Docker-compose для этих целей.
    Само название говорит за себя "compose"

    Да хоть тысячу сервисов, главное что бы железо было.
    Ответ написан
    Комментировать
  • Vue auth, что делать с валидным токеном пришедшим с сервера?

    IgorPI
    @IgorPI
    Сохраните токен в cookie
    Или в localstorage.
    Только нужно сделать так, что бы этот самый токен не имел силы, выступая от другого браузера.
    Ответ написан
  • Авторизация php без sql db?

    IgorPI
    @IgorPI
    JWT

    Позволяет выдавать токены и выполнять их проверку.
    Токены хранить не нужно.

    Например, получил токен, теперь это твоя подпись.
    Когда юзер придёт к тебе и покажет тебе свой токен.
    Ты будешь проверять его подпись.

    Сам токен выглядит так
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


    Он разделён на три части
    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 - Заголовок, информация об алгоритме и типе токена
    eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ - Что-то от себя, любые данные
    SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c - Подпись


    Подробнее
    Ответ написан
    Комментировать
  • Docker Linux containers? как сменить ip контейнеров?

    IgorPI
    @IgorPI Автор вопроса
    Проблема решилась, только после того как я открыл диапазон портов 3000-4000 в Windows
    Конфигурацию docker-compose оставил прежнюю.
    Ответ написан
    Комментировать
  • Как сделать все содержание полей в бд с маленькой буквы?

    IgorPI
    @IgorPI
    UPDATE mytable SET mytable.name = LOWER(mytable.name);
    Ответ написан
    Комментировать
  • Нужен ли JS в back-end на PHP?

    IgorPI
    @IgorPI
    JS используют везде где только можно!
    И на сервере и на клиенте, и можно вообще без PHP обойтись.
    Можно писать мобильные приложения.

    PHP занимает 80% рынка серверных приложений


    1.
    JavaScript в браузере.
    PHP на сервере.

    2.
    JavaScript в браузере.
    JavaScript на сервере.

    "Если ссаный хостинг"
    JavaScript в браузере.
    PHP на сервере.
    Ответ написан
    Комментировать
  • Как правильно спарсить на phpQuery и разложить все по полочкам?

    IgorPI
    @IgorPI
    Для того что бы все было по полочками.

    Создайте объект.

    Например:

    $Street = new stdClass();
    $Street->street_name = "Генерала Лизюкова";
    $Street->street_type = "улица";
    
    $City = new stdClass();
    $City->city_name = "Воронеж"
    
    $MyObjectItem = new stdClass();
    $MyObjectItem->street = $Street;
    $MyObjectItem->city = $City;
    
    $MyObject = new stdClass();
    
    $MyObject->count = 1;
    $MyObject->items = []; // Сюда положим объекты
    $MyObject->items[] = $MyObjectItem;
    
    file_put_contents('data.json', json_encode($MyObject));


    И да, вот это unset($array_kldr); совсем не обязательно!
    На случай если далее скрипт не предполагает выполнения!
    Лишние такты для освобождения памяти.
    Ответ написан
    Комментировать
  • Почему кириллица выводится в виде знаков вопроса?

    IgorPI
    @IgorPI
    Есть вероятность что сам file PHP не, utf 8
    Ответ написан
    Комментировать
  • Как проверить работоспособность сайта на новой версии php?

    IgorPI
    @IgorPI
    Есть вероятность что зависимости тоже для PHP 5.4

    Как проверить?

    Как минимум запустить.
    Ответ написан
    Комментировать
  • Как в денвер переопределить видимость папки?

    IgorPI
    @IgorPI
    1. Open Server
    2. Проект может находиться в любой папке

    Например:
    5d74133dc35bd144466990.png
    Если перейдём в каталог "api.catalog.local"
    5d74138d87a22127487012.png

    Ха, нет файлов проекта, а он есть.
    Он лежит в другом каталоге,

    Open Server сканирует каталоги и если есть файл Nginx_1.11_vhost.conf
    Считывает и конфигурирует сервер.

    Таким образом
    Мы можем положить проект в любой каталог.
    Например, если проект подразумевает несколько nginx серверов для
    api.domain.com
    cp.domain.com
    domain.com

    А сами файлы лежат в каталоге domain

    Иллюстрация:
    5d741528486fe111034613.png
    Ответ написан
  • Как удалить Docker из Windows?

    IgorPI
    @IgorPI Автор вопроса
    PowerShell
    $ErrorActionPreference = "SilentlyContinue"
    
        kill -force -processname 'Docker for Windows', com.docker.db, vpnkit, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd
    
        try {
            ./MobyLinux.ps1 -Destroy
        } Catch {}
    
        $service = Get-WmiObject -Class Win32_Service -Filter "Name='com.docker.service'"
        if ($service) { $service.StopService() }
        if ($service) { $service.Delete() }
        Start-Sleep -s 5
        Remove-Item -Recurse -Force "~/AppData/Local/Docker"
        Remove-Item -Recurse -Force "~/AppData/Roaming/Docker"
        if (Test-Path "C:\ProgramData\Docker") { takeown.exe /F "C:\ProgramData\Docker" /R /A /D Y }
        if (Test-Path "C:\ProgramData\Docker") { icacls "C:\ProgramData\Docker\" /T /C /grant Administrators:F }
        Remove-Item -Recurse -Force "C:\ProgramData\Docker"
        Remove-Item -Recurse -Force "C:\Program Files\Docker"
        Remove-Item -Recurse -Force "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker"
        Remove-Item -Force "C:\Users\Public\Desktop\Docker for Windows.lnk"
        Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath}  | ? { $_.DisplayName -eq "Docker" } | Remove-Item -Recurse -Force
        Get-ChildItem HKLM:\software\classes\installer\products | % {Get-ItemProperty $_.pspath} | ? { $_.ProductName -eq "Docker" } | Remove-Item -Recurse -Force
        Get-Item 'HKLM:\software\Docker Inc.' | Remove-Item -Recurse -Force
        Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name "Docker for Windows" | Remove-Item -Recurse -Force
        #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains("Docker for Windows.exe") } | Remove-Item -Recurse -Force $_.PSPath
        #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | Where-Object { $(Get-ItemPropertyValue $_) -Contains "Docker" }


    Но не получится выполнить скрипт, с дефолтной конфигурацией PowerShell
    Для этого, выполните от имени администратора
    Set-ExecutionPolicy RemoteSigned

    А потом

    .\remove-docker.ps1

    + Следует вычистить весь хлам из реестра windows
    Ответ написан
    Комментировать
  • Как вставить изображение в ListView используя DynamicAppearance?

    IgorPI
    @IgorPI Автор вопроса
    Решение!

    lvProjectItem.Data['image_status']:= TValue.From(ImageList.Bitmap(TSize.Create(32,32), 1));
    Ответ написан
    Комментировать
  • Как правильно построить архитектуру приложения Vue?

    IgorPI
    @IgorPI
    Всё гораздо проще.
    Использовать vue как клиент
    И мыслить так как это клиентское приложение.
    Хоть оно и имеет свой собственный аля клиент-сервер и может работать без back-end.
    На этом можно с vue покончить.

    Далее в игру вступает back end

    Вот и делайте архитектуру там.
    Продукты, корзины, заказы, хранение данных, удаление, разделение ролей и так далее.

    Отдавайте vue json

    А vue это всего лишь 1 единица клиента.
    1 единица приложения, которая оторвется от сервера и будет работать в браузере не используя свой сервер.

    PS, vue из коробки не настроен ssr.
    А вообще можно использовать nuxt
    Теже яйца только с боку.
    Только там уже настроен ssr.
    Ответ написан
    Комментировать
  • Как работает Наследование и область видимости в PHP?

    IgorPI
    @IgorPI
    Давай по порядку.
    По теме наследования.

    Небольшой пример.
    <?php
    
    
    namespace Engine;
    
    
    abstract class Foundation
    {
        /**
         * Арматура (mm)
         * Я не хочу что бы моя арматура торчала из моего фундамента
         * Поэтому принял решение что этот параметр не выйдет за пределы класса
         * @var integer
         */
        private $fittings = 15;
    
    
        /**
         * Балка
         * Балка будет видна, прежде чем я постелю полы
         * Я планирую ещё работать с полом и мне нужен доступ к балкам
         * Которые лежат на фундаменте
         * @var string
         */
        protected $beam = "Охренительно ровная балка";
    
    
        /**
         * Мне нужен доступ в подвал
         * Я так же могу получить доступ к своему фундаменту
         * И возможно подогнуть торчащу арматуру из моего горе фундамента
         * @var string
         */
        public $сellar = "Вход в погреб";
    
        /**
         * Foundation constructor.
         */
        public function __construct()
        {
            // Строю дом
        }
    }


    <?php
    
    
    namespace Engine;
    
    /**
     * Стены
     * Я наслудую базовый класс Foundation
     * У меня есть доступ к балке.
     * Но у меня нет доступа к арматуре
     * Арматура была залита бетоном.
     *
     * Class Walls
     * @package Engine
     */
    class Walls extends Foundation
    {
        /**
         * Окно
         * @var string
         */
        protected $window;
    
        /**
         * Дверь
         * @var string
         */
        protected $door;
    
        /**
         * Walls constructor.
         */
        public function __construct()
        {
            parent::__construct();
    
            $beam = $this->beam; // Пожалуй воспользуюсь балкой
        }
    
    
        // здесь что-то будем делать со стенами
    }


    <?php
    
    
    namespace Engine;
    
    
    /**
     * Крыша
     * Class Roof
     * @package Engine
     */
    class Roof extends Walls
    {
        /**
         * Roof constructor.
         */
        public function __construct()
        {
            parent::__construct();
            // Я всё ещё имею к ним доступ, но только внутри класса
            $this->beam;
            $this->door;
            $this->window;
            $this->сellar;
        }
    }


    Строю дом, но у меня есть только доступ к подвалу (((
    $home = new Walls();
    $home->сellar;


    Не умею стоить дома.

    Прилагаю диаграмму
    5d6d9b8e96b10054415644.png

    Наследование классов можно сравнить с наследованием в жизни, от отца к сыну./
    У тебя или есть наследство
    Или нет
    Или есть, но ты воспользоваться не можешь.

    Главное что есть вход в подвал!
    Это важно!
    Ответ написан
    3 комментария
  • Как определить, был ли товар помещён в корзину?

    IgorPI
    @IgorPI
    <template>
      <b-row>
        <b-col sm="6" lg="4" xl="3" v-for="product in products" :key="product.id">
          <div class="image" v-lazy:background-image="product.image">
            Видно если нажали "Купить".
          </div>
          <div class="d-flex justify-content-between">
            <div>
              <p class="mb-0">{{product.name}}</p>
              <p class="mb-0">{{product.price}} грн.</p>
            </div>
            <b-button class="align-self-center" variant="outline-dark" @click="buyProduct(product)">Купить</b-button>
          </div>
        </b-col>
      </b-row>
    </template>
    
    <script lang="javascript">
      import { BRow, BCol, BButton } from 'bootstrap-vue'
      import { mapState, mapActions } from 'vuex'
    
      export default {
        components: {
          BRow,
          BCol,
          BButton
        },
        computed: mapState({
          products: state => state.product.all
        }),
        methods: {
          buyProduct(product){
            console.log(product)
          }
        }
      }
    </script>


    По поводу кнопки можно так
    <b-button class="align-self-center" variant="outline-dark" @click.once="buyProduct(product.id)">Купить</b-button>
    Ответ написан
    Комментировать
  • Как подключить Vue в пакете Laravel?

    IgorPI
    @IgorPI
    Vue самостоятельное приложение!
    Он может работать отдельно на любом сервере в любой стране мира!
    Нет ни какой связи между Vue и Laravel кроме как API по протоколу http

    Располагайте Vue где вам удобно можете вообще в корневой папке root.
    Для удобства может сделать так
    5d6bfa43cd486731611606.png
    Но так уже делаю я.
    Выберите любой другой способ.
    Ответ написан