Делимся опытом
Все люди индивидуальны. Каждый по своему глядит на мир и на работу в частности. У кого-то призвание может оказать помощь и не малую. Предлагаю делиться опытом. Возможно, модераторы этого раздела соберуться с силами и создадут FAQ на основе этой темы и всех имеющихся. Просьба советы и всяческие типсы каким-то образом выделять. Скажем нумерация аля "Фишка №(№предыдущей+1)" :). Ведем обсуждение и общаемся. Если не трудно, то указываем свое отношение и поправки - это тоже информация. В путь и да пребудет с нами Сила :).
|
Фишка №1.
Очень часто необходимо реализовать постраничный вывод данных из БД. Черт с ними, с данными, фишка не в этом. Обычно у нас есть номер страницы PN и число элементов на страницу EN. Тогда выборку можно организовать используя LIMIT (PN-1)*EN, EN в запросе. Тут проблема - как узнать сколько всего данных (на сколько их вообще страниц)? Отсылать второй запрос без LIMIT? Не... тут разработчики дают одну забавную возможность: отсылаем второй запрос (сразу после лимитированного) вида "SELECT FOUND_ROWS()" и обрабатываем его в штатном режиме - результат число строк из БД как будто нет LIMIT. Приемущество данного метода в том, что данные хоть и выбираются, но не передаются клиенту, что быстрее. |
Фишка №2 (народная)
Случайная выборка N элементов из БД. Запрос такого вида: Код:
SELECT |
"Фишка" №3
Иногда нужно выводить циферки в красивом виде. Примером может служить вывод колонки цен в таком виде: " 22 000". Тут поможет функция number_format. Для примера, вызов будет таким: number_format($Var, 0, '', ' ');. По ссылке есть типс на счет неразрывного пробела - дело в том, что для разделителя тысяч используется только первый символ переданого функции сепаратора, а в " " их шесть :). |
Типс №4
Долгое время пользовался FastTemplate. Попробовал TemplatePower и возрадовался. По мне так очень симпатичная штука. Почитать об этом шаблонизаторе можно тут. |
Типс №5
PEAR позводит вам использовать уже написанные функциональные модули. Правда для этих модулей (классы или просто функции, но чаще классы) необходима базовая система PEAR аля движок. У большинства хостеров эта базова система уже имеется, но если это не так, то ее нетрудно установить, воспользовавшись "установщиком" (прочесть об этом можно на сайте). По ссылке большой объем нетривиальных решений нетривиальных задач. |
Фишка №6
Часто, если не всегда, требуется обеспечить админ-интерфейс для сайта. Причем самой распространенной проблемой является реализация WYSIWYG редактора текстового (и не только) контента страниц. Если пункты какого-либо каталога можно вдалбливать в БД через форму, то вот текст с картинками и форматированием будет крепким орешком. Тут, в большинстве ситуаций, поможет WYSIWYG редактор SPAW. Почему в большинстве случаев? Поддержка Gecko только анонсируется. Таким образом, если есть информация, что админить будут, используя только IE версии не младше 5.5, то SPAW - оптимальное решение. Кстати, кто-нибудь использует оный или аналоги? Про аналоги было бы интересно узнать мнения. Про аналоги можно посмотреть на соответствующих офсайтах: FCKEditor, Kafenio.Editor (на Java), pinEdit (IE only) Гигантский список такого рода приблуд. |
Типс №7
Аналогичный PEAR проект - репозиторий классов php. Большое количество (имхо, большее чем у PEAR) классов по различным категориям. Отличительной чертой является независимость от какого-то материнского класса. Однако некоторые классы с этого ресурса могут быть в зависимости друг от друга. Требуется регистрация при закачке пакетов даунлоадерами не встроенными в броузер. Есть рассылка о новых поступлениях, обновлениях и т.д. |
Prisoner
Цитата:
|
В общем и целом - ничем. В нюансах: есть запросы когда невозможно получить сразу и данные и число строк в выборке, к тому же count() игнорирует LIMIT. А еще, если прочесть то, что пишут разработчики о кеше запросов, выяснится, что информация о числе строк берется из кеша.
Цитата:
|
Интересность №8.
Google Code - сам о себе. |
Фишка №9.
Сжатие кода страницы. Сразу оговоримся, что сжатие касается только текстового контента - кода разметки. Лучше это работает когда есть некий движок сайта который "вычисляет" код страницы и делает вывод клиенту одним echo|print. Тогда все вообще просто: Код:
if ( (strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) and (extension_loaded('zlib')) ) Важно: вывод любого контента, даже сжатого, должен быть после любых выводов заголовков. У меня сжатие контента происходит примерно в 5-7 раз. Объясню почему такой большой процент: отсутпы, люблю делать отступы и все структурировать. Однако тут бонус - доволен программист, доволен посетитель. Подводный камень: Outpost Firewall рубит такой контент на корню. Он просто не выпускает броузерные заголовки о возможности принимать сжатый контент. Чтобы побороться за трафик у себя необходимо почитать тут. Однако следует заметить, что все отзывы о включении этой фичи говорят о нормальной работе без каких-либо ограничений. |
|
Фенька №11.
Вызываем метод класса в preg_replace_callback: Код:
preg_replace_callback('/RegExp/', array(&$this, 'callback_method'), $string) |
Фишка №12.
Пособить в разработке регулярных выражений может такая программа как RegexBuddy. Эдакая "IDE" по регуляркам, здорово облегчает жизнь. |
|
Вложений: 1
Фенька № 14.
Функция по выводу информации о переменной в удобоваримом виде с предоставлением информации о строке вызова этой функции (очень удобно при поиске места, когда этот самый вызов необходимо убрать). |
(пришлось тут поднять то, что уже как-то писала в форум. Решила запостить в это FAQ :))
Дано - форма с text/textarea Задача: - С одной стороны над не дать злым хакерам возможность вставлять длинное-длинное слово и портить вид таблицы, - с другой - надо было не разбивать длинные слова. Решение: Текст разбивается на слова и проверяется уже размер каждого(понятно, что 90 и 55 - это под размеры моей таблицы ): PHP код:
|
Фенька № 16
Удаляю топик на форуме: Сначала выбираю из mysql id сообщения: PHP код:
PHP код:
PHP код:
|
Фишка №17
JavaScript проверка правильности введенных в форму числовых данных. Код:
<html> Код:
function isNumber(elem) { |
Полезность №18.
Часто необходимо вычислить дату через "сколько-то там чего-то". Ну к примеру не терпится узнать, что за дата будет через 13 дней или 13 недель. Чаще необходимо решение задача вывода дня недели через Х дней. В любом случае поможет связка date и strtotime. Примеры из официальной доки по strtotime: Цитата:
Код:
echo 'Завтра: '.date('D, j M Y', strtotime("+1 day")).'<br>'; |
Фенька №19
Порой необходимо сортировать многомерные массивы. Код:
array(8) { Цитата:
$arFields = array('field1', 'field2', 'field3'); тогда сортировка вышеприведенного массива выглядит примерно так: Код:
if ($up === true) |
Плюшка №20.
Интересная картинка - шпоргалка по css (97 kb). |
Вложений: 3
Полезность №21 (очко!)
Вернусь к вопросу о дебажном выводе. Со временем мне стало не хватать "мощности" функции и я решил ее расширить: 1) Блок с выводом можно свернуть/развернуть 2) Блок можно закрыть 3) Можно управлять выводом заголовка с помощью параметра функции (ниже) для вывода сообщений Подробнее: Пп. (1) и (2) реализуется путем разового вывода куска JS-кода двух функций: сворачивания/разворачивания блока и его скрытия. Т.о. вызовов функции может быть несколько, но вывод JS будет произведен только однажды. П. (3) полезен в ситуации когда хочется узнать что возвращает функция с разными параметрами: к примеру есть некий параметр $param который однозначно определяет работу функции (де юре), передаем его в функцию дебажного вывода вместе с самим результатом функции (тот, который return'им) и видим результат работы проверяемой функции (де факто). Синтаксис: void var_dumpf (mixed $var [, array $options]) Выводит содержимое переменной $var переданной по значению с заданными опциями $options. $options - массив со следующими допустимыми ключами:
PHP код:
|
Вложений: 1
Предлагаю вашему вниманию самописный класс-компонент селектора.
Все наверное хоть раз в жизни сталкивались с таким элементом управления как два мультиселекта с рядом кнопок между ними для перемещения элементов из одного в другой. Лично мне понадобилась такая приблуда при кодинге админчасти одного из проектов для выбора вариантов из некоторого множества существующих. Всегдашнее желание сделать все «по уму» оформилось в конечном счете в класс работа с которым чрезвычайна проста: создать экземпляр класса, выбрать подходящий метод генерации «компонента» и передать ему нужные данные. Итак, класс selector: методы:
Почему код по частям: дизайн всегда разный, кто-то захочет сделать «компонент» не горизонтальным, а вертикальным, кто-то вообще разбросать по всей странице. Создаем новый селектор и по частям выводим куда надо. JavaScript-код будет выводиться один раз на страницу, но если необходимо получить его еще раз, для этого есть в методах сборки параметр bool $forceJS. Когда нет необходимости в изощренном виде «компонента» просто выводим содержимое по ключу 'full' (вид близкий к обычному виду windows контрола). В архиве класс + файл примера в котором после отправки формы выводится содержимое массивов выбранных элементов и остаток доступных для выбора (внимание: после отправки формы данные в «компоненте» неактуальные из-за отсутствия перезаписи данных относительно массива $_POST) |
Фишка номер 23:
Когда в php.ini стоит register_globals off, но всё же есть желание использовать переменные по прямому их имени,а не по например $_GET["var_name"], то можно воспользоваться функцией import_request_variables("x"); , причём х здесь это любое сочетание из g,p,c. Как нисложно догадаться каждая из букв-это начальная буква трёх методов передачи данных в скрипт: GET, POST, COOKIE |
нумбер 24
проверка на корректность ввода даты ($our_data): PHP код:
Цитата:
|
N25 (юбилей :))
на самом деле, скорей напоминание - дебажное измерение скорости работы скрипта: PHP код:
|
N26
Графический редактор конфиг файла сервера Apache: здесь |
Там же, кстати, еще такая тулза как Apache Commander. Тоже гарный инструмент.
|
27
Простая идея, но очень хорошо работает для фотогаллереи (откуда и взята) Фото лебедя можно просмотреть на разном фоне: Код:
<head> |
28
Простая идея, пунктирная линия! А, то стиль не вовсех браузерах правильно показывает. Код:
<html> |
slaine
интересно, но очень будет уж тормознуто наверное... 1) есть более эффективные способы! 2) такой пунктир не будет печататься на принтере... |
Цитата:
|
mar
вот была такая тема: http://forum.oszone.net/thread-31833.html там были ссылки на примеры того как можно хранить графику в JS... PS ох и долго же я ее искал... |
Vlad Drakula
все здорово, но там обе ссылки не работают :[ |
фишка 29)
общий смысл такой: PHP код:
|
Вот читал читал всю эту тему.. и не понял :) идея конечно хорошая. Но ведь большая половина просто куски манов. брр.. да простят меня модераторы за оффтоп.
|
Фишка 30
Простой генератор sitemap для бесплатных хостингов (статичных сайтов) Конечно, простой sitemap можно и руками сделать. А если файлов около двухсот? На бесплатных хостингах и скрипты не запустишь. А поскольку у меня на домашнем компьютере структура сайта совпадает с сайтом на сервере, то с помощью очень простого генератора на Perl легко создаю sitemap. Предусмотрел настройки для приоритетов и вероятной частоты изменения для групп файлов и папок. Несколько раз отправлял sitemap – ошибок нет. Подумал, может пригодится кому-то еще? http://blankinew.narod.ru/sitemap-generator.html |
31
smarty - грабли и их обход * Грабли нумбер раз - обнаружена некорректная работа при сравнении со строковой переменной. Лечится сравнением и по типу === (спасибо ману Руководство по Smarty. Глава 7. Встроенные функции {if},{elseif},{else} - я и не знала, что smarty так криво отрабатывает переменные, но зато так лихо знает === :) ) * Грабли нумбер 2 - обнаружена некорректная работа при вложенном цикле с section (может тут я что-то не то сделала, но в сети на офф-сайте были обнаружены жалобы на то же самое). Лечится: - вложением foreach внутри section. (т.е. наружный цикл идет section, внутренние - foreach) - "разворачиванием" и уходом от вложенных циклов (что не всегда возможно). |
№32 (юбилейная :))
http://apachedev.ru/ - Довольно любопытный ресурс с углубленным изучением индейских племен. В курсе - анатомия, строение. Рекомендуется как опытным администраторам, так и разработчикам использующим индейскую рабочую силу. к примеру последняя на данный момент статья mod_macro выглядит на первый взгляд очень элегантным решением... |
№33
Ввиду сочетания двух вещей: скорым выходом релиза IE7 и невозможностью работать со встраеваемым контентом как обычно следует обратить внимание на неплохое законченное решение. Лично я уже столкнулся с гневом посетителей вынуждаемых "мной" делать 3-4 клика по встраеваемому контенту (flash etc). Интересный факт - даже если объект, к примеру просто flash анимация с бегущими облаками в заголовке страницы, служит только целям наведения красоты, то посетители в 85% (что очень много) все равно его активируют, хотя он и не служит никаким управляющим элементом - просто такова психология: рамка привлекает внимание, а недвусмысленная надпись об активации инициирует действие. |
№34
Лаконичный видео-урок по FireBug FireFox add-on (6.5Mb) выполненный в модной сейчас flash обертке. |
№35
Online regular expressions evaluator, остается только перевести :) |
№36
Я в последнее время очень много работаю с графикой, конвертацией картинок и тд. Всем советую ImageMagick, и именно не классы или Bindings-ы, а обычный command line tool, так как все функции доступны только через саму ютилиту. А также приходиться читать заголовки JPEG-ов, чтобы организовывать по ним поиск. Типов Заголовков бывает очень много: все самые основные можно вытаскивать данными функциями. Нам же хватает только IPTC, которые парсяться с помощью стандартной функции PHP: iptcparse() или, что более удобно, с помощью классов IPTC, которые написал я :) Если перед кем встала подобная задача, обращайтесь ко мне, пришлю классы |
vadimiron, дык за чем дело стало? Оформляй под любимую лицензию и сюда, только спасибо скажем.
|
Вложений: 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 код:
P.S.: Так как всё делалось в спешке, вся системе не идеальна с точки зрения дизайна. |
Система сбора статистики посещений сайта: phpmyvisites
Поставили, юзаем, пока нравится |
Данная проблема вообщето тривиальна и всем понятна, но её очень сложно найти:
У нас разные подсистемы общаются HTTP запросами, при чём тело сообщения свормировано особым образом: первая строчка статус, начиная со второй - что угодно, само содержание сообщения. Так вот один раз я не мог долго понять, почему в одном модуле всё время происходит ошибка, а именно весь вывод смещается на одну строку. После очень долгих мучений оказалось, что в одном классе, код которого подключается в данный модуль, после закрывающего тега ?> было ещё несколько переносов, то есть как бы обычный HTML вывод, и вот как раз этот вывод смещал всё остальное вниз. Я понимаю, что проблема детская, но искал я её блин долго |
Система классов для построения различных графиков, мне понравилось - очень много графиков. Советую. Написано на PHP
ссылка |
Backbase Ajax Framework есть теперь также в бесплатной Community Edition
Судя по Демкам - весьма интересный Framework - много различных эелементов |
Народ, смысл топика - коллекция полезностей. Просьба общаться или по ЛС или создайте отдельный топик, плиз.
|
jQuery Табы одной строкой кода
Недавно пришла в голову одна идея. С её помощью уписал реализацию табов (хотя это могло быть меню, ещё что-нибудь...) в одну строку кода. Пример здесь http://egorr.site88.net/sample/ Код настолько прост, что не стану комментировать. Будет интересно, - отвечу на вопросы. |
|
Пробовал. По нажатии "Цитировать" вставляется текст, выбранный первый раз, какой бы новый текст не выбирался.
FF 3.0.11, Ubuntu 8.10 |
Цитата:
|
Freebsd 7.1 r3
FF 3.0.9 Konqueror 4.2.2 Работает. Правда есть различия в результате. Но есть один изъян, слово цитирвать сливается с текстом. |
На днях просили меня сделать на одном сайте версию для печати. Хозяин сайта делал вордовский файл из страницы, заливал его, и этот изврат заменял версию для печати.
Проблем никаких особых нет... CSS, media=print, сделаем... Однако правильно сказано древними программистами: "Чем в чужом коде копаться, легче свой написать!" Это я понял взглянув на код страниц. И моя природная лень продиктовала мне одно простое как зевок бегемота решение... Итак... Задача версии для печати: скрыть от принтера ненужное: меню, футер, хедлер, информеры, и прочуюю мутьку. Я заметил, что нужный контент на этом сайте лежит в таблице с классом "content". Всё просто: надо взять нужное и выкинуть ненужное. Подключаем jquery. Забираем все из таблицы Код:
var TableContent = $("table.content"); Код:
$("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"); В правом верхнем углу центральной колонки текстовая ссылка "Версия для печати", та что без иконки ворда... |
Недавно ковырялся рисуя текстовые блоки для одной работы. Скучная, неинтересная работа.
Вот и подумал, - если я эту муку принял, так может плод моих трудов скорбных спасет какую-нибудь светлую голову от рутины для творческого полёта? Посему, коллеги, забирайте если подойдет. _http://egorr.site88.net/text_block/ Верстка табличная, девять блоков. |
Добрый день ) хочу задать вопрос... у меня на сайте всего 4 пользователя, хотелось бы разместить побольше рекламы на сайт и набить побольше пользователей бесплатно, неподскажите где лучше всего размещать объявления ?
|
Цитата:
Для начала добавьте сайт для индексации во все поисковые системы. И ждите чуда ... ) P.S. Это из легального бесплатного. |
Цитата:
|
Цитата:
|
Здравствуйте, я так сказать делаю первые шаги в сайтостроении и хотел бы узнать
1. Каким текстовым редактором лучше пользоваться ( я думаю смысл тут ясен) 2. Каким браузером смотреть результаты своих трудов у себя на компе ? 3.Какой FTP-клиент лучше для сайтостроителя ? P/S/ Может имеет смысл сделать тему типа Простые вопросы или Вопросы новичков ? Все же когда то начинали. |
В качестве обмена опытом могу посоветовать использовать для быстрой индексации новых статей Twitter. А для Google я применяю его родную аддурилку. И новые статьи оказываются в выдаче уже через 10-15 минут. Если кто-то знает более эффективный путь, подскажите.
|
Цитата:
2. Желательно с каждым браузерным движком - Opera 12, Chrome, Firefox. Все три одновременно. IE 8+. 3. FileZilla / WinSCP |
Время: 08:23. |
Время: 08:23.
© OSzone.net 2001-