• Как сплюсовать все часы внутри двумерного массива php?

    TommyV888
    @TommyV888 Куратор тега PHP
    -
    $_data = array();
    foreach ($data as $v) {
        if (isset($_data[$v['name']])) {
            $_data[$v['name']]['hours'] += $v['hours'];
            continue;
        }
    
        $_data[$v['name']] = $v;
    }
    
    $data = array_values($_data);
    Ответ написан
    4 комментария
  • Как исключить дубли из выдачи в цикле php?

    @Vitsliputsli
    Так вы ведь выполняете последний else if практически для всех элементов массива. Если не менять текущую реализацию, вынесите это условие из под второго foreach и замените условие на проверку флага, флаг соответственно того, что после прохождения второго foreach не было совпадений.
    Ответ написан
    8 комментариев
  • Как сформировать "табель"?

    coderisimo
    @coderisimo
    Общая г.....кодная идея : )
    <?php 
    echo '<style>
    table,td,tr{border: 1px green solid; padding : 2px;text-align :center;border-collapse: collapse;}</style>';
    $data = [ // при запросе из БД отсортируй по дате
    	['fio'=>'Kolya', 'date'=>'12.12.19', 'cha'=>'12'],
    	['fio'=>'Petya', 'date'=>'12.12.19', 'cha'=>'12'],
    	['fio'=>'Vasya', 'date'=>'12.12.19', 'cha'=>'5'],
    	['fio'=>'Seroja', 'date'=>'13.12.19','cha'=>'2'],
    	['fio'=>'Igor', 'date'=>'14.12.19', 'cha'=>'6'],
    	['fio'=>'Sanya', 'date'=>'14.12.19', 'cha'=>'5'],
    	['fio'=>'Kolya', 'date'=>'15.12.19', 'cha'=>'6'],
    	['fio'=>'Kolya', 'date'=>'16.12.19', 'cha'=>'2'],
    	['fio'=>'Vasya', 'date'=>'17.12.19', 'cha'=>'2'],
    	['fio'=>'Igor', 'date'=>'18.12.19', 'cha'=>'2'],
    	['fio'=>'Kolya', 'date'=>'18.12.19', 'cha'=>'2'],
    ];
    $allDates = array_unique(array_column($data,'date'));
    echo "<table><tr><td>Name</td><td>".implode('</td><td>',$allDates)."</td></tr>";
    foreach(array_unique(array_column($data,'fio')) as $name){
      echo "<tr><td>$name</td>";
        foreach($allDates as $day){
            foreach($data as $i){
               if($i['fio']==$name && $i['date']==$day && print("<td>{$i['cha']}</td>"))
                   continue 2;            
      }
        echo "<td>-</td>";
      }
      echo "</tr>";
    }
    echo "</table>";


    на выходе будет что-то вроде :

    5ce4866f3c54b799898206.jpeg
    Ответ написан
  • Как сделать запрос в БД или обработать на php для объединения часов одного дня?

    LaRN
    @LaRN
    Senior Developer
    Можно вот так попробовать.

    Я убрал из select дублирующиеся поля users.`users_id` и user_dolg.`user_id`

    Так как по полю user_dolg.`date` происходит отбор, но оно не включено в список агрегирующих полей, нужно к
    нему применить агрегирующую функцию, например так MAX(user_dolg.`date`) либо добавить поле в список агрегирующих полей.

    Так как вы присоединяете таблицу `users` левым джойном, то в случае отсутствия в ней записи по users_id в поля этой таблицы вернется значение NULL нужно бы обработать этот случай используя функцию ISNULL например или IFNULL. Если же в таблице `users` всегда есть запись для users_id из таблицы user_dolg, то лучше бы LEFT OUTER JOIN заменить на INNER JOIN. Я в запросе написал вариант с INNER JOIN.

    SELECT DISTINCT 
           users.`users_id`,
           users.`name`,
           user_dolg.`date`,
           SUM(user_dolg.hours)  AS sub_hours
      FROM `user_dolg` 
     INNER JOIN `users`
        ON users.`users_id` = user_dolg.`user_id`
     WHERE user_dolg.`date` BETWEEN  '" . $starttime . "' AND '" . $endtime . "'
     GROUP BY users.`users_id`, users.`name`, user_dolg.`date`
    HAVING COUNT(1) > 1
    Ответ написан
    6 комментариев
  • Как лучше организовать сеть между несколькими офисами?

    Zoominger
    @Zoominger Куратор тега Компьютерные сети
    System Integrator
    не совсем понимаю пока что принцип vpn (видимо только он мне и нужен)

    Да.

    я не знаю что это и поможет ли

    Нет.

    какие роутеры в остальных офисах я пока не знаю

    Какие?

    у меня есть ubuntu сервер в этой же сети с роутером и софтом, может это как то поможет

    Может, но не факт.

    Вам нужно оргазиновать именно VPN. Это будет выглядеть, как будто роутер удалённого филиала воткнут в роутер вашего офиса.
    В вашем случае удобно настроить его на роутерах.
    Создаёте на главном роутере VPN Server, настраиваете. У вас должен быть белый внешний IP для этого.
    На филиалах настраиваете подсети (192.168.10X.X, например, тупо на роутерах в разделе LAN ставите каждому филиалу свою подсеть), там же настраиваете VPN-клиенты.
    Советую начать с GRE, он самый простой.

    Это только набросок, без данных о том, какие у вас роутеры, точнее не скажешь. Можно и на линуксовом сервере поднять OpenVPN, высунуть нужные порты наружу, но это сложнее для вас будет).
    Ответ написан
    Комментировать
  • Как указать адрес обработчика php если это шаблон страницы в wordpress?

    wppanda5
    @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    1. как угодно

    #можно так 
    echo TEMPLATEPATH .  'part/to/action/php';
    # а можно так
    echo home_url('/action_page')

    В первом случае в обработчик надо подгрузить движок
    require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );

    Во втором надо естественно опубликовать страницу с обработчиком через админку

    2. А зачем? чем вас $wpdb не устраивает?
    Ответ написан
    2 комментария
  • Как узнать какой вольтаж поддерживает ноутбук для ОЗУ?

    mrsexy
    @mrsexy
    Senior Pomidor
    1.5 вольта - это стандартный вольтаж DDR3 памяти. 1.35 вольта - это стандарт памяти DDR3L.
    Если вы вставите память 1.5 вольта в ноутбук где 1.35 вольт, она просто не заработает, а вот наоборот будет работать. Но желательно тогда в биосе снизить сам вольтаж до 1.35, или поднять частоты памяти не снижая вольтаж, если биос материнской платы позволяет это сделать.
    Подробнее ответ на ваш вопрос вы можете прочитать здесь.
    Ответ написан
    2 комментария
  • Как правильно сделать задание для cron в ubuntu 18.04?

    slo_nik
    @slo_nik
    В консоли(терминал) Ubuntu выполняете команду
    crontab -e
    Это позволит редактировать задания для cron. После выполнения команды увидите в терминале что-то подобное
    # Edit this file to introduce tasks to be run by cron.
    # 
    # Each task to run has to be defined through a single line
    # indicating with different fields when the task will be run
    # and what command to run for the task
    # 
    # To define the time you can provide concrete values for
    # minute (m), hour (h), day of month (dom), month (mon),
    # and day of week (dow) or use '*' in these fields (for 'any').# 
    # Notice that tasks will be started based on the cron's system
    # daemon's notion of time and timezones.
    # 
    # Output of the crontab jobs (including errors) is sent through
    # email to the user the crontab file belongs to (unless redirected).
    # 
    # For example, you can run a backup of all your user accounts
    # at 5 a.m every week with:
    # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
    # 
    # For more information see the manual pages of crontab(5) and cron(8)
    # 
    # m h  dom mon dow   command
    
    ###
    ВОТ ТУТ ПИШИТЕ СВОЁ РАСПИСАНИЕ ДЛЯ CRON
    ###
    * * * * * /home/$user/bash.sh

    После того, как напишите задание для corn, при помощи CTRL+O, ENTER и CTRL+X(последовательно) запишите и закроете редактор.
    Просмотреть список заданий можно командой crontab -l

    p.s.
    Командой crontab -u UserName -e Вы укажите, от имени какого пользователя будет запускаться cron.

    p.s.s.
    Добавленные таким образом задания для cron будут храниться в /var/spool/cron/crontabs. В этой директории будет создан файл с названием по имени пользователя системы. Вот он как раз и редактируется через crontab -e.
    Так же можно создать файлы с заданиями в /etc/cron.d. В этом случае надо указывать имя пользователя, от которого будет запускаться задание.
    Так же есть директории /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly, /etc/cron.weekly. В этих директориях можно разместить файлы с заданиями, которые будут запускаться ежедневно, ежечасно, ежемесячно и еженедельно соответственно.
    Ответ написан
    32 комментария
  • Как добавить доп. поля в форму добавления постов в WordPress?

    Если я правильно понял задачу, то Advanced Custom Fields - это то что Вам поможет
    Ответ написан
    Комментировать
  • Как получать элементы массива по очереди по кругу с задержкой?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function interval(arr, delay, callback) {
      let index = -1;
    
      return setInterval(() => {
        index = (index + 1) % arr.length;
        callback(arr[index]);
      }, delay);
    }
    
    
    const intervalId = interval(keys, 1500, function(text) {
      this.innerText = text;
    }.bind(document.querySelector('.slide-words')));
    Ответ написан
    5 комментариев
  • Кто сталкивался с версткой такого типа макета?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Забудьте... дизайнер просто демон... посылайте нафиг дизайнера...

    О да, люблю эти комментарии. Набросал тут небольшой прототип:


    В браузерах особо не проверял, только Chrome и FF, но вроде в современных должно работать.
    Ответ написан
    6 комментариев
  • Почему картинки не встают в рад?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    потому что стили для .span3, которые
    .span3 {
        width: 270px;
    }

    не умещаются в твой контейнер, который
    .span12 {
        width: 1170px;
    }

    т.е. 4 * 270 = 1080px, а контейнер у тебя 1070
    Ответ написан
    Комментировать
  • Что лучше использовать RedBeanPHP или фреймворк?

    sandu2d
    @sandu2d
    Человек
    Что нравится то и используй. Всё равно в начале пути одно говно будешь делать как и все мы :)
    Ответ написан
    1 комментарий
  • Как задать select value?

    0xD34F
    @0xD34F Куратор тега JavaScript
    <button>toggle disabled</button>
    <select>
      <option value="">выбрать</option>
      <option value="69">hello, world!!</option>
      <option value="187">fuck the world</option>
      <option value="666">fuck everything</option>
    </select>

    const $select = $('select');
    
    $('button').click(function() {
      $select
        .prop('disabled', (i, val) => !val)
        .val('')
        .find('[value=""]')
        .text(() => $select.prop('disabled') ? 'тут ничего нет' : 'выбрать');
    });
    
    // или
    
    const select = document.querySelector('select');
    
    document.querySelector('button').addEventListener('click', () => {
      select.disabled = !select.disabled;
      select.value = '';
      select.options[0].textContent = select.disabled ? 'тут ничего нет' : 'выбрать';
    });
    Ответ написан
    Комментировать
  • Многоуровневый выпадающий список?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('ul.list').on('click', 'li', function(e) {
      if (e.target === this) {
        $(this).children('ul').slideToggle();
      }
    });

    или

    $('ul.list li').click(e => {
      e.stopPropagation();
      $('> ul', e.currentTarget).slideToggle();
    });
    Ответ написан
    Комментировать
  • Как сделать disabled валидацию select'ов таблицы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('table').on('change', 'select', ({ target: t }) => {
      const isNone = t.value === 'none';
    
      $(t)
        .closest('td')
        [isNone ? 'nextAll' : 'next']()
        .find('select')
        .prop('disabled', isNone)
        .val((i, val) => isNone ? 'none' : val);
    });

    или

    document.querySelector('table').addEventListener('change', ({ target: t }) => {
      if (t.tagName === 'SELECT') {
        const isNone = t.value === 'none';
        const { cellIndex: i, parentNode: { children } } = t.closest('td');
    
        [...children].slice(i + 1, isNone ? undefined : i + 2).forEach(n => {
          const select = n.querySelector('select');
          select.disabled = isNone;
          select.value = isNone ? 'none' : select.value;
        });
      }
    });
    Ответ написан
    3 комментария
  • Как не применять скрипт к первым двум значениям(не фильтровать) datatables.js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    $('#example thead tr:eq(1) th').slice(2).each(... дальше всё как было

    UPD. Вынесено из комментариев:

    не проканало, то есть визуально все как надо но по факту поиск из фильтра стал работать не в той колонке

    Ну наверное надо эту двойку добавлять к индексу внутри each, не table.column(i), а table.column(i + 2). Или не полагаться на передаваемый индекс, а вычислять его самостоятельно, что-то вроде const index = $(this).closest('th').index().
    Ответ написан
    2 комментария
  • Из-за чего все ссылки на сторонние сайты без ssl записываются с https?

    Mesuti
    @Mesuti
    Если у вас на сайте SSL, и будут ссылки http.
    То будет отметка, что сайт незащищен.
    Чтобы такого не было, нужно чтобы все ссылки были https.

    Другой вопрос стоит ли ссылаться на сайты принудительно с помощью http?
    У всех нормальных сайтов есть редиректы.
    А у кого нет редиректов, то это говорит об их второсортности
    Ответ написан
    Комментировать