• Как создать универсальный класс для создания формы на JS?

    liqrizz
    @liqrizz
    лол
    fields: {type: TypeEnum; classNames: string[]; id: string}[];
    
    render() {
      const mappedFields: HTMLElement[] = this.fields.map(field => new InputField(field.type, ...field.classNames).render());
      this.element.append(...mappedFields);
      this.element.append(new Button('submit', 'create-car-submit', 'Create', 'btn', 'blue') .render());
    }
    Ответ написан
    Комментировать
  • Как лучше использовать removeEventListener?

    @sergiodev
    Программист типо
    По-моему у вас некорректно удаляются listener-ы, т.к. вы связывая метод с this через вызов this.onButtonGarageNext.bind(this) вы тем самым создаёте новую функцию, а в removeEventListener() вы передаете сам метод onButtonGarageNext. Получается, что ничего не удалится, т.к. такая функция не навешана не событие click и listener не найдётся при удалении.

    Нужно где-то запомнить функцию, возвращаемую из bind() и потом передавать её в removeEventListener().

    Насчёт повторяющегося кода - я бы записал ссылки на элементы .top-menu, #btn-garage-next, #btn-garage-prev в какое-нибудь поле класса при инициализации, и потом их переиспользовал в removeListeners(), например:

    this.menuBbtn = document.querySelector('.top-menu');
    this.btnGarageNext = document.querySelector('#btn-garage-next');
    this.btnGaragePrev = document.querySelector('#btn-garage-prev');


    Если вы используете React, то там для этого есть специальный атрибут ref - https://ru.reactjs.org/docs/refs-and-the-dom.html
    Ответ написан
    1 комментарий
  • Как отрабатывает логика скрипта js?

    WblCHA
    @WblCHA
    когда я выношу этот код из функции, удаление срабатывает только 1 раз на том элементе на который я кликаю, почему так происходит?

    Потому что ты вешаешь события только 1 раз при первичном вызове скрипта, а далее ты вызываешь showListFilm, ПОЛНОСТЬЮ перерисовываешь все промо айтемы (включая дивы в них) и всё. Откуда в новых дивах появятся эвенты, если, ты их не создаёшь после перерисовки?
    Ответ написан
    1 комментарий
  • Как в php usort() вывести определенное значение самым первым?

    delphinpro
    @delphinpro
    frontend developer
    $array = [
        'Д',
        'А',
        'Б',
        'В',
        'Г',
        'Ж',
        'Ф',
        'Х',
        'О',
        'П',
        'Р',
        'Санкт-Петербург',
        'Т',
        'З',
        'У',
        'Л',
        'Москва',
        'Н',
        'Е',
    ];
    
    $first = [
        'Москва',
        'Санкт-Петербург',
    ];
    
    usort($array, function($a, $b) use ($first) {
        foreach ($first as $item) {
            if ($a == $item) return -1;
            if ($b == $item) return 1;
        }
        if ($a == $b) return 0;
        return $a < $b ? -1 : 1;
    });
    
    print_r($array);


    Элементы, указанные в массиве $first будут выведены в начале списка, и именно в том же порядке что указаны.

    То есть, если задать
    $first = [
        'Санкт-Петербург',
        'Москва',
    ];

    то Питер будет первым.
    Ответ написан
    Комментировать
  • Как в php usort() вывести определенное значение самым первым?

    @d-sem
    function compare ($v1, $v2) {
        if ($v1=='Москва' && $v2='Санкт-Петербург') return -1;
        if ($v2=='Москва' && $v1='Санкт-Петербург') return 1;
        if ($v1=='Москва' && $v2!='Санкт-Петербург') return -1;
        if ($v1=='Санкт-Петербург' && $v2!='Москва') return -1;
        if ($v1!='Санкт-Петербург' && $v2='Москва') return 1;
        if ($v1 == $v2) return 0;
        return ($v1 < $v2)? -1 : 1;
    }
    Ответ написан
    5 комментариев
  • Возможна ли работа в VirtualBox c 2 компьютеров в ЛВС?

    fzfx
    @fzfx
    18,5 дм
    > Возможна ли работа в VirtualBox c 2 компьютеров в ЛВС?
    что имеется под работой в VirtualBox? жать кнопку "запустить виртуальную машину"? штатными средствами вы её можете нажать только на той машине, на которой у вас запущен VirtualBox. ещё можно подключиться к хосту по RDP и запустить на нём VirtualBox. ещё можно использовать удалённый вызов команд через powershell.
    > Задумка такая на сервер разместить виртуальную машину (сам виртуальный диск)
    т. е. виртуальный диск для виртуальной машины разместить на сервере, а саму виртуальную машину - где-то ещё, так? и где именно в таком случае вы собираетесь её держать, если не на сервере? и зачем?
    > и подключаться к нему с компов в ЛВС.
    т. е. к диску? нет, не надо подключаться к диску с компов в ЛВС. выберите один какой-то комп, установите на нём VirtualBox, и подключите в VirtualBox к виртуальной машине виртуальный диск по сети.
    > Необходима работа с Microsoft Access. Возможно ли это?
    Работа с Microsoft Access отношения к VirtualBox имеет довольно слабое. Microsoft Access работает на компах, Microsoft Access работает в виртуалке, лишь бы системные требования соответствовали.
    Ответ написан
    1 комментарий
  • Как настроить контроль и логирование действий пользователя?

    firedragon
    @firedragon
    Senior .NET developer
    Используйте домен всегда. Делайте бэкапы, выделяйте место для версий файлов, что то совсем критичное переносите в sharepoint там есть инструменты просто не разрешающие удалить документ, или не позволяющие идиоту опубликовать своё видение без утверждения. Все это стоит денег но оно себя оправдывает
    Ответ написан
    Комментировать
  • Как сделать выборку из промежуточной таблицы?

    slo_nik
    @slo_nik Куратор тега Yii
    yura_born, ну тогда должно быть как-то так
    Сотрудники:
    id - primaryKey
    name - имя сотрудника
    surname - фамилия сотрудника

    SotrRank
    id - primaryKey
    id_employee - id сотрудника из таблицы Sotrudnik
    id_position - id должности

    RankList
    id - primaryKey
    name - название должности

    Вам надо получить когда и какую должность занимал сотрудник. В модели Sotrudnik делаем связь на SotrRank
    public function getSotrRank()
    {
         return $this->hasMany(SotrRank::class, ['id_employee' => 'id');
    }

    Но так получите только id должности, вместо названия. Поэтому в модели SotrRank делаете связь на RankList
    public function getRank()
    {
         return $this->hasOne(Rank::class, ['id' => 'id_position');
    }

    И выводите в цикле
    // действие
    public function actionSql($code)
        {
            $employee = Sotrudniki::find()->where(['code' => $code])->all();
    
            return $this->render('sql', [
                'employee' => $employee
            ]);
        }
    // вид sql
    foreach($employee as $value){
        echo $value->name; // имя сотрудника
        // ещё один цикл для получения данных по связи SotrRank
        foreach($value as $sotrRank){
        // получить название должности через связь Rank
         echo $sotrRank->rank->name;
        }
    
    }

    Вот как-то так.

    p.s. Обязательно будут ошибки, но Вы их сами исправите, я уверен.
    Ответ написан
    2 комментария
  • Как в ActionColumn добавить свой идентификатор?

    slo_nik
    @slo_nik Куратор тега Yii
    'columns' => [
        // ...
        [
            'class' => ActionColumn::className(),
            'buttons' => [
                'view' => function($url, $model, $key){
                    return Html::a('View', ['sotrudniki/view', 'code' => $model->id);
                }
            ]
        ],
    ]

    До рабочего состояния доведёте сами.
    Ответ написан
    2 комментария
  • Как форматировать дату и время из mysql в php?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    echo date("d-m-Y H:i:s", strtotime("2015-12-12 12:12:12"));
    Ответ написан
    Комментировать
  • Как сделать redirect по значению в командной строке?

    DevMan
    @DevMan Куратор тега PHP
    сделайте редирект на site.ru/contacts/?param=123&redirected=1 и проверяйте есть ли параметр redirected.
    Ответ написан
    Комментировать
  • Какие способы формирования запросов к БД в Yii2 лучше?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    $sotrudniki=Sotrudnik::find()->asArray()->all();

    И где тут связь должна дергаться? Модель не дергает связи пока Вы этго не попросите. В модели Вы описываете, как строить связь. Это не значит, что все запросы теперь будут тянуть ненужные им связи. Откройте документацию:
    https://www.yiiframework.com/doc/guide/2.0/en/db-q...
    https://www.yiiframework.com/doc/api/2.0/yii-db-ac...
    Что бы дернулась связь getPodrazd() надо как-то так строить:
    $sotrudniki = Sotrudnik::find()->joinWith('podrazd', true, 'INNER JOIN')->all();

    Совет. Никогда, ни при каких условиях, не используйте русские названия. Даже в плохих компаниях за такое отрывают руки.
    Ответ написан
    1 комментарий
  • Какие способы формирования запросов к БД в Yii2 лучше?

    maksim92
    @maksim92 Куратор тега Yii
    Нашёл решение — пометь вопрос ответом!
    Если вам важна производительность и хороший код, то на все чтения делаем обычные SQL запросы или используем Query Builder от Yii2.

    ActiveRecord работает с объектами, поэтому он сильно «ударяет» по производительности при составлении больших и сложных запросов. Кроме того, в объектах AR не только сами данные, но и: поведения, события, валидация...

    Если брать CRUD (Cread Read Update Delete), то для CUD (модификация данных) использовать ActiveRecord. А там где R (чтение) - используем SQL и QB. В таком случае вы будете работать с данными в виде массива, либо в виде простых DTO, на которые вы сами «маппите» данными из запроса. DTO будет удобно использовать для работы. $dto->name вместо $items['name']. Хотя, если вы используете шаблонизатор twig, — Вам особо без разницы. Но на PHP объекты (DTO) вам ещё и удобно будет использовать в редакторе.

    При таком подходе код будет чище, а производительность выше!
    Ответ написан
    2 комментария
  • Не срабатывает gulp.watch. Что не так?

    @coderxx
    keep calm and learn js
    Ошибка в том, что у вас, вероятно, установлен Gulp версии 4, использующий функцию gulp.parallel, в то время как данная конфигурация галпфайла предназначена для Gulp версии 3. Самый простой выход - откатить версию Gulp до 3.9.1, либо исправить gulpfile.js:
    gulp.task("watch", function() {
      gulp.watch('app/sass/main.sass', gulp.parallel('sass'));
    });
    Ответ написан
    3 комментария