Задать вопрос
  • Как исправить сортировку в 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 это легко можно сделать так:
    Ответ написан
    Комментировать
  • Как сгруппировать элементы массива по значению одного из свойств?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Вот метод группировки (не только массивов, но и любых итерируемых объектов):

    function group(data, key, val = n => n) {
      const getKey = key instanceof Function ? key : n => n[key];
      const getVal = val instanceof Function ? val : n => n[val];
      const grouped = {};
    
      for (const n of data) {
        const k = getKey(n);
        (grouped[k] = grouped[k] || []).push(getVal(n));
      }
    
      return grouped;
    }

    Как использовать в вашем случае:

    group(arr, 'room')
    // или
    group(arr, n => n.room)

    Но можно и так:

    group(Array(5).keys(), n => n % 2 ? 'нечётные' : 'чётные')

    Или так:

    group('a8-C!39', n => (
      n.toLowerCase() !== n.toUpperCase() ? 'буква' :
      !Number.isNaN(+n)                   ? 'цифра' :
                                            'другое'
    ))

    Или вот ещё вариант:

    <input name="xxx" value="69">
    <input name="xxx" value="187">
    <input name="xxx" value="666">
    <input name="yyy" value="-1">

    group(document.querySelectorAll('input'), 'name', n => +n.value)
    Ответ написан
    4 комментария
  • Как правильно написать цепочку promise для элементов в forEach?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const asyncForEach = (data, callback) =>
      Array.prototype.reduce.call(
        data,
        (promise, n, i, a) => promise.then(() => callback(n, i, a)),
        Promise.resolve()
      ).then(() => {});
    
    // или
    
    async function asyncForEach(data, callback) {
      for (let i = 0; i < data.length; i++) {
        await callback(data[i], i, data);
      }
    }

    asyncForEach(
      document.querySelectorAll('li'),
      li => new Promise(r => setTimeout(() => r(console.log(li.textContent)), 1000))
    );
    Ответ написан
    Комментировать
  • Как правильно подключить 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 комментарий