• Как удалить все дочерние элементы кроме 3 первых?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    если без всяких жиквери, то
    где NODE - это ссылка на DOM объект вашего DIV
    while (NODE.children.length > 3) {
            NODE.removeChild(NODE.lastChild);
     }


    или с жиквери

    while ($('div > p').children.length > 3) {
            $('div > p').removeChild($('div > p').lastChild);
     }
    Ответ написан
    Комментировать
  • Как правильно построить бесконечное дерево категорий?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Через рекурсивную функцию, которой скармливать объект
    Ответ написан
    Комментировать
  • Как распарсить таблицу. PHP?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Сохранить страницу в DOM а там дальше по обстоятельствам.
    php.net/manual/ru/class.domdocument.php

    Вот пример
    $rates = @file_get_contents($config['exchange_source'], false, $context);
    
    	$dom = new DOMDocument();
    	$dom->loadHTML($rates);
    	
    	foreach( $dom->getElementsByTagName('a') as $node)
    	{
    		$array[] = $node->nodeValue; 
    	}
    	
    	$data = array(
    		'USD' => array('buy' => $array[5],'sell' => $array[6]),
    		'EUR' => array('buy' => $array[8],'sell' => $array[9]),
    		'RUB' => array('buy' => $array[11],'sell' => $array[12]),
    	);
    Ответ написан
  • Что это за разъём?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Если на обратной стороне стоят транзисторы, то это скорее всего порт питания + порт расширения.
    На многих платах есть такие порты. Особенно на принтерных на платах DC контроллера.
    В вашем случае скорее всего для подключения второго винта.
    Ответ написан
  • Как взять предпоследние значение перед вставкой новой записи в большой таблице СУБД postgres?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    а чем RETURNING не нравится?

    Туда же можно привязать что угодно

    Я например удаляя какие-то данные вытаскиваю что вообще удалилось и джоинами прикручиваю все что мне нужно вытащить. например

    DELETE FROM 
    				waybills 
    			USING 
    				invoices 
    			JOIN invoice_data ON
    				invoice_data.invoice_uuid = invoices.invoice_uuid
    			WHERE 
    				waybills.invoice_uuid = waybills.invoice_uuid AND 
    				waybills.waybill_uuid = ?
    			RETURNING 
    				invoice_data.order_data_id,
    				invoices.order_id,
    				invoices.invoice_uuid


    Вы же в своем инсерте также можете добавить RETURNING и указать что вы хотите вернуть )))
    Ответ написан
  • Как найти среднее значение чисел?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Автору нужна формула определения средней точки между двумя координатами или всеми точками, по всей видимости.
    Ответ написан
    Комментировать
  • При вызове phpinfo() - выдает ошибку: "502 Bad Gateway". В чем может быть причина?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    в php.ini видимо есть какая-то библиотека, которая не может подгрузиться.

    смотрите логи сервера
    Ответ написан
    Комментировать
  • Debian 7, как настроить поддомен?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    а кто или что вообще резольвит имена?
    Ответ написан
  • В правильном ли направлении строится система роутингов?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Как уже сказал Stalker_RED направление правильное, но надо еще больше отделить мух от котлет.

    Если ваш класс занимается как бы рутингом, то он и должен только этим заниматься. То есть он обязан вернуть только инстанс класса тому, кто его запрашивает. А тот кто вызывает проверяет нужный ли инстанс он вообще получил и что с ним дальше делать.

    А вы вместо этого вы вызываете $action, делая медвежью услугу.

    А вдруг вам завтра надо будет не сразу выводить данные в браузер, а получить контент по данному запросу? Вам придется шаманить сам рутинг и вот тут вот начнутся костыли.
    Ответ написан
  • Стоит ли и как сделать загрузку "изображений по запросу"?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Мыслите правильно. Нагрузки никакой не будет.
    Ответ написан
    Комментировать
  • Как задать условие при первом клике?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Правильно будет для самой кнопки создать переменную

    если внутри самой функции onclick, то просто

    this.clickCount ? this.clickCount+1 : this.clickCount = 1


    а дальше

    if (this.clickCount > 1) {
       //bla bla bka
    } else {
       return alert("Если не хотите заполнять поле, нажмите еще раз");
    }
    Ответ написан
    Комментировать
  • Как упростить перепор массива?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    О боже.. зачем такой костыль?

    Засуньте данные в JSON, на странице в HTML этот JSON выведите.
    через JS пусть формируются эти списки на стороне клиента из JSON строки.

    А рисуя HTML на стороне PHP вы мало того что раздуваете размер страницы до неимоверных размеров, так еще и сервер загружаете.

    У меня в CRM по 500 строк и в каждой строке по 3 дропдаун меню.
    В каждом дропдауне как минииум 10 значений. Если бы я делал это все на стороне сервера, то мой сервер бы задохнулся, а базе легла мертвым колом.

    a1627f37e5754e8db8f74eea048dc029.PNG
    Ответ написан
  • Как вернуть data из функции ajax?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Есть пара неизвестных в плане как и где вы это используете.
    Но если аякс у вас срабатывает по клику на кнопке, то в обработчике кнопки ставите

    event.preventDefault(); и ставите проверочное условие

    далее вызываете из своего обработчика передаете переменную в функцию
    getData(setter,this)

    как только переданная переменная setter стала не пустой а случился очередной клик, то продолжаете обработку клика по кнопке.. как-то так

    function getData(setter,button) {
     $.ajax({
            url:'../elem/search.php',
            type: 'POST',
            cache: false,
            success : function(data) {
                   setter = data;
                   button.click();
            }
        })
    }
    Ответ написан
    Комментировать
  • Как отловить window.alert и отменить его?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    window.alert = function() {};
    
    // или вот так вот
    
    alert = function() {};
    Ответ написан
    3 комментария
  • Как сделать зеркальные поля при печати из браузера?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Вам надо через CSS определить стили для печати

    @media print {
       …
    }
    Ответ написан
    1 комментарий
  • Как сделать из таких get параметров объект в Javascript?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    1. Делайте передачу данных только POST. Это безопасней и правильней.
    2. Передавайте данные как Base64.encode(Object.toJSON(data))

    Где Object.toJSON - это из библиотеки Prototype.js, в других библиотеках - свои переводчики

    Где Base64.encode - это:
    var Base64 = {
       _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
       //пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ base64 пїЅпїЅ javascript 
        encode : function (input) {
          var output = "";
          var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
          var i = 0
          input = Base64._utf8_encode(input);
             while (i < input.length) {
           chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
           enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
           if( isNaN(chr2) ) {
               enc3 = enc4 = 64;
            }else if( isNaN(chr3) ){
              enc4 = 64;
            }
           output = output +
            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
         }
          return output;
        },
     
       //пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ base64 
        decode : function (input) {
          var output = "";
          var chr1, chr2, chr3;
          var enc1, enc2, enc3, enc4;
          var i = 0;
         input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
         while (i < input.length) {
           enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));
           chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
           output = output + String.fromCharCode(chr1);
           if( enc3 != 64 ){
              output = output + String.fromCharCode(chr2);
            }
            if( enc4 != 64 ) {
              output = output + String.fromCharCode(chr3);
            }
       }
       output = Base64._utf8_decode(output);
         return output;
       },
       // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ utf8 
        _utf8_encode : function (string) {
          string = string.replace(/\r\n/g,"\n");
          var utftext = "";
          for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
           if( c < 128 ){
              utftext += String.fromCharCode(c);
            }else if( (c > 127) && (c < 2048) ){
              utftext += String.fromCharCode((c >> 6) | 192);
              utftext += String.fromCharCode((c & 63) | 128);
            }else {
              utftext += String.fromCharCode((c >> 12) | 224);
              utftext += String.fromCharCode(((c >> 6) & 63) | 128);
              utftext += String.fromCharCode((c & 63) | 128);
            }
         }
          return utftext;
     
        },
     
        //пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ urf8 
        _utf8_decode : function (utftext) {
          var string = "";
          var i = 0;
          var c = c1 = c2 = 0;
          while( i < utftext.length ){
            c = utftext.charCodeAt(i);
           if (c < 128) {
              string += String.fromCharCode(c);
              i++;
            }else if( (c > 191) && (c < 224) ) {
              c2 = utftext.charCodeAt(i+1);
              string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
              i += 2;
            }else {
              c2 = utftext.charCodeAt(i+1);
              c3 = utftext.charCodeAt(i+2);
              string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
              i += 3;
            }
         }
         return string;
        }
     }


    3. На стороне PHP тупо конвертите обратно
    $myVal = json_decode(base64_decode(<!!! значениеиз переменной в POST запросе !!!>,true);
    Ответ написан
  • Поможет ли знание алгоритмов в решении типичных задач?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Что такое алгоритм? Это блок схема с правилами и условиями. Часто думают что алгоритм - это что-то страшное и связанное с высшей математикой, длинными формулами и кучей неизвестных. Вовсе нет! Алгоритм - это последовательность действия, которые ведут к какому-то результату.

    У вас есть задача, соответственно надо придумать как ее решить.

    Самый действенный способ, которым даже я пользуюсь, особенно когда у меня 10-ки условий и операций - это нарисовать блок схему и в ней ориентироваться что я хочу и как это реализовать.
    435bd24dad594f279b18ee293b1f353c.gif

    Когда такая блок схема есть, то потом дальше легче ориентироваться, я иногда пишу прям в коде

    /* пример выборки
    		 invoice_number | invoice_amount |           invoice_customer           |    invoice_date     |    date_check    | order_id | order_data_id | quantity | price |              item_uuid
    		----------------+----------------+--------------------------------------+---------------------+------------------+----------+---------------+----------+-------+--------------------------------------
    		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |         10125 |        8 | 41160 | 76e80df8-5802-11e4-6686-0e459e882122
    		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |         10124 |        4 | 41160 | bde6a7ce-32c2-11e2-92a8-c692850d4a80
    		 00000000073    |         493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 |                  |     5110 |               |        1 |   111 | e6b5251c-feb3-11e6-ef88-26a4bef88324
    		 
    		 1.		Пользоваетель добавляет инвойс через сайт, соответствие позициций заказа сохраняется через order_data_id, а то что в инвойсе через item_uuid
    		 2.		Если в 1с кто-то удаляет позицию, то мы в базе также обязаны удалить запись и из invoice_data
    		 2.1		Алгоритм поиска записи:
    		 2.1.1			получаем из этого запроса все текущие позиции с item_uuid
    		 2.1.2.			ищем такую запись в массиве $invoice['Товары']. Если не найдено, то строку нужно удалить
    		 2.2		Процесс удаления:
    		 2.2.1			перед удалением нам надо изменить в таблице order_data стаус на  OrderState::CANCELED -> Отменен
    		 2.2.2			затем удалить запись из invoice_data, так как в инвойсе этой строки не существует
    		 3.		Если в 1с кто-то добавляет позицию, а в CMR такой позиции нет, то мы должны будем ее добавить в invoice_data
    		 3.1.		Добавляем запись без указания order_data_id. Это будет говорить о том, что в счете есть такая позиция, а в CRM она никуда не привязана
    		 3.2.		Необходимо в веб сокете передать эту информацию и на сторое JS сделать информирование и обработку этих данных
    		 4.		Необходимо сравнить все позиции и высчитать новые значения
    		 5.		Пустая выборка означает, что полученный счет никуда не привязан
    		*/


    Ну а реализация алгоритма - это уже инструментарий языка. И это уже нарабатывается с опытом.
    Ответ написан
    2 комментария
  • Как найти строку, длинна которой максимально близка нужной?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    Что за мания у пользователей mySQL все делать через подзапросы?

    ведь полно инструментариев, тот же самый CASE
    Ответ написан
  • Почему функция ничего не возвращает?

    Falseclock
    @Falseclock
    решаю нестандартные задачи
    потому что AJAX - это асинхронный вызов - это раз
    getData() у вас всегда будет возвращать void значение. - это два

    нужен либо синхронный вызов, либо значение search передавать в другую функцию и там вешать хендлер, который обрабатывать данные.

    Можете вот так вот протестировать

    function getData() {
      console.log('1. вхождение в функцию');
      $.ajax({
        url: '../elem/search.php',
        type: 'POST',
        cache:false,
        success : function(search) {
          console.log('3. результат вызова');
          console.log(search);
          return search;
        }
      })
      console.log('2. выход из функции');
    }
    
    var data = getData();
    console.log(data);


    а вот добавив async: false - будет возвращаться результат

    function getData() {
      console.log('1. вхождение в функцию');
      var result;
      $.ajax({
        url: '../elem/search.php',
        type: 'POST',
        cache:false,
        async: false,
        success : function(search) {
          result = search;
          console.log('3. результат вызова');
          console.log(data);
        }
      })
      console.log('2. выход из функции');
      return result;
    }
    
    var data = getData();
    console.log(data);
    Ответ написан
    Комментировать