Баян конечно аццкий, но уж больно часто цитируется))
Дятел оборудован клювом. Клюв у дятла казенный. Он долбит. Если дятел не долбит, то он спит либо умер. Не долбить дятел не может. Потому что клюв всегда перевешивает. Когда дятел долбит, то в лесу раздается. Если громко, то, значит, дятел хороший. Если негромко - плохой, негодный дятел.
Дятел может с ветки на ветку так же ловко, как матрос с брамселя на бушприт. Умело брошенный дятел летит не менее 30-ти метров, втыкается по пояс и висит два часа. Мнение у дятлов всегда отрицательное. Сильный дятел может долбить за двоих. Гигантский дятел (в природе не встречающийся) может задолбать небольшого слона. Как и любое живое существо, дятел легко заводится от вставленной в зад рукоятки. Всякий дятел горюч. Синхронные дятлы водятся только в Австралии и работают парами, четверками и т.д. вплоть до полка.
День рождения дятлов - пятница. Переносимая дятлом доза - 250 децибел, либо 40 рентген, либо 150 вольт, либо 4 пинка. В литровой банке дятла утопить невозможно. Дятел-самец, выполненный из железобетона в масштабе 32:1, является наилучшим памятником тестю. 200 дятлов, склеенных встык в виде сплошной панели, представляют собой роскошное зрелище.
Выстраданное долгими часами на работе практическое пособие по установке
Очень удобно что много библиотек для php представлены в виде rpm на болванке, это немного упростило задачу. Итак вашему вниманию инструкция из 12 пунктов:
0. Изначально имеем установленный RHEL4 с предустановленным PHP 4.3.9 и MySQL 4.1
Сразу хочется оговориться насчет путей, они все спецефичны для RHEL 4 и на других системах и версиях могут быть другими.
1. Ставим Oracle Client
В моем случае это 11 версия, тк 10 не пошло. Благо клиент доступен в rpm. В общем ставим
oracle-instantclient-basic-11.1.0.1-1.i386.rpm
oracle-instantclient-devel-11.1.0.1-1.i386.rpm
Эти rpm доступны на официальном сайте оракла, но требуется регистрация для скачивания, но можно поискать на filesearch и может что найдется
Для меня нашлось на http://eduunix.ccut.edu.cn/index/database/Oracle%20Instant%20Client/ но качалось очень медленно.
Очень долго искал в сети творчество сабжевого исполнителя, поэтому не могу удержаться от того, чтоб не опубликовать откуда оно качабельно, итак:
Исполнитель: Господин Дадуда
Страна: Россия
Жанр: pop-dance, rave
Год выпуска: 1995, 1996, 1999
Формат: MP3
1. Господин Дадуда - Даду Внедреж (4:41)
2. Господин Дадуда - Галоп Сидроль (4:19)
3. Господин Дадуда - Люди Ау (4:08)
4. Господин Дадуда - Тоня и Федя (3:47)
5. Господин Дадуда - Апупея (4:38)
6. Господин Дадуда - У нас все будет (2:43)
7. Господин Дадуда - Свет ноября (4:32)
8. Господин Дадуда - Ду Ю Лав Ми Ту (4:14)
9. Господин Дадуда - Рашен Джингл Бэлз (3:33)
Встала проблема: надо на странице сделать select-box с множественным выбором, но такой чтоб глупый юзверь выбирал не удерживая ctrl, а ставил галочки по привычке, потому что объяснить ему как по-другому нереально...
Решений у проблемы как всегда два: простое, вместо селекта на страничке вывалить галки в div-е, но переделав дофига всего, и сложное, но интересное - javascript-ом схватить select и переделать его в див с галками, именно об этом этот пост.
Итак идея реализации: чтоб было не так все просто надо дать возможность переделать все стандартные селекты в продвинутые, точнее не все а только те, у которых специальный css-класс. И не просто в селекты с галаками, а если multiple, то с галками, если нет - то radio. Для этого идем по всем селектам в документе, смотрим на класс, если подходит, то создаем див с бродером как у селекта и такогоже размера, с полосами прокрутки. Внуть него надо запихать дивы с checkbox или radio со значениями и подписями к ним, взятыми из опций селекта. Чтоб была только вертикальная прокрутка запонять будем дивами, у которых overflow буджет none.
После почти всего дня мучений получился вот такой код:
function convertSelects()
{
var selects = document.getElementsByTagName('SELECT');}
for(var s=0; s<selects.length; s++){ select = selects[s]; if(select.className == 'advselect' && select.size) convertSelect(select); }
function convertSelect(obj)
{
var div = document.createElement("div");}
var id = obj.id;
div.style.backgroundColor = 'white';
div.style.color = 'black';
div.style.borderStyle = 'inset';
div.style.borderWidth = 2;
div.style.textAlign = 'left';
div.className = 'advselect';
div.style.overflow = 'auto';
div.style.width = obj.style.width;
div.style.height = obj.style.height;
var name = obj.name;
for(var i=0; i<obj.options.length; i++)
{
var opt = obj.options[i];}
if(obj.multiple) div.innerHTML += '<div style="overflow: hidden;" title="'+opt.text+'"><nobr><input type="checkbox" name="'+name+'[]" value="'+opt.value+'"'+(opt.selected?' checked':'')+'> ' + opt.text + '</nobr></div>';
else div.innerHTML += '<div style="overflow: hidden;" title="'+opt.text+'"><nobr><input type="radio" name="'+name+'" value="'+opt.value+'"'+(opt.selected?' checked':'')+'> ' + opt.text + '</nobr></div>';
obj.parentNode.insertBefore(div, obj);
obj.parentNode.removeChild(obj);
div.setAttribute('id', id);
Теперь как этим пользоваться (из комментария к оригинальному файлу advselect.js).
<body OnLoad="conversSelects();">
<select multiple name="rayon_id" id="rayon_id" style="width: 130px; height: 200px;" size=10 class=advselect>
<select multiple name="rayon_id" id="rayon_id" style="width: 130px; height: 200px;" size=10 class=advselect>
...
</select>
<script>convertSelect(document.getElementById('rayon_id'));</script>
В результате получам вот такие селект-боксы:
Замечания. Имена селектов передаются в создаваемый check и radio элементы, в случае checkbox имя получается вида name[]
т.е. массив, который более удобен для обработки на сервере. Аттрибут id
от селекта передается в id
созданного дива. Для корректного преобразования селекта к продвинутому, у оригинального должны быть прописаны стили ширины и высоты.
Кустомизация. Для изменения внешнего вида можно изменить в CSS класс div.advselect
(общий вид) и div.advselect div
(облик элементов списка).
И на последок еще одно важное замечание. Если форма в которой живет селект-бокс некорректно расположена в документе, например
<table ...>
<form ...>
<tr>
<td>
...
то свежесозданный продвинутый сеект работать не будет, точнее он будет появляться но не будет отдавать свои значения при сабмите формы. Причина этог мне видится в том, что форма занимает некорректное положение в DOM модели документа, и добаляемый элемент в силу непонятных причин вылазит за форму и не учавствует в ее сабмите.
Кому интересно пользуйтесь, но не забывайте плз давать ссылку на мой сайт