Web-мастеру и не только
Полезные решения для Web-мастеров
Web-мастеру и не только - RSS-канал
Web-мастеру и не только - Карта сайта
Использование HTML-комментариев для хранения данных
16.10.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Как-то меня посетила мысль проверить, как определяются HTML-комментарии в DOM-структуре документа, и как можно получить доступ к их содержимому. Ведь по сути они являются полноправными составляющими документа. Напрямую, через ID, имя и другими подобными способами, естественно, сделать это не получится, т.к. тег комментария не имеет ничего подобного. Но сделать это все-таки удалось, привязавшись к соседнему тегу одного уровня с нужным комментарием. После этого элемент комментария со всеми потрохами можно получить через функцию JavaScript nextSibling или previousSibling, в зависимости от вашей ситуации. Это можно посмотреть, например, вот на таком фрагменте кода:Code (HTML) : Убрать нумерацию
- <div>
- <!--first comment--><div id="main_div">Main DIV</div><!--second comment-->
- </div>
- <script type="text/javascript">
- // Получить опорный элемент
- var el=document.getElementById('main_div');
- // Сообщение "first comment"
- alert(el.previousSibling.nodeValue);
- // Сообщение "second comment"
- alert(el.nextSibling.nodeValue);
- </script>
Code (HTML) : Убрать нумерацию
- <div id="overall">
- <a href="#">link</a>
- <!--first comment-->
- <div id="inner_div">
- inner div
- <!--second comment-->
- </div>
- plain text
- </div>
- <script type="text/javascript">
- var el=document.getElementById('overall');
- for (var i = 0; i < el.childNodes.length; i++) {
- if (el.childNodes[i]=='[object Comment]' ||
- el.childNodes[i]=='[object HTMLCommentElement]') {
- alert(el.childNodes[i].nodeValue);
- }
- }
- </script>
Читать статью целиком »
Просмотров: 5169 | Комментариев: 17
Проверка доступности функции PHP
23.09.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций PHP перед их вызовом. Реализация была такая же кривая, как и весь остальной код этих быдлохакеров, поэтому я переписал функцию проверки по-своему. Проверка выполняется тремя способами: анализом значения параметра disable_functions в файле php.ini, а также через функции PHP function_exists и is_callable. Использование всех трех способов проверки дает абсолютно точный результат.Code (PHP) : Убрать нумерацию
- //--------------------------------------------------------------------------
- // Функция проверки существования и доступности другой функции PHP
- //--------------------------------------------------------------------------
- // Параметры: $func - строка имени функции
- // На выходе: true - функция есть и доступна для вызова,
- // false - функция недоступна по какой-либо причине
- //--------------------------------------------------------------------------
- function is_function_enabled($func) {
- $func=strtolower(trim($func));
- if ($func=='') return false;
- // Получить список функций, отключенных в php.ini
- $disabled=explode(",",@ini_get("disable_functions"));
- if (empty($disabled)) {
- $disabled=array();
- }
- else {
- // Убрать пробелы и привести названия к нижнему регистру
- $disabled=array_map('trim',array_map('strtolower',$disabled));
- }
- // Проверить доступность функции разными способами
- return (function_exists($func) && is_callable($func) &&
- !in_array($func,$disabled)
- );
- }
Code (PHP) : Убрать нумерацию
- // Проверка доступности функции shell_exec
- if (is_function_enabled('shell_exec')) {
- echo shell_exec('ping yandex.ru');
- }
Просмотров: 7612 | Комментариев: 5
Стилизация checkbox с использованием CSS и JavaScript
11.08.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
В некоторых случаях при верстке макетов сайтов возникает необходимость нестандартной стилизации различных полей ввода HTML-форм. Например, дизайнер в фотошопе слепил красивый шаблон с вычурными графическими элементами, макет утвержден и заказчик слышать ничего не хочет про "стандартные элементы управления". Оформить поля ввода и всякие кнопочки еще не проблема, а вот с элементом checkbox уже сложнее. Мало того, что каждый браузер его отрисовывает по-своему, так еще визуально у него поменять ничего нельзя. Для решения проблемы можно воспользоваться следующим хитрым трюком: checkbox помещается внутрь контейнера, например div, после этого сам checkbox визуально скрывается путем установки ему 100% прозрачности, а у контейнера меняется стиль в зависимости от состояния "галочки" в checkbox.Code (HTML) : Убрать нумерацию
- <style type="text/css">
- /* Стиль для обертки отмеченного checkbox'а */
- div.boxChecked {
- background: url("checkbox.gif") no-repeat 0 3px;
- }
- /* Стиль для обертки неотмеченного checkbox'а */
- div.boxUnchecked {
- background: url("checkbox.gif") no-repeat 0 -18px;
- }
- /* Прозрачный стиль для checkbox'а */
- div.boxChecked input, div.boxUnchecked input {
- cursor: pointer;
- margin: 0px;
- padding: 0px;
- width: 16px;
- opacity: 0;
- -moz-opacity: 0;
- -khtml-opacity: 0;
- filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0);
- }
- </style>
Читать статью целиком »
Просмотров: 20598 | Комментариев: 14
Определение MIME-type файла по его расширению
03.07.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
MIME - Multipurpose Internet Mail Extension - стандарт для определения типа передаваемой информации и механизмов ее обработки. Он сообщает браузерам о том, как им надо обращаться с запрошенными файлами, имеющими то или иное расширение. Так, например, если сервер отдает браузеру в заголовках тип MIME "text/html" для файлов с расширениями htm, html и shtml, то браузер интерпретирует все файлы с этими расширениями как файлы HTML. Также очень желательно передавать корректный MIME-type при отдаче файлов скриптом в антилич-системах.Недавно я ковырялся в одной коммерческой CMS с закрытым кодом и нашел там одну полезную функцию с большим списком MIME-типов для различных расширений файлов (всего около 400). Реализация самой функции была сделана ужасно, поэтому я ее тут даже приводить не буду. Список я немного почистил и сохранил в удобном для работы виде. Функцию тоже переписал:
Code (PHP) : Убрать нумерацию
- //----------------------------------------------------------
- // Функция определения MIME-типа файла по его расширению
- //----------------------------------------------------------
- function get_mime_type($ext) {
- // Массив с MIME-типами
- global $mimetypes;
- // Расширение в нижний регистр
- $ext=trim(strtolower($ext));
- if ($ext!='' && isset($mimetypes[$ext])) {
- // Если есть такой MIME-тип, то вернуть его
- return $mimetypes[$ext];
- }
- else {
- // Иначе вернуть дефолтный MIME-тип
- return "application/force-download";
- }
- }
Читать статью целиком »
Просмотров: 15952 | Комментариев: 9
Динамическое добавление скриптов на web-страницу
16.06.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Современные динамические интерфейсы web-страниц подразумевают не только изменение содержимого различных тегов, но и динамическую подгрузку скриптов JavaScript с их последующим выполнением. Например, получение скриптов или данных для них через AJAX. Способы передачи данных я тут рассматривать не буду, а расскажу о том, как динамически добавить скрипт на сформированную web-страницу и затем выполнить его. Это можно сделать как минимум двумя способами. Первый способ - добавление скрипта средствами JavaScript с использованием стандартной функции eval. Она получает в качестве аргумента строку и, рассматривая ее содержимое как код JavaScript, пытается выполнить. Например:Code (JavaScript) : Убрать нумерацию
- <script type="text/javascript">
- eval('function do_my_job(txt) { alert(txt); }');
- do_my_job('ok');
- </script>
Code (JavaScript) : Убрать нумерацию
- <script type="text/javascript">
- function add_script(txt) {
- var newScript = document.createElement("script");
- newScript.type = "text/javascript";
- newScript.text = txt;
- document.getElementsByTagName('head')[0].appendChild(newScript);
- }
- </script>
Читать статью целиком »
Просмотров: 16879 | Комментариев: 15