• Php построение дерева. Как сделать?

    Immortal_pony
    @Immortal_pony Куратор тега PHP
    // Функция для превращения путей в древовидный массив
    function pathsToTree(array $paths, $separator="/") {
        $pathsTree = [];
        
        foreach ($paths as $path) {
            $pathParts = array_reverse(explode($separator, $path));
            $pathTree = [];
            
            foreach ($pathParts as $i=>$pathPart) {
                if (empty($pathPart)) {
                    continue;
                }
    
                $pathTree = ($i == 0 ? [$pathPart] : [$pathPart => $pathTree]);
            }
            
            $pathsTree = array_merge_recursive($pathsTree, $pathTree);
        }
        
        return $pathsTree;
    }
    
    
    
    // Пример использования
    $testPaths = [
        '/dir1/sdir1/file',
        '/dir1/sdir2/sdir3/file',
        '/dir2/sdir1/file'
    ];
    
    var_dump(pathsToTree($testPaths));
    /* Результат:
    array(2) {
      ["dir1"]=>
      array(2) {
        ["sdir1"]=>
        array(1) {
          [0]=>
          string(4) "file"
        }
        ["sdir2"]=>
        array(1) {
          ["sdir3"]=>
          array(1) {
            [0]=>
            string(4) "file"
          }
        }
      }
      ["dir2"]=>
      array(1) {
        ["sdir1"]=>
        array(1) {
          [0]=>
          string(4) "file"
        }
      }
    }
    */
    Ответ написан
    1 комментарий
  • Git (BitBucket) + JIRA + PhpStorm — План работы?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Не-не-не. Вы совсем не туда думаете.
    Каждая фича в отдельный бранч и желательно в нём всего один коммит, апдейты делаются амендом, это позволит легко тягать ваши коммиты черри пиком вместо мержа, что особенно удобно когда ведётся несколько стабильных релизов.
    Соотвественно разработчик пушит всё в свой репозиторий, делает пулл реквест. Затем собирается билд посредством мержа основного репозитория и ветки из репа разработчика. Если всё ок, то принимаем пулл реквест. Дальше ветки разраба никому не мешают, могут и полежать. Оснвной реп относительно чист.

    Надеюсь понятно пояснил, мы так очень большой проект с кучей версий делали и апособо зарекомендовал себя очень хорошо.
    Ответ написан
    1 комментарий
  • Что можете сказать о верстке (новичок)?

    Vlad_IT
    @Vlad_IT Куратор тега Вёрстка
    Front-end разработчик
    1) Не делайте отступы блокам через  , есть же padding/margin
    2) Забудьте о float: left в тех местах, для которых он не предназначен. Для создания сетки используйте flex/css grids
    3) Делайте осмысленные названия классов и идентификаторов у элементов. У вас куча container1, container2 и.т.д.
    4) Не используйте position: absolute, где не нужно явное абсолютное позиционирование (у плавающих блоков например).
    5) Соблюдайте семантику. Заголовки должны быть в h1-h6 тегах.
    6) Не забывайте добавлять атрибут alt для всех картинок img
    7) У вас на сайте везде (вроде везде) используется шрифт "Trebuchet MS", но задаете вы его для элементов каждый раз, хотя можно было задать глобально для body
    8) Блок "ГАЛЕРЕЯ" не по центру.
    9) У вас соц-иконки в футере выровнены очень странно. Иконка insta имеет очень странный отступ от левого края, который видимо предназначается для выравнивания всего блока с иконками. Сделайте контейнер
    .container {
       width: 100%;
       max-width: 1040px;
       padding: 15px;
       margin: 0 auto;
    }

    и в него кладите элементы, которые должны быть внутри сайта. У вас через странный отступ почти все отпозиционировано. Посмотрите чужие работы, как люди делают разметку. Вы пока слабо представляете, как это все происходит.
    10) Вы должны адаптировать не только под маленькие и средние экраны, но и под большие, с шириной 2560px. Не нужно делать под них широкий сайт, просто нужно делать так, чтобы на них сайт тупо не уходил влево, а был по центру.
    11) Куча повторяющегося кода в css
    .footer>.footer_img>.vk{
        margin: 5% 0 0 1%;
    	display: inline-block;
    }
    .footer>.footer_img>.twitter{
        margin: 5% 0 0 1%;
    	display: inline-block;
    }
    .footer>.footer_img>.facebook{
        margin: 5% 0 0 1%;
    	display: inline-block;
    }

    12) Освойте БЭМ (или другую методологию). Код будет чище и проще.
    13) Сайт не адаптивный абсолютно, имеется только один media запрос, и тот только для изменения шрифта у документа. Посмотрите на другие сайты, как они адаптируются.

    Это основное, но список можно продолжать долго. По коду можно судить, что вы учились по старой литературе, выбросите ее. Смотрите как верстают другие, ковыряйте макеты, читайте умные статьи и сайты, тренируйтесь часто, и все будет ок.
    Ответ написан
    3 комментария
  • Почему Jetbrains phpStorm не видит файлы на FTP?

    @glilya Автор вопроса
    Проблему решил сам, достаточно выставить пассивный режим
    Ответ написан
    17 комментариев
  • Почему не работают медиа запросы?

    Prakop
    @Prakop
    Вот что мне помогло, вставить в шапку сайта такой метатег
    <meta name="viewport" content="width=device-width, initial-scale=1">
    Ответ написан
    4 комментария
  • Как убрать повторяющиеся слэши в .htaccess?

    Два коммента выше про:

    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
    и про
    RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?

    Вы вообще сами проверяли как будет происходить редирект? А я отвечу, что станицы вида site.ru/page//// будут редиректиться сначала на site.ru/page/// потом на site.ru/page// потом только на site.ru/page/

    Потому как что (.*), что ([^\s]*) - жадные! Нужно указывать (.*?) и ([^\s]*?)

    Господа, проверяйте свой код прежде, чем рекомендовать кому то.
    Ответ написан
    Комментировать
  • Как сделать колонки одинаковой высоты в Bootstrap3?

    @proskurninra
    Решение тут css.yoksel.ru/flexbox

    Я сделал и у меня решилась подобная проблема.
    Для этого я в css создал класс row-flex
    .row-flex {
        display: flex;
        flex-flow: row wrap;
    }

    и в html применил класс row-flex
    <div class="container-fluid">
        <div class="row row-flex">
            <div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">
                ... содержимое блока ...
            </div>
        </div>
    </div>

    всё работает!
    Ответ написан
    3 комментария
  • Почему так часто обновляются приложения на Android?

    @FoxInSox
    Вы не сравнивайте активно развивающийся продукт с open-source утилитой которая пилится 2.5 разработчиками в свободное время, без особого плана разработки. Например IDE от Jetbrains так же обновляются раз в несколько недель минимум. В Букинге, AirBnB, Adobe и остальных компаниях есть full-time android разработчики, у которых есть план разработки на несколько месяцев вперед. Так же в этих планах оптимизации, правка багов, поддержка старых и новых версий систем и устройств, добавление A/B тестов, обновление дизайна и анимаций, и все это в общем что бы вам было приятно и удобно пользоваться приложением.

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

    @omelchenkosp
    style.css :
    .navbar-nav {
    float: none;
    text-align: center;
    }
    .navbar-nav li {
    float: none;
    display: inline-block;
    }
    Ответ написан
    2 комментария
  • Как добавить элемент после другого элемента jQuery?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    append? Указываете родительский блок, в котором лежат записи и в него вставляете!

    $('#content').append('ваши записи'); // Они вставятся в конец блока
    Ответ написан
    1 комментарий
  • Легально ли разглашать пароли от точек доступа wifi?

    anthtml
    @anthtml
    Системный администратор программист радиолюбитель
    Толку от такого сайта 0,0001% он сработает только в тех заведениях где админы настолько тупые что выкладывают в гостевую сеть обычный примитивный роутер, в нормальных кафешках пароли раздает radius-сервер: они сессионные (на каждом чеке свой пароль), по одному паролю разрешено подключать только одно устройство (второе не пройдет авторизацию), пароль живет определенное время (не более суток), тот кто первым получил пароль (в момент получения был сфоткан регистрирующей камерой наблюдения) будет нести ответственность за все действия из под данного аккаунта
    Ответ написан
    5 комментариев
  • Ругается на вызываемую функцию (Google Maps API)?

    @rakro
    "Почему-то пишет что функция setMap не определена!". А где она объявляется?
    Ответ написан
    6 комментариев
  • Как вывести последние 3 объекта в Django?

    @deliro
    Mention.objects.filter(mentionn_id=step_id).order_by('-pk')[:3]

    Где в order_by ты кладёшь поле с минусом (по убыванию), по которому нужно эти самые последние выбрать. pk - это алиас к primary key. Если ты его не менял - это ID.

    Bojczuk:
    If no such ordering is defined for a given QuerySet, calling reverse() on it has no real effect
    Ответ написан
    2 комментария
  • Определение города пользователя и вывести ему текст, как?

    allard
    @allard
    Серийный программист
    Тут лучший вариант найти сервис с предоставление api определения города по ip.
    Например:
    www.ipinfodb.com/ip_location_api.php
    ipinfo.io
    ip-api.com/docs

    Есть и платные сервисы, можете поискать.
    Ответ написан
    1 комментарий
  • Как сделать вывод товаров на главной странице OpenCart?

    gohdan
    @gohdan
    Системный администратор
    Для тех, кто, как я, придёт сюда из поисковика - в OpenCart 2.0.3.1 рекомендуемые товары по умолчанию уже выводятся на главной странице, нужно зайти в модули - "Рекомендуемые > Featured - Home Page" -> кнопка "Редактировать", и там будет список товаров.
    Ответ написан
    2 комментария
  • SyntaxError: Non-ASCII character как исправить?

    @bromzh
    Drugs-driven development
    # -*- coding: utf-8 -*-

    Эта строка указывает, что кодировка исходника - UTF-8. В этом файле у тебя всё правильно, компилятор ругается на другой файл (/home/vitali/projects/mysite/blog/admin.py). Вставь в начало всех файлов проекта эту строку.

    НО, если я уберу таб в последней строке,

    Зачем? Ты понимаешь, что делаешь? Или это рандом?
    Вообще, компилятор же всё ведь написал, научись понимать, что написано.
    Ответ написан
    3 комментария
  • Как удалить динамически созданный элемент jquery?

    @IoannGrozny
    Front-end разработчик
    Во-первых, если вы создаёте множество динамических элементов, не используйте в них id и не ссылайтесь на них по id. Селектор по id выбирает только первый элемент из списка, потому что такой элемент должен быть один.
    Во-вторых, метод .click() не работает с динамически добавленными элементами. Поэтому событие вешается только на тот элемент, который уже был на странице. Навешивайте обработчик события методом .on() на элемент html. Это проделегирует обработчик на все элементы, указанные в качестве контекста, включая те, что были созданы динамически.
    Суммируем:
    <span class="addField add">
        <i class="icon"></i>Добавить
    </span>
    <div class="inputs">
        <div>
            <input type="file" name="dynamic[]" class="field" > 
            <span class="remove">Удалить</span>
        </div>
    </div>

    $(document).ready(function () {
        $('html').on('click','.add',function () {
            $('<div><input type="file" class="field" name="dynamic[]" /><span class="remove">Удалить</span></div> ').fadeIn('slow').appendTo('.inputs');                                
        });
        $('html').on('click','.remove', function () {                               
            $(this).parent().remove();    
        });
    });
    Ответ написан
    Комментировать
  • Что нужно, чтобы подключить оптику?

    vvpoloskin
    @vvpoloskin Куратор тега Компьютерные сети
    Инженер связи
    Как к Вам приходит кабель?
    Если он уже заканчивается оптическим коннектором(ами), то можно сразу воткнуть в приемное оборудование.
    Если он заведен в оптический кросс, то нужно будет еще и купить оптический шнур с нужным коннектором и нужной длины.
    Если провод просто к Вам заведен в дом и свернут колечком, то надо его разваривать. Стоимость 1000 — 1500 р.

    Также нужно узнать, по какой технологии провайдер дает вам интернет.
    Если xPON, надо покупать ONT-терминал.
    Если Ethernet, то надо узнать у провайдера, как он к вам передает сигнал(хотя бы стандарт 1000Base-LX, 1000Base-ZX?) и купить оборудование с оптическим интерфейсом под эти характеристики(медиаконвертер, маршрутизатор...)
    Ответ написан
    Комментировать