Задать вопрос
  • Самый изящный способ обрезать изображение по div?

    kimono
    @kimono
    Web developer
    Задайте для дива свойства:
    width: 50px;
    height: 50px;
    background: "url(pic.jpg) 50% 50% no-repeat scroll transparent";
    Ответ написан
    Комментировать
  • Как грамотно и безопасно использовать сессии в связке с cookies?

    kimono
    @kimono
    Web developer
    Я на клиенте храню ID сессии. При запуске любого скрипта по этому ID в базе сессий ищется информация и сверяется с user-agent-ом пользователя (можно и ip сверять дополнительно, но если ip поменялся, значит и сессия будет считаться закрытой, а это не всегда удобно).
    Дальше определяется под какой учетной записью залогинился пользователь этой сессии (дополнительный столбец в базе сессий). Сессионные данные парсятся из базы, а инфа о пользователе берется из мемкеша.
    На клиенте можно хранить список избранных материалов например, или данные от голосовалок, чтобы лишний раз не бегать на сервер за этой информацией (на сервере тоже нужно проверять, естественно).
    При завершении скрипта все собранные сессионные данные вновь добавляются в базу.
    Ответ написан
    Комментировать
  • Как изменить фон блока при клике на другие?

    kimono
    @kimono
    Web developer
    <div id="main"></div>
    <div class="pictures">
      <div class="picture" data-bg="pic1.jpg" style="background: url('pic1.jpg') 50% 50%"></div>
      <div class="picture" data-bg="pic2.jpg" style="background: url('pic2.jpg') 50% 50%"></div>
      <div class="picture" data-bg="pic3.jpg" style="background: url('pic3.jpg') 50% 50%"></div>
    </div>

    $(function(){
      $(document).on('click', '.picture', function(){
        var bg = $(this).data('bg');
        $('.main').css('background', 'url("'+ bg +'") 50% 50% scroll no-repeat transparent');
      });
    });
    Ответ написан
    Комментировать
  • Нормальна ли скорость загрузки страницы 500мс?

    kimono
    @kimono
    Web developer
    А можно просто запустить debug и все встанет на свои места. У меня связка phpstorm + xdebug + wincachegrind отлавливает проблемные места. Много чего интересного можно узнать ;)
    Ответ написан
    2 комментария
  • Как сделать дубляж записи в таблице?

    kimono
    @kimono
    Web developer
    INSERT INTO `tbl` (`col1`,`col2`...`colN`) SELECT `col1`,`col2`,...`colN` FROM `tbl` WHERE `code` = 123
    Ответ написан
    Комментировать
  • Ключ добавляется не по порядку, можно ли изменить?

    kimono
    @kimono
    Web developer
    ALTER TABLE `tbl` AUTO_INCREMENT = 4;
    Ответ написан
    Комментировать
  • Как ввести адресную инфу?

    kimono
    @kimono
    Web developer
    В общем случае структура базы такая:
    CREATE TABLE `points` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
      `parent` int(11) DEFAULT NULL COMMENT 'Родитель',
      `name` varchar(128) NOT NULL COMMENT 'Название',
      PRIMARY KEY (`id`),
      KEY `parent` (`parent`)
    ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
    
    INSERT INTO `points` (`parent` ,`name`) VALUES (NULL, 'Россия');
    -- 'Россия': ID = 1
    INSERT INTO `points` (`parent` ,`name`) VALUES (1, 'Хабаровский край');
    -- 'Хабаровский край': ID = 1234
    INSERT INTO `points` (`parent` ,`name`) VALUES (1234, 'Хабаровск');


    Но для лучшего взаимодействия используйте Nested sets. Структура базы такая:
    CREATE TABLE `points` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
      `left_key` int(11) DEFAULT '0' COMMENT 'Левый ключ',
      `right_key` int(11) DEFAULT '0' COMMENT 'Правый ключ',
      `parent` int(11) DEFAULT NULL COMMENT 'Родитель',
      `level` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Уровень вложенности',
      `name` varchar(128) NOT NULL COMMENT 'Название',
      PRIMARY KEY (`id`),
      KEY `left_key` (`left_key`),
      KEY `right_key` (`right_key`),
      KEY `parent` (`parent`)
    ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;


    Nested sets обеспечивает более быструю выборку и удобство. Единственно после любого изменения в базе вам нужно будет запускать процедуру раздачи ключей. Когда писал свой велосипед наткнулся на zabolotnev.com/mysql-nested-sets, оттуда и подчерпнул инфу.
    Ответ написан
    Комментировать
  • Как сгруппировать массив по его значениям?

    kimono
    @kimono
    Web developer
    $week = [
      'Понедельник' => [0 => '9:00', 1 => '19:00'],
      'Вторник'     => [0 => '9:00', 1 => '19:00'],
      'Среда'       => [0 => '9:00', 1 => '19:00'],
      'Четверг'     => [0 => '10:00', 1 => '14:00'],
      'Пятница'     => [0 => '9:00', 1 => '19:00'],
      'Суббота'     => [0 => '9:00', 1 => '19:00'],
      'Воскресенье' => [0 => '10:00', 1 => '16:00']
    ];
    
    $data = [];
    $current = '';
    $i = 0;
    
    foreach ($week as $day => $schedule) {
      if ($current !== $schedule) {
        $current    = $schedule;
        $data[$i++] = ['start' => $day, 'end' => $day, 'time' => implode(' - ', $schedule)];
      }
      $data[$i - 1]['end'] = $day;
    }
    foreach ($data as $id => $row) {
      $data[$id] = [implode(' - ', array_unique([$row['start'], $row['end']])) => $row['time']];
    }
    var_dump($data);

    на выходе:
    'Понедельник - Среда' => '9:00 - 19:00'
    'Четверг' => '10:00 - 14:00'
    'Пятница - Суббота' => '9:00 - 19:00'
    'Воскресенье' =>  '10:00 - 16:00'
    Ответ написан
    Комментировать