Задать вопрос
  • Почему выводятся 16 изображений?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Ну так вы сначала в одну строку собираете все изображения в images.forEach, а потом эту строку вставляете во все контейнеры в item.forEach.
    Обходите каждый .item, внутри ищите img и манипулируйте только им.
    Ответ написан
    Комментировать
  • Насколько успешна идея внедрения тайм трекеров сотрудникам?

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

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

    Плюс у нас есть такие сотрудничи, в чьи обязанности входит еще переписка с заказчиками, обсуждение сложных моментов по телефону. Это тоже занимает время. Как это учитывать в тайм трекерах?
    Так же аналитик у нас еще частьв ремени тратит на проверку задач, часть на формулировку задач. Это он тоже не сходу придумывает. Сначала нужно много думать, смотреть другие сайты прежде, чем принять решение. Это как учитывать?
    Так и учитывать.

    какие ньюансы нужно обговорить с инвесторами чтобы и обе стороны остались удовлетвореннымми?
    Нюанс один - заказчик должен заранее понимать, что работа над его задачей не измеряется только временем, которое ушло на написание кода, который в итоге пошёл в проект. В задачу входит всё - проектирование, тестирование, менеджмент, сбор требований, деплой, обучение и дальнейшая поддержка.
    Но показывать ли эту детализацию заказчику или нет, зависит от него самого. Есть адекватные, которые всё понимают и хотят это видеть. Есть адекватные, но погружаться они не хотят, доверяют разработчикам. Есть неадекватные, которые начинаю дебаты в виде "а вот тут у вас на проектирование ушло X часов, а почему не уложились в X - 1 час 59 минут?", с такими надо либо прощаться, либо не давать им детализацию, чтобы всем спалось спокойнее.

    Это всё больше вопрос доверия, объяснить, как его построить, невозможно в ответах на Тостере. Если же говорить про успешность идеи - у нас тайм-трекер внедрён много лет и если людям объяснить, что нужен он не для выжимания из них последних соков, а чтобы заказчик оплатил каждый аспект их работы, то саботировать его никто не будет. Но вот просто с неорганизованными коллегами, которые забывают время отмечать, бороться будет сложно.
    Ответ написан
  • Почему у объекта поле data undefined?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега React
    В then приходит результат, который возвращает предыдущий then. Метод forEach возвращает undefined.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при обновлении страницы стили css, заданные с помощью js, не исчезали?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега CSS
    Вы уже его фиксируете, записывая в LocalStorage. Просто используйте эту информацию при загрузке страницы.
    Ответ написан
    Комментировать
  • Есть ли смысл создавать собственные сервис-провайдеры в рамках одного проекта?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Для среднего проекта вполне хватает AppServiceProvider, если вы не пурист.

    Но, судя по вопросу, кажется, вы смешали между собой какие-то сущности. Провайдер используется для регистрации вашего класса в DI-контейнере. Использовать DI-контейнер по сравнению с new Class удобнее.
    Ответ написан
    7 комментариев
  • Как написать Regex на замену string на опеределенный int?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Здесь регулярка и не нужна:
    const query = 'foo';
    let page = +query;
    if (isNaN(page) || page <= 0) {
        page = 1;
    }


    Но если хочется, можно и заморочиться:
    const query = '-1';
    let page = 1;
    
    if (/^\d+$/.test(query)) {
        page = +query;
        // Любители плохо читаемого кода могут написать так и избавиться от условия ниже:
        // page = +query || 1
    }
    
    if (page <= 0) {
        page = 1;
    }
    Ответ написан
    1 комментарий
  • Laravel не удается подключить IndexController?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    If you would like to continue using the original auto-prefixed controller routing, you can simply set the value of the $namespace property within your RouteServiceProvider and update the route registrations within the boot method to use the $namespace property

    https://laravel.com/docs/8.x/upgrade#automatic-con...
    Ответ написан
    Комментировать
  • Есть ли смысл индексировать boolean-поле?

    Отвечая на вопрос "имеет ли смысл индексировать поле X" нужно всегда оперировать:
    0. Особенностями конкретной СУБД.
    1. Структурой таблиц.
    2. Структурой запроса.
    3. Содержимым таблицы.
    4. Результатами EXPLAIN по запросу до индексации.
    5. Результатами EXPLAIN после тестовой индексации.

    Вы в вопросе не привели ничего из вышеперечисленного, поэтому можно дать только теоретические выкладки:
    1. Кардинальность у этого индекса будет низкой. Это не очень хорошо, но и не смертельно.
    2. Для запросов select id from mytable where field = 1; этот индекс может давать приличный профит при условии, что в таблице много других колонок - СУБД не придётся считывать лишние данные с диска, будет использоваться только индекс. Если же запрос сложнее или таблица проще, то профит уменьшается. Конкретные значения может дать только EXPLAIN.

    Учитесь работать с EXPLAIN, никакие ответы в интернете не помогут лучше него. Ещё полезно прочитать книгу High Performance MySQL.
    Ответ написан
    Комментировать
  • Missing Request Laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Request $request - это объект запроса, его Laravel автоматически вам передаст, если вы в параметрах его указали.

    formEditUser.url = $(this).attr('href') - здесь у вас в адресе должен быть указан get-параметр id и тогда всё будет работать. Откуда вам брать этот id пользователя из вопроса непонятно.

    P.S.
    function LinkFormatter(value, row, index) {
      return "<a href='"{{route('createFormEditUser, ['id' => ???]')}}"'>"+value+"</a>";
    }

    Здесь для конкатенации используется плюс, что говорит о том, что это javscript. Но при этом вы используете серверную функцию route() (если у вас не подключен laroute, конечно), а главное - формат шаблона blade. Либо у вас по совпадению на фронте шаблонизатор с тем же форматом и есть функция генерации url по параметрам роута Laravel, либо вы вообще не понимаете, что пишете.
    Ответ написан
    3 комментария
  • Работает ли Strapi на обычном (php) хостинге без nodejs?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    The following are required if you are submitting pull requests to the documentation.
    https://github.com/strapi/documentation#documentat...

    If you are looking for the Strapi code, please see the Strapi Monorepo.


    Self-hosted. You can host and scale Strapi projects the way you want. You can choose any hosting platform you want: AWS, Render, Netlify, Heroku, a VPS, or a dedicated server.


    https://strapi.io/documentation/developer-docs/lat...

    608939a539c03321072679.png

    Нет, на обычном хостинге без node работать оно не будет. На любой VDS - пожалуйста.
    Ответ написан
  • Как парсить и конвертировать log в xml?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Веб-разработка
    Чтобы ответить на вопрос, есть ли готовые инструменты для парсинга, нужно сначала увидеть формат данных, которые требуется парсить.
    Готовые механизмы сохранения структуры данных в XML есть в том или ином виде практически в любом языке программирования.
    Ответ написан
  • Как сохранить структуру страницы, после ее загрузки?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Через ajax добраться нереально, но через ajax реально отправить на сервер.
    Начать можно с отправки document.head.outerHTML + document.body.outerHTML.
    Ответ написан
  • Почему не работает сравнение строк?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Ваша функция выходит на первой же итерации, если первый элемент не совпал - до нужного у неё дойти нет шансов.
    Ну а сравнение прекрасно работает:
    function getXmlProduct(string $product_code, SimpleXMLElement $xml): int
    {
        foreach ($xml->items->item as $item) {
            if (
                (string)$item->code === $product_code &&
                (string)$item->stock === "В наявності"
            ) {
                return (int)$item->priceRUAH;
            }
        }
    
        return 0;
    }


    Если хотите, то можете и в стиле пятилетней давности функцию сделать:
    function getXmlProduct($product_code, $xml)
    {
        foreach ($xml->items->item as $item) {
            if ($item->code == $product_code && $item->stock == "В наявності") {
                return (int)$item->priceRUAH;
            }
        }
    
        return 0;
    }
    Ответ написан
    Комментировать
  • Проходить только один раз по ключу в Foreach PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Попробую поугадывать по вашему небрежно оформленному вопросу, чего же вы хотите.

    Нужно отделить логику от представления.
    Сначала данные, которые вы собираетесь выводить, нужно подготовить:
    $tipIds = array_unique(array_column($tovar['tips'], 'id'));

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега MySQL
    С точки зрения пользовательского интерфейса это полная хрень, конечно, но решается довольно легко - нужно просто сделать 4 запроса и не пытаться объять необъятное. Полученные данные объединяете в один массив и всё - страница готова.

    А что вы будете делать, когда страницы с премиумом закончатся, а экономы ещё нет?

    Если очень уж необходимо сделать именно так, то приемлемый пользовательский интерфейс в данном случае был бы таким: 4 отдельных таблицы, по одной для каждого типа, и под ними один на всех блок пагинации. В качестве количества страниц в нём используется максимальногое значение среди указанных типов. Когда для какого-то типа данные заканчиваются, выводится сообщение об этом, остальные таблицы рендерят данные. И в итоге у вас будет 4 пагинации на бэкенде и один контрол для них на фронте. Валить данные в одну таблицу, когда пользователь явно указал, что хочет сортировать по цене - это ад. Я ещё понимаю, была бы сначала сортировка по классу, а потом по цене, здесь был бы хоть какой-то смысл, хоть это и не то, чего хотел пользователь.
    Ответ написан
  • Слияние массивов без нарушения структуры?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Кажется, что должно хватить вызова ksort($orderGrouped, SORT_NUMERIC) перед циклом.
    Foreach сам назло вам ничего не пересортировывает - как пришло, так и обрабатывает. Порядок ключей в объекте JS не гарантирован, так что, скорее всего, он вам портит малину. Можете убедиться, если сделаете var_dump($orderGrouped) в самом начале - наверняка, порядок будет нарушен уже там.

    Ну и если у вас свежая версия PHP, то код можно сократить до такого:
    $filteredArray = [];
    ksort($orderGrouped, SORT_NUMERIC);
    foreach($orderGrouped as $group){
       array_push($filteredArray, ...$group);
    }

    А то в вашем варианте array_push лишний и достаточно просто $filteredArray[] = $groupItem.
    Ответ написан
  • Как откинуть ненужные запросы в json?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    опрашиваем api пока не получим нужные данные
    В вашей постановке уже есть большая часть ответа - формулировка "пока не" чётко указывает на необходимость использования цикла.

    foreach (['anime-tv-series', 'show-tv-series', 'tv-series'] as $type) {
      $json = json_decode($this->videocdn_get($data, $type), true);
    
      if ($json['status'] == 'true') {
        return $json;
      }
    }
    
    return ['status' => 'false'];


    Ну или то же самое, но без return:
    $response = ['status' => 'false'];
    
    foreach (['anime-tv-series', 'show-tv-series', 'tv-series'] as $type) {
      $json = json_decode($this->videocdn_get($data, $type), true);
    
      if ($json['status'] == 'true') {
        $response = $json;
        break;
      }
    }
    Ответ написан
    2 комментария