UploadButton или загрузка файла по нажатию

Однажды понадобился мне плагин для загрузки файла, перерыл интернет, но так и не нашел то что мне надо.
После долгого изучения найденных плагинов написал свой.

(function ($) {
    function log(msg) {
        if (console && console.log) {
            console.log("upload button: " + msg);
        }
    }

    $.fn.uploadButton = function (settings) {
        var config = $.extend({
            url: "index.php",
            maxFileSize : 2097152,
            dataType: "html",
            name: "uploadfile",
            change: $.noop,
            success: $.noop
        }, settings);
        var $button, $input, $wrap, $form;

        function init(el) {
            $button = $(el);
            $button.button()
            .bind('mouseenter', function () {
                $wrap.css("visibility", "visible");
            });
            $input = $("<input />", {
                    type : "file",
                    name : config.name,
                    autocomplete : "off",
                    css : {
                        fontSize : '600px',
                        position : "absolute",
                        right : 0,
                        margin : 0,
                        padding : 0
                    }
            }).bind('change', function () {
                    var val = $(this).val().replace(/.*(\/|\\)/, "");
                    var ext = val.toLowerCase();
                    ext = ext.split(".");
                    ext = ext[ext.length-1];
                    if(config.change(val, ext)){
                        $form.ajaxSubmit({
                            dataType: config.dataType,
                            success: config.success
                        });
                    };
            }).appendTo(
                $form = $("<form />", {
                    action : config.url,
                    method : "post",
                    enctype : "multipart/form-data"
                }).appendTo(
                    $wrap = $('<div />', {
                        css : {
                            position : "absolute",
                            visibility : "hidden",
                            overflow : "hidden",
                            zIndex : 100000,
                            opacity : 0,
                            left : 0,
                            top : 0,
                            width : $button.get(0).offsetWidth,
                            height : $button.get(0).offsetHeight,
                            margin : 0,
                            padding : 0,
                            direction : "ltr"
                        }
                    }).bind('mouseout', function () {
                        $wrap.css("visibility", "hidden");
                    })
                    .appendTo($button.get(0))
                )
            );
            $("<input />", {
                name : "MAX_FILE_SIZE",
                value : config.maxFileSize,
                type: "hidden"
            }).appendTo($form);
        }

        this.each(function () {
            try {
                init(this);
            } catch (e) {
                log(e);
            }
        });
        return this;
    };

}(jQuery));

Плагин использует jQueryUI и jquery.form.
Вызвать его очень просто:

<span id="upl">Upload</span>
<script type="text/javascript">
jQuery(function() {
    $("#upl").uploadButton({
        url: "index.php",
        maxFileSize: 2097152,
        dataType: "html",
        name: "uploadfile",
        success: function(msg) {
            alert(msg);
        },
        change: function(msg) {
            alert(msg);
            return true;
        }
    });
});
</script>

Пояснение к опциям:
url — то же что и action у форм
maxFileSize — скрытое поле MAX_FILE_SIZE
dataType — Тип возвращаемого ответа
name — Название элемента input
success — Функция обработки ответа
change — Функция срабатывающая при выборе файла. На входе содержит имя файла. Чтобы прервать отправку нужно вернуть false
Демонстрация

Рассылка

Как-то мне пришлось сделать рассылку всем кто учился в Павлодарском государственном университете. Мне нужно было это для того чтобы выпускники поздравили с 50-летним юбилеем ПГУ

Что же я сделал для этого?

Мне понадобилось собрать список емайлов всех кто учился в ПГУ. Как же это сделать? Первое что пришло в голову это распарсить социальную сеть «Мой Мир».

Привожу код парсера, который у меня вышел

<?php
error_reporting(0);
set_time_limit(0);

$page = (int)file_get_contents('page');
$mails = array();
foreach  (file('mails') as $g) {
    $mails[] = trim($g);
}
for ($i = $page;  $i <= 844; $i++) {
    file_put_contents('page', $i);
    print 'page ' . $i . "\n";
    flush();
    $c =  file_get_contents('http://my.mail.ru/my/classmates?type_id=4&institute_id=263054&page='  . $i);
    preg_match_all('#http://www\.mail\.ru/agent\?message&to=([a-z0-9_\-\.]+@[a-z]+.ru)#si',  $c, $matches, PREG_SET_ORDER);
    foreach ($matches as $n => $m) {
        if (in_array($m[1], $mails)) continue;
        print '  ' .  $m[1] . "\n";
        flush();
        $mails[] = $m[1];
        file_put_contents('mails', $m[1] . "\n", FILE_APPEND);
    }
}

?>

После парсинга количество емайлов отличалось от реального на 300. Сначала подумал что это моя ошибка. Оказалось это сам майл.ру глючный. Эти емайлы не попали в мой список потому, что в конце некоторых страниц отсутствовал один.(например http://my.mail.ru/my/classmates?type_id=4&institute_id=263054&page=3)

Ну я не расстроился 16 тыс емайлов вполне хватило)
Приступим к рассылке писем:

<?php
error_reporting(0);
set_time_limit(0);

$page = (int)file_get_contents('page');
$mails = array();
foreach (file('mails') as $g) {
    $mails[] = trim($g);
}
foreach($mails AS $m) {
    emailSend($m, 'ПГУ им.С.Торайгырова 50 лет!', 'Событие: ПГУ им.С.Торайгырова 50 лет!
Поздравьте свой университет с юбилеем!
ПГУ будет рад получить от Вас поздравления!
http://psu.kz/index.php?option=com_compliment&act=view

Не забудьте передать ссылку своим друзьям!!! ОБЯЗАТЕЛЬНО
');
    sleep(1);
}

function emailSend($address, $subj, $body)
{
    $address = strtolower($address);
    $from = '[email protected]';
    $from_name = 'ПГУ им.С.Торайгырова';

    $body = "$body\n\n--\nПожалуйста не отвечайте на это письмо. Оно было сгенерировано исключительно с целью проинформировать Вас.";
    // =?кодировка?способ кодирования?закодированный текст?=
    $from_name = base64_encode($from_name);
    $subj = base64_encode($subj);
    $subj = "=?UTF-8?B?$subj?=";
    $body = base64_encode($body);

    $headers = "From: =?UTF-8?B?$from_name?= <$from>\r\n"
     . "Return-path: <$from>\r\n"
     . "Content-Type: text/plain; charset=UTF-8\r\n"
     . "Content-Transfer-Encoding: base64";

    mail($address, $subj, $body, $headers);
}

?>

Я на всякий случай поставил задержку в 1 сек между рассылками писем. На рассылку ушло где-то полдня. В течении рассылки поздравило около 20 человек!
Делайте выводы.

Желтая кнопка RSS.

Сразу скажу о значении большой желтой кнопки справа сверху моего блога – это подписка на RSS. Если Вы после этого еще не подписались на ленту, то, наверное, Вы не знаете что такое RSS. Читайте дальше – я там все пишу подробно.

Зачем мне RSS?

Если Вам понравился какой-то сайт (блог lexas0ft.ru :) ) и Вы хотите следить за его обновлениями, то делать это можно тремя способами.

  • Запомнить доменное имя (lexas0ft.ru) и периодически заходить на сайт
  • Занести сайт в закладки и периодически заходить на него
  • Подписаться на RSS и узнавать об обновлениях, не заходя на сайт

С первыми двумя все понятно, а третий вариант – самый удобный.

Сейчас объясню. В Интернете можно найти много программ, которые называются агрегаторами rss-лент. Например: FeedDemon.

После установки программы к себе на компьютер, Вы можете добавлять туда неограниченное кол-во RSS-лент и следить за обновлениями неограниченного кол-ва сайтов. Для этого нужно просто запустить программу и она сама проверит, не появилось ли что-то новое на сайте.

Кроме того, большинство программ сами получают новые статьи и показывают Вам их в окне программы (заходить на сайт не нужно). Теперь о том, почему это все называется RSS.

Что такое RSS?

RSS – это аббревиатура от Really Simple Syndication, то есть «Действительно Простая Синдикация». RSS – это просто формат, в котором хранятся и передаются программам–агрегаторам данные. Формат основан на XML. Ну детали рассказывать – скучновато будет, поэтому кому надо – могут прочитать здесь подробности: http://ru.wikipedia.org/wiki/RSS.

Теперь переходим к практике.

Как подписаться на RSS?

Для подписки на RSS-ленту необходимо иметь две вещи – программу-агрегатор и адрес ленты.

В качестве программы можно использовать как отдельное windows-приложение (FeedDemon и др.), так и online-сервис (http://lenta.yandex.ru/help.xml) или google reader.

Адрес ленты можно узнать на сайте, на ленту которого хотите подписаться. Обычно на этот адрес указывают желтые кнопки или другие похожие значки с символикой RSS.

Мой адрес – http://feeds.feedburner.com/LEXASOFT.

Так что пользуйтесь RSS – это очень экономит время :)

Регистрация блога в Technorati.

BDZVF8NM45NY! Добавил вчера свой «LEXASOFT — Записки кодера» в жирный буржуйский каталог блогов Technorati, а на мыло пришло вот такое письмо:

Thank you for submitting your blog claim on Technorati. Technorati will need to verify that you are an author of the site http://lexas0ft.ru/ by looking for a unique code. We have just assigned the claim token BDZVF8NM45NY to this claim. Please visit http://technorati.com/account/ for more details, including how to use the claim token.

Зашел в акк не нашел подробных инструкций, почитал FAQ на сайте и понял что они требуют чтобы в моем фиде был код BDZVF8NM45NY. Вот держите этот код BDZVF8NM45NY!

Флеш-головоломка 2

Нарыл еще головоломку, теперь отдыха не будет!

Флеш-головоломка

Флеш-головоломка с отличной графикой. В этой игре вам нужно найти способ выйти из комнаты. Внимательно осматривайте всю комнату, чтобы найти нужные предметы которые помогут вам выйти из комнаты. Кликните мышкой на тот участок комнаты, который хотите увеличить. Головоломка сложная, поэтому дам вам подсказку, не упускайте из виду углы, например, возле стула справа, в углу стыка плинтуса и обналички входной двери кое что спрятано и т.д. И обязательно загляните за чемодан.

Прочитать остальную часть записи »

С праздником!

Сегодня у меня двойной праздник: «День программиста» и моей дочьке 9 месяцев. Всех программистов поздравляю с праздником! Желаю удачи и успехов в работе, много денег и здоровья!

В Казахстане наш праздник является не официальным. Может тоже сделать сайт и собирать подписи, а наш глава государства сделает его официальным ;-)

— Даешь праздник программистам!

Жду комментов от соотечественников по этому поводу

Моя жена Оксана

Недавно узнал о конкурсе, который проводит «Я в блоге.ру» совместно с Webeffector.ru. Суть конкурса сводиться к тому, чтобы автор блога опубликовал фотографии своей девушки/жены/невесты . Жюри оценит и выберет победителей. Подробности на блоге организаторов.

Призовой фонд:

1 место – 1000$
2 место – 500$
3 место – 250$

Вот собственно и фотографии:

Моя жена Оксана

EmEditor + CodeBeautifier

Думаю каждый сталкивался с тем, что при прочтении чужого кода не возможно разобраться в нем.
Для начала нам нужен CB. Нам нужна только консольная утилита — файл phpCB.exe.
Далее нам нужно скопировать phpCB.exe в папку c:\windows\ или другую папку видную через переменную PATH.
Открыть макрос CodeBeautifier.jsee в EmEditor и код отформатирован по стандартам PEAR.
Теперь чтобы отформатировать, достаточно нажать F4.

Определение продажности ссылок

В последнее время вебмастеры пользуются биржами ссылок(например: SAPE).
Думаете, поисковикам так сложно отследить продажные сайты?
Вынужден Вас огорчить.
Прочитать остальную часть записи »

QR-ссылка
QR Code for LEXASOFT
Показуха

TwitterCounter for @LEXASOFT

Рейтинг блогов

Яндекс.Метрика