Красивый вывод списка таймзон, из Wordpress 2.9.1.
Установка зоны
ini_set('date.timezone', 'Asia/Yekaterinburg');
Вывод списка
echo '<select id="timezone_string" name="timezone_string">',
wp_timezone_choice(ini_get('date.timezone')),
'</select>';
Далее »
Комментариев нет
Разработка своей CMS идет довольно низкими темпами, в основном из-за нехватки времени. Полностью на файлах сделать не получилось, выбрал SQLite + PDO и кеширование каждого запроса в файл. Быстродействие на высоте, но возникает проблема очистки кеша. Очищать его по таймеру не лучшее решение, поэтому надо будет придумать как очищать кеш при изменении данных.
В качестве разметки для написания сообщений в блог выбрал Markdown Extra. Для комментариев его тоже охота использовать, но их надо будет либо сохранять в двух экземплярах (исходном и отпарсеном в html), либо обратно конвертировать из html в Markdown. Все это плохо влияет на быстродействие. Надо сделать для комментариев простую разметку (хватит и пяти тегов) на основе регекспов.
~~~
код
~~~
> цитата
***жирный курсив***
**жирный**
*курсив*
[текст](ссылка)
Сначала надо обработать тект функцией htmlspecialchars, потом заменять теги, в написанном выше порядке. Вложенные теги поддерживаються не будут.
Комментариев нет
Простенький скрипт для загрузки файлов на сервер. Может пригодится, когда у друзей возникают проблемы с заливкой файлов на обменниками, а еще оказывается они не умеют разбивать файл на части, для отправки его по почте.
Скрипт состоит из одного файлика, который нужно закинуть в папку, имеющую права на запись. Обычно хостеры ограничивают максимальный размер файла, передаваемого на сервер, восемью мегабайтами. Это исправляется настройкой .htaccess`a, в который надо добавить два параметра:
php_value post_max_size 32M
php_value upload_max_filesize 32M
Сам скрипт:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head profile="http://gmpg.org/xfn/11">
<style type="text/css">
#wrap {
width:400px;
margin:200px auto;
padding:40px 30px 30px 30px;
border:1px solid #ccc;
text-align:center;
color:#666;
}
</style>
</head>
<body>
<div id="wrap">
<?php function show_form()
{ ?>
<form id="form" enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Выберите файл: <input name="myfile" type="file"/>
<br />
Максимальный размер файла:
<b>
<?php echo ( (int) ini_get('post_max_size') < (int) ini_get('upload_max_filesize') ) ? (int) ini_get('post_max_size') : (int) ini_get('upload_max_filesize'); ?>
</b> мегабайт!<br />
<input type="submit" value="Загрузить"/>
</form>
</div>
</body>
</html>
<?php } ?>
<?php
if ($_SERVER['REQUEST_METHOD']=='POST')
{
upload();
}
else
{
show_form();
}
function upload()
{
if( empty($_FILES) )
show_err(0);
foreach ( $_FILES as $file )
{
// Если ошибок не было
if($file["error"] == 0)
{
if ( file_exists($file['name']) )
show_err(1);
// Получаем содержимое файла
//move_uploaded_file ( $myfile, dirname(__file__). DIRECTORY_SEPARATOR );
copy($file['tmp_name'],dirname(__FILE__). DIRECTORY_SEPARATOR . $file['name']);
echo '<h4>Файл <i>',$file['name'],'</i> успешно загружен.</h4>' ;
show_form();
}
}
}
function show_err($id)
{
$err[0] = 'ОШИБКА! Файл не был загружен.';
$err[1] = 'ОШИБКА! Этот файл уже загружен.';
echo '<h2>'.$err[$id].'</h2>';
show_form();
die();
}
?>
Один комментарий
SQLite3 на хостингах обычно встречается в связке с PDO. Это одно из главных преимуществ SQLite, потому что в случае нехватки быстродействия можно легко перейти на MySQL, всего лишь изменив настройки подключения к базе данных.
В процессе изучения PDO, я не обращал особого внимания на транзакции, как оказалоь зря. Они позволяют отменить группу SQL запросов, если один из них будет неудачен. Это основная задача транзакций. Их еще одним полезным свойством является ускорение выполнения нескольких запросов.
Далее »
Комментариев нет
Всемогущий гугл портит жизнь владельцам автономных OpenID серверов. Если кто-то хочет оставить комментарий в чьем-нибудь блоге на блогспоте у него появятся проблемы, точнее только одна - "Your OpenID credentials could not be verified".
К счастью решение этой проблемы есть. Нужно нажимать на кнопку "Preview" вместо "Post Comment" и комментарий будет отправлен! После ввода капчи)
В качестве собственного OpenID сервера я использую phpMyID. Настроить его несложно, в интернете много информации об этом.
На моем хостинге, с установленным suhosin, phpMyID работать отказался, но ему можно вправить мозги. В настройках есть опция 'allow_suhosin', меняем ее значение на TRUE и радуемся собственному OpenID!
Один комментарий
Популярность Яваскрипт фреймворков растет и уже многие начинаюшие разработчики начинают с изучения этих фреймворков, вместо того чтобы сначала выучить Яваскрипт. В результате можно найти сайты на которых размер самого скрипта - лишь десятая часть размера фреймворка, без которого во многих случаях можно было обойтись.
Примером использования чистого яваскрипта являются скрипты от Майкла Лейгебера (Michael Leigeber). Он разработал следующие скрипты:
TinySlider
TinyDropdown
TinySlideshow
TinyAccordion
TinyBox - модальное окно с плавным затемнением фона
TinyTable - сортировка таблицы
TinyScroller
tooltip - всплывающие подсказки
messages - проверка данных формы на правильноть и всплывающее сообщение у некорректно заполненных полей
Скачать и посмотреть демо этих скриптов можно здесь и здесь
Комментариев нет
Начитавшись книг по ООП решил написать свою CMS, надо же куда-то пристроить полученные знания:)
Различных CMS я препробовал очень много, но в них всегда чего-то не хватало. Больше всего понравились Frog CMS и Блоголет. Но Frog не подходит для блога, а Блоголет все никак не может родить третью версию.
Основное требование для нового движка - он должен быть модульным. Чтобы можно было и блог сделать, и многоуровневую навигацию в меню, да и магазин тоже. А если какой-то модуль не нужен, он просто отключается из админки.
Все это можно сделать с использованием какого-нибудь фреймворка, но для него потребуется MySQL, а я пока плохо в ней разбираюсь. К тому же моя цель не изучении php фреймворков. Хотя отдельные функции все-таки лучше брать из них.
Далее »
Один комментарий
Во всеми любимом jQuery имеется возможность использования цепочек вызовов функций, можно ,например, написать такую цепочку:
$('#id').add('p').addClass('class').html('text');
А как сделать цепочку для собственноручно написанных функций? Можно, конечно, подключить jQuery и добавить в него свои функции, но вместо слепого использования громоздкого фреймворка, я решил поподробней разобраться с цепочками.
Далее »
Комментариев нет
Получить значения CSS стилей элемента можно с помощью метода getComputedStyle или currentStyle для IE. А как объединить эти два метода в кроссбраузерную функцию? Вот что я нашел:
webew.ru
if (!window.getComputedStyle) {
window.getComputedStyle = function(el, pseudo) {
this.el = el;
this.getPropertyValue = function(prop) {
var re = /(\-([a-z]){1})/g;
if (prop == 'float') prop = 'styleFloat';
if (re.test(prop)) {
prop = prop.replace(re, function () {
return arguments[2].toUpperCase();
});
}
return el.currentStyle[prop] ? el.currentStyle[prop] : null;
}
return this;
}
}
window.onload = function() {
var cs = window.getComputedStyle(document.getElementById('linkId'), "");
var out = "";
out += "color:" + cs.getPropertyValue("color") + "\n";
out += "float:" + cs.getPropertyValue("float") + "\n";
out += "background-color:" + cs.getPropertyValue("background-color");
alert(out);
}
xpoint.ru
if (typeof document.defaultView == 'undefined')
document.defaultView = {};
if (typeof document.defaultView.getComputedStyle == 'undefined')
{
document.defaultView.getComputedStyle = function(element, pseudoElement)
{
return element.currentStyle;
}
}
javascriptkit.com
function getStyle(el, cssprop){
if (el.currentStyle) //IE
return el.currentStyle[cssprop]
else if (document.defaultView && document.defaultView.getComputedStyle) //Firefox
return document.defaultView.getComputedStyle(el, "")[cssprop]
else //try and get inline style
return el.style[cssprop]
}
Далее »
Один комментарий
Иногда нет возможности прописать запуск скрипта в <body onLoad=...> или в конце страницы. Приходится использовать событие window.onload, но оно произойдет только после полной загрузки страницы вместе с картинками и флешем. К счастью в нормальных браузерах есть DOMContentLoaded, решающее эту проблему.
Далее »
Комментарии (2)