Войти

Показать полную графическую версию : Делимся опытом


Страниц : [1] 2 3 4

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

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

Prisoner
09-03-2005, 15:09
Фишка №2 (народная)
Случайная выборка N элементов из БД.
Запрос такого вида:
SELECT
*
ORDER BY
rand()
LIMIT N
даст требуемый результат. При необходимости можно включать условия WHERE или убирать LIMIT. Cлучайность тут реализует ORDER BY rand().

Prisoner
10-03-2005, 15:04
"Фишка" №3
Иногда нужно выводить циферки в красивом виде. Примером может служить вывод колонки цен в таком виде: " 22 000". Тут поможет функция number_format (http://ru2.php.net/manual/en/function.number-format.php). Для примера, вызов будет таким: number_format($Var, 0, '', ' ');. По ссылке есть типс на счет неразрывного пробела - дело в том, что для разделителя тысяч используется только первый символ переданого функции сепаратора, а в " " их шесть :).

Prisoner
11-03-2005, 19:29
Типс №4
Долгое время пользовался FastTemplate. Попробовал TemplatePower и возрадовался. По мне так очень симпатичная штука. Почитать об этом шаблонизаторе можно тут (http://templatepower.codocad.com/).

Prisoner
12-03-2005, 13:27
Типс №5
PEAR (http://pear.php.net/) позводит вам использовать уже написанные функциональные модули. Правда для этих модулей (классы или просто функции, но чаще классы) необходима базовая система PEAR аля движок. У большинства хостеров эта базова система уже имеется, но если это не так, то ее нетрудно установить, воспользовавшись "установщиком" (прочесть об этом можно на сайте). По ссылке большой объем нетривиальных решений нетривиальных задач.

Prisoner
12-03-2005, 13:58
Фишка №6
Часто, если не всегда, требуется обеспечить админ-интерфейс для сайта. Причем самой распространенной проблемой является реализация WYSIWYG редактора текстового (и не только) контента страниц. Если пункты какого-либо каталога можно вдалбливать в БД через форму, то вот текст с картинками и форматированием будет крепким орешком. Тут, в большинстве ситуаций, поможет WYSIWYG редактор SPAW (http://www.solmetra.com/). Почему в большинстве случаев? Поддержка Gecko только анонсируется. Таким образом, если есть информация, что админить будут, используя только IE версии не младше 5.5, то SPAW - оптимальное решение. Кстати, кто-нибудь использует оный или аналоги? Про аналоги было бы интересно узнать мнения.
Про аналоги можно посмотреть на соответствующих офсайтах: FCKEditor (http://www.fckeditor.net/), Kafenio.Editor (http://editor.kafenio.org/) (на Java), pinEdit (http://www.pintexx-demo.de/pinEdit/index.html) (IE only)
Гигантский список (http://www.htmlarea.com/directory/WYSIWYG_Editors/index.html) такого рода приблуд.

Prisoner
13-03-2005, 11:00
Типс №7
Аналогичный PEAR проект - репозиторий классов php (http://www.phpclasses.org/). Большое количество (имхо, большее чем у PEAR) классов по различным категориям. Отличительной чертой является независимость от какого-то материнского класса. Однако некоторые классы с этого ресурса могут быть в зависимости друг от друга. Требуется регистрация при закачке пакетов даунлоадерами не встроенными в броузер. Есть рассылка о новых поступлениях, обновлениях и т.д.

archy
14-03-2005, 12:14
Prisoner
SELECT FOUND_ROWS()
чем это отличается от запроса select count()?

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

Prisoner
22-03-2005, 11:21
Интересность №8.
Google Code (http://code.google.com/) - сам о себе.

Prisoner
27-04-2005, 13:40
Фишка №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 рубит такой контент на корню. Он просто не выпускает броузерные заголовки о возможности принимать сжатый контент. Чтобы побороться за трафик у себя необходимо почитать тут (http://www.agnitum.com/support/outpostfaq.html#general22). Однако следует заметить, что все отзывы о включении этой фичи говорят о нормальной работе без каких-либо ограничений.

vadimiron
21-06-2005, 19:14
Фенечка №10.
Статья, по созданию mp3-player-а для сайта с помощью JavaScript (http://digitalmedia.oreilly.com/2005/02/23/mp3_embed.html)

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

Prisoner
23-06-2005, 08:05
Фишка №12.
Пособить в разработке регулярных выражений может такая программа как RegexBuddy (http://www.regexbuddy.com/). Эдакая "IDE" по регуляркам, здорово облегчает жизнь.

archy
25-06-2005, 19:20
Фишка №13
Отличная ссылка для вебдевелоперов
Web browser standards support (http://nanobox.chipx86.com/browser_support.php)

Prisoner
01-07-2005, 02:35
Фенька № 14.
Функция по выводу информации о переменной в удобоваримом виде с предоставлением информации о строке вызова этой функции (очень удобно при поиске места, когда этот самый вызов необходимо убрать).

mar
11-07-2005, 09:54
(пришлось тут поднять то, что уже как-то писала в форум (http://forum.oszone.net/showthread.php?t=31028). Решила запостить в это FAQ :))
Дано - форма с text/textarea
Задача:
- С одной стороны над не дать злым хакерам возможность вставлять длинное-длинное слово и портить вид таблицы,
- с другой - надо было не разбивать длинные слова.
Решение: Текст разбивается на слова и проверяется уже размер каждого(понятно, что 90 и 55 - это под размеры моей таблицы ):

/*
* вставляем разбиение длинного текста на слова
*/
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
Фенька № 16
Удаляю топик на форуме:
Сначала выбираю из mysql id сообщения:
$id = $print['a_id'];Потом перехожу к скрипту, который удаляет записи:
echo "<td width=133><a href=postdel.php?id=".$id.">delete</a></td>";И он всё делает:
mysql_query("delete from gb where a_id='$id'");

slaine
17-07-2005, 23:06
Фишка №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.




© OSzone.net 2001-2012