Deerua about Coding

Блог о кодинге, автор Deerua

coding, javascript, css, html, php, jquery, mysql, deerua

Deerua about Coding

 Избранное

 Самые комментируемые за всю историю

 198 заметок ненаглядно

 Архив за 2010, 2009, 2008  год


Июнь 2010
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

 20 июня 2010, 16:57       более месяца назад

Лучший xml2array

Немного наобламывавшись с предыдущим парсером, решил поискать что-то получше. Просмотрев с 50 парсеров, которые тупо не могли справится с моим примером xml, я таки нашёл тот, который это сделал очень быстро и без проблем.
function xml2array(&$string) {
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parse_into_struct($parser, $string, $vals, $index);
    xml_parser_free($parser);
    $mnary=array();
    $ary=&$mnary;
    foreach ($vals as $r) {
        $t=$r['tag'];
        if ($r['type']=='open') {
            if (isset($ary[$t])) {
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            $cv['_c']=array();
            $cv['_c']['_p']=&$ary;
            $ary=&$cv['_c'];
        } elseif ($r['type']=='complete') {
            if (isset($ary[$t])) { // same as open
                if (isset($ary[$t][0])) $ary[$t][]=array(); else $ary[$t]=array($ary[$t], array());
                $cv=&$ary[$t][count($ary[$t])-1];
            } else $cv=&$ary[$t];
            if (isset($r['attributes'])) {foreach ($r['attributes'] as $k=>$v) $cv['_a'][$k]=$v;}
            
            if (isset($r['value'])) $cv['_v'] = $r['value'];
        } elseif ($r['type']=='close') {
            $ary=&$ary['_p'];
        }
    }    
    
    _del_p($mnary);
    return $mnary;
}
function _del_p(&$ary) {
    foreach ($ary as $k=>$v) {
        if ($k==='_p') unset($ary[$k]);
        elseif (is_array($ary[$k])) _del_p($ary[$k]);
    }
}

Последняя функция удаляет результаты рекурсий ;)



 1 комментарий

 Теги: php

 15 июня 2010, 16:21       более месяца назад

почти аналог GM_xmlhttpRequest

У замечательного аддона к ФФ обезьянке, есть функция для аджаксика. Когда хочется один такой скриптик пернести на Хромого, например, он начинает спрашивать эту функцию. Потому встречайте:

GM_xmlhttpRequest = function(params) {
  var request = new XMLHttpRequest()
  
  request.onreadystatechange = function() {
    if (params.onreadystatechange) params.onreadystatechange(request)
    if (request.readyState == 4) {
      if (request.status >= 200 && request.status < 400) if (params.onload) params.onload(request)
      else if (params.onerror) params.onerror(request)
    }
  }
  
  request.open(params.method, params.url, true)
  if (params.headers) for (name in params.headers)
    request.setRequestHeader(name, params.headers[name])
  
  request.send(params.data)
  return request
}

 Комментировать…

 Теги: javascript

 11 июня 2010, 09:49       более месяца назад

CSS3: Перевод больших строк в новый рядок (pre-wrap)

pre {
	white-space: pre­;           /* CSS 2.0 */
	white-space: pre-wrap­;      /* CSS 2.1 */
	white-space: pre-line­;      /* CSS 3.0 */
	white-space: -pre-wrap­;     /* Opera 4-6 */
	white-space: -o-pre-wrap­;   /* Opera 7 */
	white-space: -moz-pre-wrap­; /* Mozilla */
	white-space: -hp-pre-wrap­;  /* HP Printers */
	word-wrap: break-word­;      /* IE 5+ */
	}


 2 комментария

 Теги: css3

 9 июня 2010, 10:18       более месяца назад

Сравнение таблиц в двух БД (и больше)

Когда дохера работы, начинаешь страдать такой ерундой :)
Раз в несколько месяцев приходится сравнивать БД, и каждый раз в ручную. Один даже раз софт сутки искал, но он ужасен, весь. Немного пострадав, минут 30, получился такой код:
  • собираем всё в масcив;
  • выводим всё красиво в табличках;
  • подключаем jQ и делаем удобную «обёрточку»;
  • Profit
<?php
  $user  = "root";
  $userp = "";
  mysql_connect("localhost", $user, $userp) or die(mysql_error());
	$table2compare = array("test1", "test2");
	$comparedtables = array(); $i = 0;
  foreach ($table2compare as $tablename){
  	$comparedtables["title"][$i] = $tablename;
    $db = mysql_query("SHOW TABLES IN $tablename");
    while($dbt = mysql_fetch_array( $db )){
      $table = mysql_query("SHOW COLUMNS FROM $dbt[0] FROM $tablename ");
      while($tbf = mysql_fetch_array( $table ))
      	$comparedtables["tables"][$dbt[0]][$i][] = $tbf;
    }
    $i++;
  }
	echo "<table><tr>";
	for ($j = 0; $j < $i; $j++) 
		echo "<td>".$comparedtables["title"][$j]."</td>";
	echo "</tr>";
	foreach ($comparedtables["tables"] as $table => $fields) {
		echo "<tr>";
		for ($j = 0; $j < $i; $j++) {
			if ($j > 0) $eq = $fields[$j] == $fields[0]; else $eq = true;
			echo "<td valign='top' ".(!$eq ? "style='background: #fcc;'" : "").">";
			if (empty($fields[$j])) continue;
			echo "<span>$table</span><br><table rules=all frame=box cellpadding='2'>
            <tr>
            	<td>Field</td>
            	<td>Type</td>
            	<td>Null</td>
            	<td>Key</td>
            	<td>Default</td>
            	<td>Extra</td>
            </tr>";
  		foreach ($fields[$j] as $field)
	      echo "<tr>
	      				<td>$field[0]</td>
	      				<td>$field[1]</td>
	      				<td>$field[2]</td>
	        			<td>$field[3]</td>
	        			<td>$field[4]</td>
	        			<td>$field[5]</td>
	        		</tr>";
      echo "</table></td>";
    }
    echo "</tr>";
  }
  
  echo "</table>";
  mysql_close();
?>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
	$(function(){
	  $("table table").hide();
	  $("table span").click(function(){
	  	$(this).next().next().toggle();
	  }).css({"cursor":"pointer"});
	});
</script>

 Комментировать…

 Теги: javascript, mysql, php

 26 мая 2010, 16:25       более 2-х месяцев назад

getBoxObjectFor для FireFox 3.6 и выше

    if(typeof document.getBoxObjectFor == "undefined") {
        document.getBoxObjectFor = function(elem) {
            var obj = new Object;
            var rect = elem.getBoundingClientRect();
            obj.y = rect.top;
            obj.x = rect.left;
            obj.width =Math.abs(rect.right-rect.left);
            obj.height = Math.abs(rect.bottom-rect.top);
            return obj;
        }
    }

 2 комментария

 Теги: browsers   mozilla   firefox, javascript

 24 мая 2010, 11:05       более 2-х месяцев назад

Как делать CRX для Google Chrome

Дорогой дневничок… Кажется не туда пишу.

Так как всегда забываю о сабже, и каждый раз долго ищу, решил таки себе сохранить.
chrome.exe --pack-extension="C:\MyTheme"

Запускать с командной строки win+r
ps: chrome нужно закрывать, полностью!

 Комментировать…

 Теги: Chrome

 23 мая 2010, 22:41       более 2-х месяцев назад

usejquery.org.ua  

Шпору о джиквери переправил на домен http://usejq.org.ua/ , позже там будет что-то более полноценное.
  • блог
  • мои наработки
  • Копи-зона
Peace!

 Комментировать…

 Теги: javascript   framework   jquery

 17 мая 2010, 09:47       более 2-х месяцев назад

Firebug Lite Snippet (bookmarklet)

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

А вот и он
javascript:var firebug=document.createElement('script');
firebug.setAttribute('src',
'http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');
document.body.appendChild(firebug);
(function(){if(window.firebug.version)
{firebug.init();}else{setTimeout(arguments.callee);}})();
void(firebug);

Для удобства, запихаем его в текстареа

 Комментировать…

 Теги: javascript   framework   firebug, javascript, snippet

 15 мая 2010, 21:18       более 2-х месяцев назад

Javascript: get Array Unique Values

getUniqueValues = function (arr) {
	var hash = new Object();
	for (j = 0; j < arr.length; j++) {hash[arr[j]] = true}
	var array = new Array();
	for (value in hash) {array.push(value)};
	return array;
}

 2 комментария

 Теги: javascript

 12 мая 2010, 21:21       более 2-х месяцев назад

Javascript: простенькая истина оптимизации #1

Хехе, что бы всё было быстро и классно, вставки и аппенды в ДОМ делайте как можно реже, даже если это выглядит не очень красиво, зато прирост в скорости невообразимый! :)

 Комментировать…

 Теги: javascript, истинка

Ctrl
Нужно создать сайт на 1С-Битрикс(Bitrix)?
Работает на движке e2 Selecta * All sources code was highlighted with w3club Highlighter.
deer.org.ua © 2008—2010 Vitaliy Bogdanets Deerua