Задать вопрос
  • Как исправить сортировку в MySql?

    Yunique33
    @Yunique33
    SELECT CAST(SUBSTRING_INDEX(column, 'D', -1) as UNSIGNED) AS col
    FROM table
    ORDER BY col;
    Ответ написан
    5 комментариев
  • Как связать данные, полученные из store?

    Nolis
    @Nolis
    it-гопник
    используй get и set в computed св-ве.
    я думаю это будет то, что тебе нужно
    computed: {
      fullName: {
        // геттер:
        get: function () {
          return this.firstName + ' ' + this.lastName
        },
        // сеттер:
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
        }
      }
    }
    Ответ написан
    Комментировать
  • Где принято размещать функции проверки наличия авторизации пользователя в приложении при его старте, на примере vue cli?

    @Arsync
    В навигационных хуках роутера (vue-router). Любая навигация по приложению, включая начальную страницу, проходит через роутер (если он используется). И там есть beforeEach((to, from, next) => {}), который можно сделать асинхронным. Этот хук способен блокировать открытие целевой страницы. Если маршрут не авторизован, вызываешь next с указанием вместо запрошенного пути страницы входа. Более того, раз уж речь зашла об авторизации, на путь в конфигурации роутера можно добавить meta: { myFieldName: "admin" } и затем понять, какая роль требуется указанному маршруту. Для этого в цикле нужно перебрать все части to.matched и посмотреть, есть ли среди них та, у которой указана meta с заполненным myFieldName.

    Под это дело даже официальный пример есть, хоть он и написан для проверки успешной аутентификации пользователя.
    Ответ написан
    2 комментария
  • Как правильно составить запрос SQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хоть и не очень элегантно, но благодаря удобству ПДО всё же и не очень громоздко,
    $params = [];
    $sql = "SELECT * FROM `brands` ";
    if (!empty($_GET['district'])) {
        $sql .= "WHERE `district` = ?";
        $params[] = $_GET['district'];
    }
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);


    Таким же образом можно добавлять и другие условия.
    Ответ написан
    Комментировать
  • Как защитить get маршруты?

    Fragster
    @Fragster
    помогло? отметь решением!
    От совсем тупых поможет дополнительный заголовок в запросе, посылаемом js и проверкой его на сервере. Можно одноразовый.
    Ответ написан
    Комментировать
  • Как вы решили проблему адаптивности таблиц?

    @JustFreelance
    front-end developer
    Есть решение с использованием data-атрибутов и перестроением в блочный вид на CSS.

    https://codepen.io/just_freelance/pen/RwPvWmj
    Ответ написан
    1 комментарий
  • Метод call объекта-функции в js как работает?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    6 комментариев
  • Хочу создать 30 фан аккаунтов в инстаграме для рекламы основной страницы, сработает?

    Крутая идея, чел, конечно делай, неделя, и будешь популярнее Бузовой и грести бабло лопатой
    Ответ написан
    1 комментарий
  • Хватит ли Macbook pro 13 8гб озу для Frontend?

    lamer350
    @lamer350
    กำลังสูงสุด
    То что работа с фронтом на маке лучше - заблуждения! Одни и те же инструменты доступны как для Mac OS так и для Windows. Покупка мака вам не даст никаких преимуществ в этом плане.
    Что касается памяти - в вашем случае 8 Гб наверное пока хватит, на пару лет так точно. Как по мне нехватку Ram испытывают только люди с большим опытом, где задержки в доли секунды играют большую роль ибо кажется что машина за вами не поспевает, да и скорее всего зависит еще от скорости работы человека. Сама Mac OS прекрасно работает с любым количеством оперативной памяти, максимальные дискомфорт который это может доставить - это время от времени наблюдать работу swap, но чтобы это начать замечать нужны будут годы, а может вы из тех кого это и не будет напрягать (не попробуешь, не узнаешь). Возможно не будете просто замечать так как не знали лучшего) Все познается в сравнении.
    Ответ написан
  • Как можно сократить данный код?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    А js обязательно? Без js это легко можно сделать так:
    Ответ написан
    Комментировать
  • Как правильно написать цепочку promise для элементов в forEach?

    0xD34F
    @0xD34F Куратор тега JavaScript
    [...document.querySelectorAll('li')].reduce((acc, n) => {
      return acc.then(() => {
        return new Promise(r => {
          setTimeout(() => r(console.log(n.textContent)), 1000);
        });
      });
    }, Promise.resolve())
    Ответ написан
    Комментировать
  • Как правильно подключить vuejs?

    Fragster
    @Fragster
    помогло? отметь решением!
    https://ru.vuejs.org/v2/guide/components-edge-case... => https://jsfiddle.net/gbcykeq2/
    А вообще пора бы переходить на сборку фронтенда :)
    Ответ написан
    Комментировать
  • Можно ли сделать такую выборку?

    @Bonce
    Да, можем.
    Для этого необходимо найти самый поздний нуль и выбрать все единицы позднее нуля.
    Т.е.
    SELECT * FROM table_name
    WHERE date_column > (SELECT MAX(date_column) FROM table_name WHERE counter = 0)
    Ответ написан
    3 комментария
  • В чем смысл передачи данных таким образом?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    я про то что данные передаются через конструктор . Ведь можно просто в самом коде их определить того же файла
    В конструктор в данном случае передаются на данные, а объект, который будет строить запросы. Это же класс репозитория - он инкапсулирует запросы к БД, но пользуется при этом моделями Eloquent.

    class PortfoliosRepository extends Repository {
      public function __construct(Portfolio $portfolio) {
        $this->model = $portfolio;
      }
    
      // Этот метод, скорее всего, есть в базовом классе
      public function find(int $id): ?Portfolio
      {
        return $this->model->find($id);
      }
    
      // А это пример инкапсуляции сложной логики
      public function featured(): Collection
      {
        return $this->model
          ->with(['some', 'relations'])
          ->where('field', 'value')
          ->orWhere('other_field', 'value')
          ->orderBy('created_at')
          ->limit(42)
          ->get()
          ->each
          ->append('mutated_attribute');
      }
    }


    Используется этот класс так:
    $repository = new PortfoliosRepository(
      new Portfolio // <- не какое-то существующее портфолио из БД, а "пустой" объект
    );
    
    $repository->featured();
    Ответ написан
    Комментировать
  • Как сделать что бы функция не выполнялась быстрее чем 2s?

    Попробуйте Navigation Timing API:

    function startAfter (delay, callback) {
      const elapsed = Date.now() - performance.timing.navigationStart
    
      if (elapsed >= delay) {
        callback()
      } else {
        setTimeout(callback, delay - elapsed)
      }
    }
    
    document.addEventListener("DOMContentLoaded", () => {
      startAfter(2000, () => console.log("DOM fully loaded and parsed"))
    })
    Ответ написан
    Комментировать
  • Как сделать OG-превью для ссылок на Vue?

    Zoominger
    @Zoominger
    System Integrator
    Как я понял, надо при сохранении ссылки посылать туда запрос, затем парсить html документ, чтобы достать оттуда meta-теги которые относятся к OG? Или есть способ проще?

    Да. Куда уж проще-то?
    Ответ написан
    Комментировать
  • Как правильно сделать живой поиск?

    dimovich85
    @dimovich85 Куратор тега JavaScript
    https://u-academy.net/
    Для работы с полями ввода есть набор событий:
    1. focus - пользователь поставил фокус на поле ввода.
    2. blur - пользователь убрал фокус с элемента вода.
    3. input - пользователь как-то что-то ввел. Это лучше, чем keyup, ибо не надо проверки keyCode, второе потому что пользователь может в поле вставить текст, что тогда будет с Вашим keyUp? Событие input срабатывает каждый раз, как пользователь сделал изменение в поле ввода.
    4. change - пользователь ввел данные и убрал фокус с поля ввода, то есть это input + blur. Событие происходит не так часто, как input, но и не заставляет проверять value на изменение, как это придется делать при blur.
    5. submit - срабатывает на всей форме, при попытке отправить данные, в данной задаче скорее не интересное событие.

    Для живого поиска логично использовать input, по которому надо отправить текущее value через ajax на сервер и далее ответ куда-то распечатать. Вопрос в другом, ведь событие срабатывает довольно часто, и кто-то печатает так быстро, что и запрос-ответ не успеет, поэтому логично сделать тут debounce с задержкой в приблизительно 300мс, чтобы отправка/получение сработало когда пользователь притормозил в наборе текста или вообще прекратил ввод.
    Ответ написан
    Комментировать
  • Как пользоваться сервис контейнером в своих классах?

    mzcoding
    @mzcoding
    Web-Разработка
    Итак! Допустим у вас есть некая сущность для работы с платежами назовем ее Payment
    1. Создаем контракт и описываем (допустим) метод pay, отвечающий за (допустим) генерацию ссылки на оплату:
    namespace App\Contract;
    
    interface PaymentInterface
    {
       public function pay(): string;
    }

    2. Создаем сервис Payment и имплементим наш интерфейс + описываем метод pay и создаем конструктор еще, который (допустим) принимает некую ссылку на оплату (платежной системы) - Ссылку будем брать (допустим из конфига):
    namespace App\Service;
    
    use App\Contract\PaymentInterface;
    
    class Payment implements PaymentInterface
    {
        protected $paymentLink;
    
        public function __construct($paymentLink)
        {
            $this->paymentLink = $paymentLink;
        }
    
        public function pay(): string
        {
            return (string)$this->paymentLink;
        }
    }

    3. Создаем провайдер: php artisan make:provider PaymentProvider:
    namespace App\Providers;
    
    use App\Contract\PaymentInterface;
    use App\Service\Payment;
    use Illuminate\Support\ServiceProvider;
    
    class PaymentProvider extends ServiceProvider
    {
        /**
         * Register services.
         *
         * @return void
         */
        public function register()
        {
            $this->app->bind(PaymentInterface::class, function ($app) {
                return new Payment(config('app.payment_link'));
            });
        }
    
        /**
         * Bootstrap services.
         *
         * @return void
         */
        public function boot()
        {
            //
        }
    }

    4. Теперь надо зарегать наш провайдер в конфиге (config/app.php) - массив providers (в конец):
    App\Providers\PaymentProvider::class,

    5. Пропишем в config/app.php параметр payment_link:
    'payment_link' => 'https://money.yandex.ru’,

    6. Теперь создадим контроллер (или вызовем в существующем):
    namespace App\Http\Controllers;
    
    use App\Contract\PaymentInterface;
    
    class PaymentController
    {
        public function getPayment(PaymentInterface $payment)
        {
            dd($payment->pay());
        }
    
    }

    7. Готово )

    П.С: Обращаем внимание, что на вход принимаем интерфейс, а не реализацию
    П.П.С: Можно также вызывать в любом классе который зарегистрирован в контейнере.
    П.П.П.С: Можно юзать связывания без интерфейса (читаем в доке)

    Так-же можно вызвать ваш класс, через хелпер resolve (читаем в доке)

    Ссылка на доку: https://laravel.com/docs/5.8/container
    Ответ написан
    5 комментариев
  • Как записать код php короче?

    Konata69lol
    @Konata69lol
    backend developer (php/go)
    $tel = $a ?? "телефон";
    Ответ написан
    1 комментарий
  • Возможно ли поймать событие загрузки элемента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Примерно так:
    let style = document.createElement('style');
    style.innerHTML = `
    div {
    	animation-name: nodeReady;
    	animation-duration: 0.001s;
    }
    
    @keyframes nodeReady {  
    	from { clip: rect(1px, auto, auto, auto); }
    	to { clip: rect(0px, auto, auto, auto); }  
    }
    `;
    document.head.appendChild(style);
    
    document.addEventListener("animationstart", function(e) {
    	if (e.animationName == "nodeReady") {
    		if (e.target.innerHTML.trim() == 'привет') e.target.innerHTML = 'Пока';
    	}
    }, false);

    По стилям там сами смотрите. Если у вас есть class, например, можно вместо div его указать:
    .mydiv {
    	animation-name: nodeReady;
    	animation-duration: 0.001s;
    }

    Если вы инжектитесь из расширения, то у вас не будет ни элемента head, ни body. Придётся использовать какой-то такой костыль:
    document.children[0].appendChild(style);
    Ответ написан
    Комментировать