• Как вывести данные из двух таблиц?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ошибка детская, она вот в этом: "Есть 2 таблицы, в которых одинаковые поля".
    Очень часто новички, которые не понимают, как работает база данных, делают подобное.
    И всегда потом приходится переделывать, даже если очень не хочется.
    Потому что в БД не должно быть таблиц с одинаковыми полями. Собственно, сообразительные новички уже на этом вопросе, "как выбрать из двух таблиц" начинают понимать, что у них что-то пошло не так.

    Так что надо просто сделать одну таблицу, записать в неё данные из всех таблиц с одинаковыми полями, и выбирать из неё обычным способом.

    Имя таблицы, кстати, тоже очень странное. Наверняка там внутри тоже треш и угар и вот её-то как раз и надо разделить, только не горизонтально, а вертикально. Судя по составу полей, нужна одна таблица city и одна таблица people, в которой указывается только city id
    Ответ написан
    2 комментария
  • Как правильно подружить Vue и php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    а vue выступает сугубо в роли небольших компонентов на разных страницах

    Исходя из этого я могу предположить, что подобные виджетики скорее всего не нуждаются в серверном рендере, а значит все довольно просто.
    Настраиваем любой сборщик (webpack, vite). На входе будет какой-нибудь main.js, на выходе готовый файл (по умолчанию), пара файлов (main и vendor, если настроили разделение) или больше, в зависимости от хитрожопости настроек. Вот эти файлы и подключаем (соблюдая порядок, если их несколько, например vendor перед main)

    В main можно писать весь фронт сайта, или модульно импортировать.
    Туда же подключается вью и компоненты ваших виджетов

    import Vue from 'vue';
    import Calculator from './calc/Calculator.vue';


    На странице, где нужно вставить компонент пишем нечто вроде

    <div class="calc"></div>

    Сюда будет рендериться компонент в рантайме. Например так (в том же main.js)

    document.querySelectorAll('.calc').forEach(el => {
        new Vue({
            el    : el,
            render: h => h(Calculator, {
                props: {
                   /// Пропсы, если надо
                },
            }),
        });
    });


    То есть каждый виджет в этом случае будет независимым vue приложением.

    Если нужно передавать в компоненты какие-то данные, то можно научить компонент самому их запрашивать. Но тут придется отдельные роуты создавать. Или прямо на страницу в head выплевывать их в виде json

    <script>window.calcData = <?= json_encode($calcData) ?>;</script>


    а в компоненте по mounted их доставать

    mounted() {
      const d = window.calcData;
    }
    Ответ написан
    1 комментарий
  • Как посчитать количество объектов в классе?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вариант А. считать в конструкторе, как предложил Lynn «Кофеман» Такой вариант не учитывает удалённые объекты класса. Метода desctructor() в ECMAScript 6 не предусмотрено.
    class Menu {
      static counter = 0;
    
      constructor(name) {
        this.name = name;
        ++Menu.counter;
      }
    }
    
    menu1 = new Menu("меню1");
    menu2 = new Menu("меню2");
    menu3 = new Menu("меню3");
    menu4 = new Menu("меню4");
    
    delete menu1;
    
    console.log(Menu.counter); // 4


    Вариант Б. Полагаться на родителя, хранящего ссылки на созданные инстансы. В данном случае это глобальный window. Тоже не лучший вариант, т.к. мало ли, где в коде содержатся ссылки на созданные объекты. Может, в анонимных функциях, вызванных по таймеру.
    let count = 0;
    for (obj in this) { // в примере this === window
      if (this[obj] instanceof Menu) ++count;
    }
    console.log(count); // 4
    Ответ написан
    2 комментария
  • Как убрать все лишние пробелы, js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    str.replace(/\s+/g, ' ').trim()
    Ответ написан
    3 комментария
  • Какой фреймворк популярнее в Америке Angular или React.js?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Учи не фреймворки, а сам язык.
    Потом любую технологию можно недели за две подтянуть.
    Ответ написан
    Комментировать
  • Как правильно обойти объект JS для построения дерева?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    Составление дерева любого уровня вложенности.

    const categories = [
      { id: 1, name: 'name 1', parent: null },
      { id: 2, name: 'name 2', parent: 1 },
      { id: 3, name: 'name 3', parent: 6 },
      { id: 4, name: 'name 4', parent: 5 },
      { id: 5, name: 'name 5', parent: 6 },
      { id: 6, name: 'name 6', parent: null },
      { id: 7, name: 'name 7', parent: null }
    ]
    
    function buildTree (array) {
      // Складываем все элементы будущего дерева в мап под id-ключами
      // Так легче делать поиск родительской ноды
      const map = new Map(categories.map(item => [item.id, item]));
      
      // Обход в цикле по значениям, хранящимся в мапе
      for (let item of map.values()) {
        
        // Проверка, является ли нода дочерней (при parent === null вернет undefined)
        if (!map.has(item.parent)) {
          continue;
        }
        
        // Сохраняем прямую ссылку на родительскую ноду, чтобы дважды не доставать из мапа
        const parent = map.get(item.parent);
    
        // Добавляем поточную ноду в список дочерних нод родительчкого узла.
        // Здесь сокращено записана проверка на то, есть ли у ноды свойство children.
        parent.children = [...parent.children || [], item];
      }
    
      // Возвращаем верхний уровень дерева. Все дочерние узлы уже есть в нужных родительских нодах
      return [...map.values()].filter(item => !item.parent);
    }
    
    const tree = buildTree(categories);
    
    console.log(tree);
    Ответ написан
    Комментировать
  • Как найти все экземпляры определенного класса в javascript?

    Negwereth
    @Negwereth
    lvivcss.com.ua
    const instancesOfFoo = new Set();
    class Foo {
      constructor() {
        instancesOfFoo.add(this);
      }
    }
    
    new Foo;
    new Foo;
    new Foo;
    
    console.log([...instancesOfFoo.values()]);


    Set
    Ответ написан
    Комментировать
  • Как работать с переводом типов в PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Я для этих целей использую расширение Decimal:
    (new Decimal\Decimal('153.17'))->mul(100)->toInt(); // 15317


    Но можно использовать и функцию bcmul:
    (int)bcmul('153.17', '100'); // 15317
    Ответ написан
    1 комментарий
  • Как сделать следующий эффект для background?

    Aetae
    @Aetae
    Тлен
    Чуть более сложно чем нужно тебе:



    Упростишь сам, если надо.)
    Ответ написан
    Комментировать
  • Как получить подстроку между последними "/"?

    0xD34F
    @0xD34F Куратор тега JavaScript
    /[^\/]+(?=\/$)/.exec(str)[0]

    или

    str.match(/[^\/]+/g).pop()

    или

    str.split('/').at(-2)
    Ответ написан
    1 комментарий
  • Как корректно вызвать событие Drag?

    Stalker_RED
    @Stalker_RED
    elem.addEventListener('dragstart', function(evt) {
      // прозрачная картинка вместо "призрака"
      const img = new Image();
      img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';
      evt.dataTransfer.setDragImage(img, 0, 0);  
    });

    Ну и по событию drag можете двигать за курсором сам объект.
    Ответ написан
    Комментировать
  • Что нужно изменить, чтобы скрипт работал без jQuery?

    Adamos
    @Adamos
    https://youmightnotneedjquery.com/#on и далее по пунктам
    Ответ написан
    Комментировать
  • Почему цикл if внутри цикла for который находится в цикле while не работает?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С чего вы взяли что у вас там что-то не работает?
    Во-первых:
    Почему цикл if внутри цикла for который находится в цикле while не работает?

    if - это не цикл.
    Во-вторых, в ытам накосячили с отступами.
    В-третьих, в таком спагетти коде не мудрено наделать ошибок, а у вас еще и break встречается то и дело. Нарисуйте блок-схему вашего алгоритма, тогда станет понятнее. А сейчас этот код вообще не читаем, отчего просто бесполезен и должен быть удален и переписан заново.
    Попробуйте разбить весь этот код на функции. Функуии должны быть короткие, читабельные и "чистые" (то есть зависеть только от аргументов, а не от внешних и глобальных факторов)
    Ответ написан
    8 комментариев
  • Почему верстальщики обычно вырезают круглую картинку квадратом?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    1) Круглые картинки без фона - это либо пнг, либо вебп (думаю неприменимость формата гиф очевидна и так). Не все картинки хорошо смотрятся в пнг и не все браузеры полностью поддерживают вебп.

    2) Цсс такая штука, специально придуманная для того, чтобы если завтра мода на круглое сменится модой на квадратное, то "легким движением руки брюки превращаются в элегантные шорты". И для этого не понадобится перепердоливать стотыщь картинок обратно в квадраты.

    3) В обратную сторону так же работает - для смены дизайна с квадрата на круг достаточно просто скруглить углы контейнера.

    4) Сделать тумб с "круглым видом" программно сложнее чем с квадратным.

    5) Артефакты при нарезке из квадратного в круглое смотрятся хуже, чем, по сути, векторная маска, наложенная на цельное квадратное изображение.

    Короче, не зря делают.

    PS: На дом - научиться самостоятельно искать аргументы в пользу / против какого-либо замеченного технологического приема.
    Ответ написан
    1 комментарий
  • Почему верстальщики обычно вырезают круглую картинку квадратом?

    delphinpro
    @delphinpro Куратор тега Вёрстка
    frontend developer
    Потому что часто, почти всегда, изображения на боевом сайте управляются через админку. И условная девочка-контентщица не будет заморачиваться с подготовкой картинок под вашу верстку, просто загрузит любую. Наоборот, ваша верстка должна быть универсальной.
    Ответ написан
    Комментировать
  • Нужно ли убивать переменные если больше не будишь использовать?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Зависит от ситуации.
    В большинстве случаев - не нужно. Сборщик мусора сделает всё за вас. Но иногда, например, когда у вас переменная является массивом, который в цикле заполняется, и при этом цикл работает очень долго, может быть целесообразно и очищать этот массив раз в некоторое количество итерраций, чтобы не засорять память.
    Если вы работаете с ORM типа Doctrine - опять же не мешает при длительных операциях с обработкой большого количества данных чистить identity map. Правда, это не совсем удаление переменных за собой.
    В общем, в подавляющем большинстве случаев, когда ваш код выполняется линейно и, тем более, если это функция, удалять переменные не нужно.
    Ответ написан
    2 комментария
  • Нужно ли убивать переменные если больше не будишь использовать?

    @dmitryKovalskiy
    программист средней руки
    Явно надо освобождать только ресурсы - соединения с базой или файлами например. Простые типы освобождать явно не надо. В остальном все зависит от конкретного решения задачи.
    Ответ написан
    2 комментария
  • Нужно ли убивать переменные если больше не будишь использовать?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    не заморачивайтесь. Php сам все за вас подчистит. Кроме того, он живет лишь в течение одного запроса, после которого вся память будет освобождена.

    Вот если вы работаете над hi-load.... Стоп. Я загнался. Тогда бы у вас, наверное, уже не возникало бы таких вопросов.
    Ответ написан
    3 комментария
  • Как сделать два разных личных кабинета на WP?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    У группы пользователя роль Поставщик, у второго Покупатель. При входе смотришь какая роль у текущего юзера. На основе этого подключаешь шаблон один или другой.
    Алгоритм получен - далее действовать.
    Ответ написан
    Комментировать
  • Как убрать нумерацию в начале строки через регулярные выражения?

    Stalker_RED
    @Stalker_RED
    /^[\d\.\s]+/
    ^ - искать в начале строки
    []- список символов
    \d - цифры
    \. - точка
    \s - пробельные символы
    + - в количестве от одного

    Вот этот сервис очень удобен для отладки регулярок. Там и шпаргалка, и подробно расписано как что работает,и разные реализации регулярных выражений (не во всех языках реализована полная поддержка).
    https://regex101.com/r/otwtgd/1
    Ответ написан
    Комментировать