Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Делимся опытом (http://forum.oszone.net/showthread.php?t=46450)

Prisoner 09-03-2005 14:57 304852

Делимся опытом
 
Все люди индивидуальны. Каждый по своему глядит на мир и на работу в частности. У кого-то призвание может оказать помощь и не малую. Предлагаю делиться опытом. Возможно, модераторы этого раздела соберуться с силами и создадут FAQ на основе этой темы и всех имеющихся. Просьба советы и всяческие типсы каким-то образом выделять. Скажем нумерация аля "Фишка №(№предыдущей+1)" :). Ведем обсуждение и общаемся. Если не трудно, то указываем свое отношение и поправки - это тоже информация. В путь и да пребудет с нами Сила :).

Prisoner 09-03-2005 15:05 304853

Фишка №1.
Очень часто необходимо реализовать постраничный вывод данных из БД. Черт с ними, с данными, фишка не в этом. Обычно у нас есть номер страницы PN и число элементов на страницу EN. Тогда выборку можно организовать используя LIMIT (PN-1)*EN, EN в запросе. Тут проблема - как узнать сколько всего данных (на сколько их вообще страниц)? Отсылать второй запрос без LIMIT? Не... тут разработчики дают одну забавную возможность: отсылаем второй запрос (сразу после лимитированного) вида "SELECT FOUND_ROWS()" и обрабатываем его в штатном режиме - результат число строк из БД как будто нет LIMIT. Приемущество данного метода в том, что данные хоть и выбираются, но не передаются клиенту, что быстрее.

Prisoner 09-03-2005 15:09 304854

Фишка №2 (народная)
Случайная выборка N элементов из БД.
Запрос такого вида:
Код:

SELECT
  *
ORDER BY
  rand()
LIMIT N

даст требуемый результат. При необходимости можно включать условия WHERE или убирать LIMIT. Cлучайность тут реализует ORDER BY rand().

Prisoner 10-03-2005 15:04 305266

"Фишка" №3
Иногда нужно выводить циферки в красивом виде. Примером может служить вывод колонки цен в таком виде: " 22 000". Тут поможет функция number_format. Для примера, вызов будет таким: number_format($Var, 0, '', ' ');. По ссылке есть типс на счет неразрывного пробела - дело в том, что для разделителя тысяч используется только первый символ переданого функции сепаратора, а в " " их шесть :).

Prisoner 11-03-2005 19:29 305804

Типс №4
Долгое время пользовался FastTemplate. Попробовал TemplatePower и возрадовался. По мне так очень симпатичная штука. Почитать об этом шаблонизаторе можно тут.

Prisoner 12-03-2005 13:27 306024

Типс №5
PEAR позводит вам использовать уже написанные функциональные модули. Правда для этих модулей (классы или просто функции, но чаще классы) необходима базовая система PEAR аля движок. У большинства хостеров эта базова система уже имеется, но если это не так, то ее нетрудно установить, воспользовавшись "установщиком" (прочесть об этом можно на сайте). По ссылке большой объем нетривиальных решений нетривиальных задач.

Prisoner 12-03-2005 13:58 306029

Фишка №6
Часто, если не всегда, требуется обеспечить админ-интерфейс для сайта. Причем самой распространенной проблемой является реализация WYSIWYG редактора текстового (и не только) контента страниц. Если пункты какого-либо каталога можно вдалбливать в БД через форму, то вот текст с картинками и форматированием будет крепким орешком. Тут, в большинстве ситуаций, поможет WYSIWYG редактор SPAW. Почему в большинстве случаев? Поддержка Gecko только анонсируется. Таким образом, если есть информация, что админить будут, используя только IE версии не младше 5.5, то SPAW - оптимальное решение. Кстати, кто-нибудь использует оный или аналоги? Про аналоги было бы интересно узнать мнения.
Про аналоги можно посмотреть на соответствующих офсайтах: FCKEditor, Kafenio.Editor (на Java), pinEdit (IE only)
Гигантский список такого рода приблуд.

Prisoner 13-03-2005 11:00 306290

Типс №7
Аналогичный PEAR проект - репозиторий классов php. Большое количество (имхо, большее чем у PEAR) классов по различным категориям. Отличительной чертой является независимость от какого-то материнского класса. Однако некоторые классы с этого ресурса могут быть в зависимости друг от друга. Требуется регистрация при закачке пакетов даунлоадерами не встроенными в броузер. Есть рассылка о новых поступлениях, обновлениях и т.д.

archy 14-03-2005 12:14 306557

Prisoner
Цитата:

SELECT FOUND_ROWS()
чем это отличается от запроса select count()?

Prisoner 14-03-2005 12:33 306567

В общем и целом - ничем. В нюансах: есть запросы когда невозможно получить сразу и данные и число строк в выборке, к тому же count() игнорирует LIMIT. А еще, если прочесть то, что пишут разработчики о кеше запросов, выяснится, что информация о числе строк берется из кеша.
Цитата:

SQL_CALC_FOUND_ROWS и FOUND_ROWS() позволяют узнать, сколько строк возвратит запрос без оператора LIMIT.

Prisoner 22-03-2005 11:21 308963

Интересность №8.
Google Code - сам о себе.

Prisoner 27-04-2005 13:40 319645

Фишка №9.
Сжатие кода страницы.

Сразу оговоримся, что сжатие касается только текстового контента - кода разметки. Лучше это работает когда есть некий движок сайта который "вычисляет" код страницы и делает вывод клиенту одним echo|print. Тогда все вообще просто:
Код:

if ( (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) and (extension_loaded('zlib')) )
 {
  header('Content-Encoding: gzip');
  echo gzencode($PageContent, 9);
 }
else
  echo $PageContent;

Условием проверяем готовность клиента воспринимать сжатый контент и возможность сжимать, затем уведомляем о сжатом контенте, сжимаем и отдаем.
Важно: вывод любого контента, даже сжатого, должен быть после любых выводов заголовков.
У меня сжатие контента происходит примерно в 5-7 раз. Объясню почему такой большой процент: отсутпы, люблю делать отступы и все структурировать. Однако тут бонус - доволен программист, доволен посетитель.
Подводный камень: Outpost Firewall рубит такой контент на корню. Он просто не выпускает броузерные заголовки о возможности принимать сжатый контент. Чтобы побороться за трафик у себя необходимо почитать тут. Однако следует заметить, что все отзывы о включении этой фичи говорят о нормальной работе без каких-либо ограничений.

vadimiron 21-06-2005 19:14 334995

Фенечка №10.
Статья, по созданию mp3-player-а для сайта с помощью JavaScript

Prisoner 22-06-2005 17:31 335262

Фенька №11.
Вызываем метод класса в preg_replace_callback:
Код:

preg_replace_callback('/RegExp/', array(&$this, 'callback_method'), $string)
Важно передавать $this как ссылку. Такой "финт ушами" может понадобиться при вызове данной полезной функции внутри некого метода некого класса - не выность же callback-функцию за пределы класса :).

Prisoner 23-06-2005 08:05 335408

Фишка №12.
Пособить в разработке регулярных выражений может такая программа как RegexBuddy. Эдакая "IDE" по регуляркам, здорово облегчает жизнь.

archy 25-06-2005 19:20 336095

Фишка №13
Отличная ссылка для вебдевелоперов
Web browser standards support

Prisoner 01-07-2005 02:35 337386

Вложений: 1
Фенька № 14.
Функция по выводу информации о переменной в удобоваримом виде с предоставлением информации о строке вызова этой функции (очень удобно при поиске места, когда этот самый вызов необходимо убрать).

mar 11-07-2005 09:54 340097

(пришлось тут поднять то, что уже как-то писала в форум. Решила запостить в это FAQ :))
Дано - форма с text/textarea
Задача:
- С одной стороны над не дать злым хакерам возможность вставлять длинное-длинное слово и портить вид таблицы,
- с другой - надо было не разбивать длинные слова.
Решение: Текст разбивается на слова и проверяется уже размер каждого(понятно, что 90 и 55 - это под размеры моей таблицы ):
PHP код:

/*
* вставляем разбиение длинного текста на слова       
*/
function string_display_value($value$n=90) {    
          
$words explode (" "$value);    
          
$new_value='';    
          while (list (
$key$val) = each ($words)) { 
                   if(
strlen($val) > 55// если длина одного слова...                     
                            
$val wordwrap($val$n"\n"1); 
                   
$new_value.=$val' ';    
          }    
          return 
$value == '' '<br>' htmlspecialchars($new_value); 



slaine 14-07-2005 15:54 340988

Фенька № 16
Удаляю топик на форуме:
Сначала выбираю из mysql id сообщения:
PHP код:

$id $print['a_id']; 

Потом перехожу к скрипту, который удаляет записи:
PHP код:

echo "<td width=133><a href=postdel.php?id=".$id.">delete</a></td>"

И он всё делает:
PHP код:

mysql_query("delete from gb where a_id='$id'"); 


slaine 17-07-2005 23:06 341775

Фишка №17
JavaScript проверка правильности введенных в форму числовых данных.
Код:

<html>
<title></title>
<head>
<script language = javascript>

function asd(sss){

num="0123456789";

  for(i=0; i<sss.length; i++){
if (num.indexOf(sss.charAt(i))<0){

  alert('Должны быть только цифры');
aaa.sss.focus();
break;
}
  }

}
</script>
</head>
<body>
<form name=aaa>
<input type="text" name=sss maxlength=4>
<input type="button" VALUE="Отправить" onClick="asd(sss.value)">
</form>
</body>
</html>

Аналог в регулярках.
Код:

function isNumber(elem) {
    var str = elem.value;
    var re = /^[-]?\d*\.?\d*$/;
    str = str.toString( );
    if (!str.match(re)) {
        alert("Должны быть только цифры.");
        return false;
    }
    return true;
}

Первый вариант не учитывает отрицательность числа. Второй взят из книги O'Relly.

Prisoner 30-07-2005 15:19 344722

Полезность №18.
Часто необходимо вычислить дату через "сколько-то там чего-то". Ну к примеру не терпится узнать, что за дата будет через 13 дней или 13 недель. Чаще необходимо решение задача вывода дня недели через Х дней. В любом случае поможет связка date и strtotime. Примеры из официальной доки по strtotime:
Цитата:

int strtotime (string time [, int now])

Функция ожидает строку, содержащую английский формат даты, и пытается разобрать этот формат в UNIX timestamp относительно timestamp, заданного в параметре now, или относительно текущего времени, если ничего не задано. При неудаче возвращает -1.

Пример 1. strtotime()
Код:

echo strtotime ("now"), "\n";
echo strtotime ("10 September 2000"), "\n";
echo strtotime ("+1 day"), "\n";
echo strtotime ("+1 week"), "\n";
echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime ("next Thursday"), "\n";
echo strtotime ("last Monday"), "\n";


На основе такой функциональности можно легко писать следующее:
Код:

echo 'Завтра: '.date('D, j M Y', strtotime("+1 day")).'<br>';
echo 'Послезавтра: '.date('D, j M Y', strtotime("+2 day")).'<br>';
echo 'Через неделю: '.date('D, j M Y', strtotime("+1 week")).'<br>';


Prisoner 30-07-2005 19:08 344763

Фенька №19
Порой необходимо сортировать многомерные массивы.
Код:

array(8) {
  [0]=>
  array(7) {
    ["UID"]=>   
    string(2) "92"
    ["owner"]=>
    string(9) "Петров П."
    ["post"]=>
    string(6) "Стажер"
  }
  [1]=>
  array(7) {
    ["UID"]=>
    string(2) "62"
    ["owner"]=>
    string(9) "Иванов И."
    ["post"]=>
    string(6) "Мастер"
  }
  [2]=>
  array(7) {
    ["UID"]=>
    string(2) "61"
    ["owner"]=>
    string(10) "Сидоров С."
    ["post"]=>
    string(6) "Стажер"
  }

Причем по какому полю - не известно, в перспективе необходима возможность сортировки по всем полям. Тут поможет create_function.
Цитата:

string create_function (string args, string code)

Создаёт анонимную функцию из передаваемых параметров и возвращает уникальное имя для неё. Обычно аргументы args будут передаваться в единой закавыченной строке, это же рекомендуется и для code. Смысл использования отдельных закавыченных строк в том, чтобы защитить имена переменных от разбора, иначе, если вы используете двойные кавычки, появится необходимость мнемонизировать имена переменных, например, \$avar.

Вы можете использовать эту функцию для (например) создания функции из информации, получаемой на этапе прогона:Пример 1. Создание анонимной функции с помощью create_function()
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);');
echo "New anonymous function: $newfunc\n";
echo $newfunc(2,M_E)."\n";
// выводит:
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
Пусть имеется список допустимых полей по которому мы должны обеспечить сортировку - как бы ограничитель полей по которым вообще можно сортировать (так или иначе он у нас будет, либо из головы, либо из БД (см. fetch_fields)):
$arFields = array('field1', 'field2', 'field3');
тогда сортировка вышеприведенного массива выглядит примерно так:
Код:

if ($up === true)
        usort($array, create_function('$a,$b','if ($a[\''.$arFields[$FID].'\'] == $b[\''.$arFields[$FID].'\']) return 0; else return ($a[\''.$arFields[$FID].'\'] < $b[\''.$arFields[$FID].'\']) ? -1 : 1;'));
      else
        usort($fResult, create_function('$a,$b','if ($a[\''.$arFields[$FID].'\'] == $b[\''.$arFields[$FID].'\']) return 0; else return ($a[\''.$arFields[$FID].'\'] > $b[\''.$arFields[$FID].'\']) ? -1 : 1;'));

Где $FID номер поля.

Prisoner 03-08-2005 13:55 345666

Плюшка №20.
Интересная картинка - шпоргалка по css (97 kb).

Prisoner 17-08-2005 18:41 348750

Вложений: 3
Полезность №21 (очко!)
Вернусь к вопросу о дебажном выводе. Со временем мне стало не хватать "мощности" функции и я решил ее расширить:
1) Блок с выводом можно свернуть/развернуть
2) Блок можно закрыть
3) Можно управлять выводом заголовка с помощью параметра функции (ниже) для вывода сообщений
Подробнее:
Пп. (1) и (2) реализуется путем разового вывода куска JS-кода двух функций: сворачивания/разворачивания блока и его скрытия. Т.о. вызовов функции может быть несколько, но вывод JS будет произведен только однажды.
П. (3) полезен в ситуации когда хочется узнать что возвращает функция с разными параметрами: к примеру есть некий параметр $param который однозначно определяет работу функции (де юре), передаем его в функцию дебажного вывода вместе с самим результатом функции (тот, который return'им) и видим результат работы проверяемой функции (де факто).
Синтаксис:
void var_dumpf (mixed $var [, array $options])
Выводит содержимое переменной $var переданной по значению с заданными опциями $options.
$options - массив со следующими допустимыми ключами:
  • width - string, ставится в width таблицы обрамляющей блок вывода, по сути ширина блока вывода
  • collapsed - boolean, будет ли свернут блок или нет
  • message - string, добавочная строка выводящаяся в заголовке блока
Примеры:
PHP код:

//вывод №1
$options = array('message' => $dbFields'collapsed' => true);
var_dumpf($fResult$options);
//вывод №2
var_dumpf($fResult); 

("Выводы" в прикрепленных файлах, там же функция)

Prisoner 25-08-2005 16:13 350772

Вложений: 1
Предлагаю вашему вниманию самописный класс-компонент селектора.
Все наверное хоть раз в жизни сталкивались с таким элементом управления как два мультиселекта с рядом кнопок между ними для перемещения элементов из одного в другой. Лично мне понадобилась такая приблуда при кодинге админчасти одного из проектов для выбора вариантов из некоторого множества существующих.
Всегдашнее желание сделать все «по уму» оформилось в конечном счете в класс работа с которым чрезвычайна проста: создать экземпляр класса, выбрать подходящий метод генерации «компонента» и передать ему нужные данные.

Итак, класс selector:
методы:
  • selector – конструктор, означивает свойства класса (шаблоны под составные части компонента)
  • createSelector – основной метод генерации «компонента» из шаблонов и переданных данных, не следует вызывать его напрямую, метод сугубо внутренний, рабочий.
  • getSelector – метод, возвращающий код составных частей «компонента» в ассоциативном массиве array('sLeft' => 'html код левого селекта', 'sRight' => ' html код правого селекта ', 'buttons' => 'html код кнопок между селектами', 'JS' => 'JS код выполняющий перемещения опций селектов', 'full' => 'полный код компонента').
  • newSelector – метод, работающий аналогично getSelector, но возвращающий код «компонента» в свойство html класса с такими же именами ключей.
  • convertToItems – ввиду того, что данные необходимо подавать сборщику «компонента» в особом формате, сделан метод-конвертер на вход которому передаются два ассоциативных массива с данными для левого и правого селектов соответственно и три строковых параметра которые хранят значения ключей которые нужно преобразовать в необходимые для подачи массива данных сборщику.
свойства:
  • $html – метод newSelector будет класть код именно в это свойство
  • $tmpl – массив шаблонов элементов «компонента»
константы:
  • SELECTOR_IMG_DIR – т.к. кнопки сделаны картинками, то константа должна указывать на директорию с оными.
Логика: Необходимо дать посетителю возможность выбора опций из имеющихся, а после отправки формы обработать выбор. Пусть мы сделали выборку из БД, чаще всего это массив (большие объемы данных обычно разбивают на страницы). Пусть он будет следующего вида $left = array('id' => string, 'nick' => string). Смысл данных этого массива следующий – есть из чего выбирать: эти-то данные и будут помещены в левый селектор. Данные выборки необходимо преобразовать к виду array(array('caption' => string, 'value' => string,[ 'class' => string]), …), для чего вызываем метод convertToItems($left, array(),'nick', 'id') который вернет массив готовый для передачи сборщику компонента передав ему кроме данных еще и имя переменной name по которой будут доступны результаты выбора. После того как форма будет отправлена, в нашем распоряжении будут массивы nameAvailable и nameSelected которые в сумме (оператор + над массивами) дадут все возможные варианты для выбора при необходимости.
Почему код по частям: дизайн всегда разный, кто-то захочет сделать «компонент» не горизонтальным, а вертикальным, кто-то вообще разбросать по всей странице. Создаем новый селектор и по частям выводим куда надо. JavaScript-код будет выводиться один раз на страницу, но если необходимо получить его еще раз, для этого есть в методах сборки параметр bool $forceJS. Когда нет необходимости в изощренном виде «компонента» просто выводим содержимое по ключу 'full' (вид близкий к обычному виду windows контрола).

В архиве класс + файл примера в котором после отправки формы выводится содержимое массивов выбранных элементов и остаток доступных для выбора (внимание: после отправки формы данные в «компоненте» неактуальные из-за отсутствия перезаписи данных относительно массива $_POST)

vadimiron 08-10-2005 18:39 362649

Фишка номер 23:

Когда в php.ini стоит register_globals off, но всё же есть желание использовать переменные по прямому их имени,а не по например $_GET["var_name"], то можно воспользоваться функцией import_request_variables("x"); , причём х здесь это любое сочетание из g,p,c. Как нисложно догадаться каждая из букв-это начальная буква трёх методов передачи данных в скрипт: GET, POST, COOKIE

mar 28-10-2005 20:39 368549

нумбер 24
проверка на корректность ввода даты ($our_data):
PHP код:

/* Вид вводимой даты на ближайшее тысячелетие: 29.10.05, или 10,  если  29.10.2005
вместо разделителя - точки можно использовать в explode нечто глобальное, определенное в конфигурационном файле приложения */
            
if (!isset($our_data) || strlen(trim($our_data))!= 8)         
                                   
функция_корректного_отлупа();
            
$data_pieces explode("."$our_data);                        
            if (!(
                    ( 
== count$data_pieces ) )
                    && 
is_numeric$data_pieces[0] ) && is_numeric$data_pieces[1] ) && is_numeric$data_pieces[2] )
                    && 
checkdate$valide_date[1], $valide_date[0], $valide_date[2] )
                ))
                
функция_корректного_отлупа(); 

Используется стандартная функция
Цитата:

bool checkdate (int month, int day, int year)

Возвращает TRUE, если предоставленные данные верны; иначе возвращает FALSE. Проверяет правильность даты, сформированной аргументами.
Дата считается правильной, если:
  • year (год) имеет значение от 1 до 32767 включительно.
  • month (месяц) имеет значение от 1 до 12 включительно.
  • day (день месяца) находится в пределах допустимого количества дней для данного month. Високосные годы также учитываются.


mar 03-12-2005 18:33 379500

N25 (юбилей :))
на самом деле, скорей напоминание - дебажное измерение скорости работы скрипта:
PHP код:

<?php
define
("start",microtime(true));
/* дальше идет сам код */
printf("time   %.5f c",microtime(true)-start);
?>


vadimiron 12-02-2006 13:36 405737

N26
Графический редактор конфиг файла сервера Apache: здесь

Prisoner 14-02-2006 10:13 406309

Там же, кстати, еще такая тулза как Apache Commander. Тоже гарный инструмент.

mar 15-02-2006 20:31 406972

27
Простая идея, но очень хорошо работает для фотогаллереи (откуда и взята)
Фото лебедя можно просмотреть на разном фоне:
Код:

<head>
<!-- http://www.photosight.ru/viewpicwindow.php?photoid=1278386 -->
<script language="JavaScript" type="text/javascript">
<!--
function SetBG(color)
{
    document.bgColor = color;
}
//-->
</script>
</head>
<body bgcolor="#999999">

<table width="100%" height="96%" border=0 cellpadding=0 cellspacing=0>
<tr><td align=center><a href="#" onClick="window.close()"><img alt="Valesia, &quot;в лучах заходящего солнца&quot;" border=0 src="http://img-2006-02.photosight.ru/15/1278386.jpg" GALLERYIMG="no"></a></td></tr>
<tr><td>

<table align=center cellpadding=0 cellspacing=2 border=0>
<tr>
<td bgcolor="#FFFFFF" onmouseover="SetBG('#FFFFFF')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#E5E5E5" onmouseover="SetBG('#E5E5E5')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#CCCCCC" onmouseover="SetBG('#CCCCCC')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#B3B3B3" onmouseover="SetBG('#B3B3B3')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>

<td bgcolor="#999999" onmouseover="SetBG('#999999')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#808080" onmouseover="SetBG('#808080')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#666666" onmouseover="SetBG('#666666')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#4D4D4D" onmouseover="SetBG('#4D4D4D')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#333333" onmouseover="SetBG('#333333')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#1A1A1A" onmouseover="SetBG('#1A1A1A')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td bgcolor="#000000" onmouseover="SetBG('#000000')"><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td><img src="/pics/dot.gif" width=18 height=18 border=0></td>
<td><a href="#" onClick=window.close()><img src="/pics/b_close.gif" width=18 height=18 border=0></a></td>
</tr>
</table>

</td></tr>
</table>
</body></html>

Все просто, но мне понравился результат :)

slaine 21-03-2006 18:53 420210

28
Простая идея, пунктирная линия!
А, то стиль не вовсех браузерах правильно показывает.

Код:

<html>
<title></title>
<head>
</head>
<body bgColor=#ffffff>

        <script language = javascript>
        a = new Array(10);
        a[0] = 10;       
        a[1] = 20;
        a[2] = 30;
        a[3] = 40;
        a[4] = 50;
        a[5] = 60;
        a[6] = 70;
        a[7] = 80;
        a[8] = 90;
        a[9] = 100;
        count = a.length;
        for(i = 0; i < count; i ++){
        document.write("<div style='position: absolute; background-color: #000000; clip: rect(0px 5px 1px 0px); width: 5; height: 1; top: 100px; left: "+a[i]+"px'></div>");
        }
        </script>

</body>
</html>


Vlad Drakula 03-06-2006 23:23 446106

slaine
интересно, но очень будет уж тормознуто наверное...
1) есть более эффективные способы!
2) такой пунктир не будет печататься на принтере...

mar 04-06-2006 01:04 446134

Цитата:

1) есть более эффективные способы!
давай их сюда :)

Vlad Drakula 04-06-2006 09:56 446192

mar
вот была такая тема: http://forum.oszone.net/thread-31833.html
там были ссылки на примеры того как можно хранить графику в JS...

PS
ох и долго же я ее искал...

mar 04-06-2006 12:46 446260

Vlad Drakula
все здорово, но там обе ссылки не работают :[

Vlad Drakula 04-06-2006 12:59 446270

фишка 29)
общий смысл такой:

PHP код:

<div style="width:*;height:1px;overflow:hidden"><img ****/></div

а вот как задавать картинки прямо в JavaScript я не помню, но знаю что такое можно делать!

strejiok 08-07-2006 13:04 459149

Вот читал читал всю эту тему.. и не понял :) идея конечно хорошая. Но ведь большая половина просто куски манов. брр.. да простят меня модераторы за оффтоп.

blank 12-07-2006 04:14 460486

Фишка 30
Простой генератор sitemap для бесплатных хостингов (статичных сайтов)
Конечно, простой sitemap можно и руками сделать. А если файлов около двухсот? На бесплатных хостингах и скрипты не запустишь. А поскольку у меня на домашнем компьютере структура сайта совпадает с сайтом на сервере, то с помощью очень простого генератора на Perl легко создаю sitemap.
Предусмотрел настройки для приоритетов и вероятной частоты изменения для групп файлов и папок.
Несколько раз отправлял sitemap – ошибок нет.
Подумал, может пригодится кому-то еще?
http://blankinew.narod.ru/sitemap-generator.html

mar 29-08-2006 11:55 477968

31
smarty - грабли и их обход
* Грабли нумбер раз - обнаружена некорректная работа при сравнении со строковой переменной. Лечится сравнением и по типу === (спасибо ману Руководство по Smarty. Глава 7. Встроенные функции {if},{elseif},{else} - я и не знала, что smarty так криво отрабатывает переменные, но зато так лихо знает === :) )

* Грабли нумбер 2 - обнаружена некорректная работа при вложенном цикле с section (может тут я что-то не то сделала, но в сети на офф-сайте были обнаружены жалобы на то же самое). Лечится:
- вложением foreach внутри section. (т.е. наружный цикл идет section, внутренние - foreach)
- "разворачиванием" и уходом от вложенных циклов (что не всегда возможно).

Prisoner 27-09-2006 15:35 490332

№32 (юбилейная :))
http://apachedev.ru/ - Довольно любопытный ресурс с углубленным изучением индейских племен. В курсе - анатомия, строение. Рекомендуется как опытным администраторам, так и разработчикам использующим индейскую рабочую силу. к примеру последняя на данный момент статья mod_macro выглядит на первый взгляд очень элегантным решением...

Prisoner 11-10-2006 17:24 496365

№33
Ввиду сочетания двух вещей: скорым выходом релиза IE7 и невозможностью работать со встраеваемым контентом как обычно следует обратить внимание на неплохое законченное решение. Лично я уже столкнулся с гневом посетителей вынуждаемых "мной" делать 3-4 клика по встраеваемому контенту (flash etc). Интересный факт - даже если объект, к примеру просто flash анимация с бегущими облаками в заголовке страницы, служит только целям наведения красоты, то посетители в 85% (что очень много) все равно его активируют, хотя он и не служит никаким управляющим элементом - просто такова психология: рамка привлекает внимание, а недвусмысленная надпись об активации инициирует действие.

Prisoner 12-10-2006 13:22 496735

№34
Лаконичный видео-урок по FireBug FireFox add-on (6.5Mb) выполненный в модной сейчас flash обертке.

Prisoner 14-10-2006 13:46 497609

№35
Online regular expressions evaluator, остается только перевести :)

vadimiron 19-10-2006 19:31 500192

№36
Я в последнее время очень много работаю с графикой, конвертацией картинок и тд.
Всем советую ImageMagick, и именно не классы или Bindings-ы, а обычный command line tool, так как все функции доступны только через саму ютилиту.

А также приходиться читать заголовки JPEG-ов, чтобы организовывать по ним поиск.
Типов Заголовков бывает очень много: все самые основные можно вытаскивать данными функциями.
Нам же хватает только IPTC, которые парсяться с помощью стандартной функции PHP: iptcparse() или, что более удобно, с помощью классов IPTC, которые написал я :)
Если перед кем встала подобная задача, обращайтесь ко мне, пришлю классы

Prisoner 20-10-2006 00:48 500306

vadimiron, дык за чем дело стало? Оформляй под любимую лицензию и сюда, только спасибо скажем.

vadimiron 24-10-2006 02:21 501843

Вложений: 1
По "многочислиенным" заявкам телезрителей кидаю сюда классы для "удобной" работы с IPTC заголовками JPEG-ов

Всего 4 класса:
IPTCField - поле с информацией в загаловке картинки
IPTCInfo - все поля одной картинки
IPTCReader - для чтения полей из файла
IPTCCodes - расшифровка кодов некоторых полей (можно это было хранить в базе, но решил сделать так, чтобы не зависить от наличия базы данных)

И ещё два класса, на которых другие построены:
Object - для IPTCField, IPTCInfo
ObjectList - for IPTCReader.
Эти оба класса вспомогательны, в моём проекте на работе они служат основой для почти всех других классов
Чтобы Обойтись без них, надо в IPTCField, IPTCInfo свои get и set методы написать, а в IPTCReader дописать член класса массив, который отдельные поля хранит и функцию add_object, которая добавляет новые поля в данный массив, и функции, чтобы эти поля потом поочереди отдавать.


IPTCField:
Состоит из типа поля(его номер) и информации, которая храниться в данном поле. Данный класс нужен только для внутренних целей (для IPTCReader-а)

IPTCCodes:
Расшифровка некоторых кодов, которые встречаются в полях. Коды стран, предполагаю, везде одинаковы, поэтому врядли будут меняться. А вот коды категорий и подкатегорий зависят часто от источника и должны всё время обновляться/дополняться. Например, у меня коды от Associated Press, картинки которых нам приходят.
Все три члена класса устроены как статичные массивы для прямого доступа без создания объекта данного класса.

IPTCReader:
Считывает данные из файла (loadFile) или уже из готового куска хедеров файла(loadData) и сохраняет эти данные во внутреннем массиве, который поэлементно передаётся объекту класса IPTCInfo.

IPTCInfo:
Центральный класс. Он хранит всю извлечённую информацию. В переменных класса сохраняються значения отдельных полей. Главная особенность: мне не нужны были все поля, так как из слишком много и почти никогда они все бывают заполнены. Для этого я придумал статичный массив $varsToFields, в котором содержиться какая переменная класса относиться к какому полю. Все поля, которые не имеют переменной, оседают в массиве $fieldsWithNoVars. То есть, если нам интересно какоето новое поле, нужно просто придумать переменную для этого поля, записать её в список переменных класса и добавить имя данной переменной в массив $varsToFields напротив соответствующего поля.
Класс имеет только одну важную функцию,а именно addField, которая как раз обрабатывает поле, полученное из IPTCReader-а. 4 приватных функции set_* нужны, чтобы исправлять некоторые ошибки, которые допускаються в Associated Press, а также чтобы хранить расшифровки кодов (хранящиеся в IPTCCodes) - для этого в классе есть спец переменные, например $categoryName или $countryName, которые не храняться в полях с информацией, но которые я сам беру из IPTCCodes.


Пример:
PHP код:

$reader=new IPTCReader();
$read=$reader->loadFile($pathToJpeg);

if(!
$read)
{
    die(
"No file found or No headers in file");
}


$info=new IPTCInfo();


while(
$field=$reader->next_object())
{
    
$info->addField($field);
}


echo 
"Date: ".$info->get("creationDate")."\n";
echo 
"Country: ".$info->get("countryName"); 


P.S.: Так как всё делалось в спешке, вся системе не идеальна с точки зрения дизайна.

vadimiron 23-12-2006 16:15 528314

Система сбора статистики посещений сайта: phpmyvisites
Поставили, юзаем, пока нравится

vadimiron 11-01-2007 20:19 534927

Данная проблема вообщето тривиальна и всем понятна, но её очень сложно найти:

У нас разные подсистемы общаются HTTP запросами, при чём тело сообщения свормировано особым образом: первая строчка статус, начиная со второй - что угодно, само содержание сообщения.
Так вот один раз я не мог долго понять, почему в одном модуле всё время происходит ошибка, а именно весь вывод смещается на одну строку.
После очень долгих мучений оказалось, что в одном классе, код которого подключается в данный модуль, после закрывающего тега ?> было ещё несколько переносов, то есть как бы обычный HTML вывод, и вот как раз этот вывод смещал всё остальное вниз.

Я понимаю, что проблема детская, но искал я её блин долго

vadimiron 26-01-2007 14:22 541725

Система классов для построения различных графиков, мне понравилось - очень много графиков. Советую. Написано на PHP
ссылка

vadimiron 26-03-2008 13:46 768061

Backbase Ajax Framework есть теперь также в бесплатной Community Edition
Судя по Демкам - весьма интересный Framework - много различных эелементов

Prisoner 01-03-2009 18:33 1052175

Народ, смысл топика - коллекция полезностей. Просьба общаться или по ЛС или создайте отдельный топик, плиз.

EGORR_TOO 22-06-2009 20:18 1149228

jQuery Табы одной строкой кода
Недавно пришла в голову одна идея.
С её помощью уписал реализацию табов (хотя это могло быть меню, ещё что-нибудь...) в одну строку кода.
Пример здесь http://egorr.site88.net/sample/
Код настолько прост, что не стану комментировать.
Будет интересно, - отвечу на вопросы.

proxy 12-07-2009 02:15 1165210

Скрипт быстрого цитирования (более-менее универсальный).
Перераобтанный вариант с этого форума.
Пример / Скачать

интересны пожелания и тесты...

EGORR_TOO 12-07-2009 10:26 1165306

Пробовал. По нажатии "Цитировать" вставляется текст, выбранный первый раз, какой бы новый текст не выбирался.
FF 3.0.11, Ubuntu 8.10

proxy 12-07-2009 20:39 1165755

Цитата:

Цитата EGORR_TOO
Пробовал. По нажатии "Цитировать" вставляется текст, выбранный первый раз, какой бы новый текст не выбирался. »

благодарю, как нить поставлю Ubuntu и отлажу.

Igor_I 13-07-2009 22:17 1166797

Freebsd 7.1 r3
FF 3.0.9
Konqueror 4.2.2
Работает. Правда есть различия в результате. Но есть один изъян, слово цитирвать сливается с текстом.

EGORR_TOO 21-07-2009 21:44 1174014

На днях просили меня сделать на одном сайте версию для печати. Хозяин сайта делал вордовский файл из страницы, заливал его, и этот изврат заменял версию для печати.
Проблем никаких особых нет... CSS, media=print, сделаем...
Однако правильно сказано древними программистами: "Чем в чужом коде копаться, легче свой написать!"
Это я понял взглянув на код страниц.
И моя природная лень продиктовала мне одно простое как зевок бегемота решение...
Итак...
Задача версии для печати: скрыть от принтера ненужное: меню, футер, хедлер, информеры, и прочуюю мутьку.
Я заметил, что нужный контент на этом сайте лежит в таблице с классом "content".
Всё просто: надо взять нужное и выкинуть ненужное.
Подключаем jquery.

Забираем все из таблицы
Код:

var TableContent  = $("table.content");
var TableHtmlContent = TableContent.html();

и переписываем этим содержимым таблицы все тело страницы
Код:

$("body").html(TableHtmlContent);
Поскольку все происходит на клиентской стороне, испортить что-либо не странице нам не грозит.
Чтобы восстановить вид страницы достаточно её перезагрузить. Для этого вместе с контентом таблицы вешаем кнопку рефреша страницы.
Код:

var InputHtml      = "<INPUT TYPE="\button\"  VALUE=\"Закрыть версию для печати\"  ONCLICK=\"ReloadButton()\"><br>";
И для блондинок, кнопку распечатки
var PrintButton = "<br><input type=\"button\" value=\"Печатать\" onclick=\"window.print();\"> "
Вот и все...
Ну, разумеется все эта нехитрая конструкция висит на кнопке
Код:

    var TableContent          = $("table.content");
    var ItsButton                = $("span#ItsButton");
    var InputHtml              = "<br><INPUT TYPE=\"button\" VALUE=\"\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438\"  ONCLICK=\"ReloadButton()\"><br>";
    var PrintButton            = "<br><input type=\"button\" value=\"\u0420\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c\" onclick=\"window.print();\"> "
 
    ItsButton.click(function(){
    var TableHtmlContent        = TableContent.html();
    $("body").html(TableHtmlContent);
    $("span#GetBack").html(InputHtml);
    $("span#Print").html(PrintButton);
    $("span#ItsButton").hide();
    });

Посмотреть как работает можно например здесь _http://www.tcyar.ru/south/an_beranda.php
В правом верхнем углу центральной колонки текстовая ссылка "Версия для печати", та что без иконки ворда...

EGORR_TOO 13-08-2009 15:39 1192813

Недавно ковырялся рисуя текстовые блоки для одной работы. Скучная, неинтересная работа.
Вот и подумал, - если я эту муку принял, так может плод моих трудов скорбных спасет какую-нибудь светлую голову от рутины для творческого полёта?
Посему, коллеги, забирайте если подойдет. _http://egorr.site88.net/text_block/
Верстка табличная, девять блоков.

gig666 19-12-2009 12:16 1299144

Добрый день ) хочу задать вопрос... у меня на сайте всего 4 пользователя, хотелось бы разместить побольше рекламы на сайт и набить побольше пользователей бесплатно, неподскажите где лучше всего размещать объявления ?

Knokswille 26-12-2009 02:04 1304490

Цитата:

Цитата gig666
Добрый день ) хочу задать вопрос... у меня на сайте всего 4 пользователя, хотелось бы разместить побольше рекламы на сайт и набить побольше пользователей бесплатно, неподскажите где лучше всего размещать объявления ? »

Наполняйте сайт качественным контентом, уделите внимание внешним ссылкам (желательно чтоб их было меньше).

Для начала добавьте сайт для индексации во все поисковые системы.

И ждите чуда ... )

P.S. Это из легального бесплатного.

DedAlex 27-12-2009 02:39 1305204

Цитата:

Цитата gig666
Добрый день ) хочу задать вопрос... у меня на сайте всего 4 пользователя, хотелось бы разместить побольше рекламы на сайт и набить побольше пользователей бесплатно, неподскажите где лучше всего размещать объявления ? »

Лучшее место для рекламы - самый низ страницы, только текст, никаких "левых" скриптов. Может тогда я рекламу и замечу. Нарушение любого из этих условий ведет к "кормлению" блокировщика новыми правилами.

Dozer 16-02-2010 14:21 1348551

Цитата:

Цитата Knokswille
Добрый день ) хочу задать вопрос... у меня на сайте всего 4 пользователя, хотелось бы разместить побольше рекламы на сайт и набить побольше пользователей бесплатно, неподскажите где лучше всего размещать объявления ? »

Пока аудитория сайта не будет раз в сто больше - лучше не размещать рекламы, так как доходов она все равно никаких не принесет. Можете разместить ссылки через сапу

ataris 28-08-2013 18:24 2209233

Здравствуйте, я так сказать делаю первые шаги в сайтостроении и хотел бы узнать
1. Каким текстовым редактором лучше пользоваться ( я думаю смысл тут ясен)
2. Каким браузером смотреть результаты своих трудов у себя на компе ?
3.Какой FTP-клиент лучше для сайтостроителя ?

P/S/ Может имеет смысл сделать тему типа Простые вопросы или Вопросы новичков ? Все же когда то начинали.

alb12 01-10-2013 06:54 2226532

В качестве обмена опытом могу посоветовать использовать для быстрой индексации новых статей Twitter. А для Google я применяю его родную аддурилку. И новые статьи оказываются в выдаче уже через 10-15 минут. Если кто-то знает более эффективный путь, подскажите.

c01nd01r 11-10-2013 13:31 2232643

Цитата:

Цитата ataris
1. Каким текстовым редактором лучше пользоваться ( я думаю смысл тут ясен)
2. Каким браузером смотреть результаты своих трудов у себя на компе ?
3.Какой FTP-клиент лучше для сайтостроителя ? »

1. Notepad++
2. Желательно с каждым браузерным движком - Opera 12, Chrome, Firefox. Все три одновременно. IE 8+.
3. FileZilla / WinSCP


Время: 09:17.

Время: 09:17.
© OSzone.net 2001-