Показать сообщение отдельно

  #75  
Старый 04.05.2010, 12:16
MDxaker
Banned
Регистрация: 17.03.2009
Сообщений: 90
С нами: 9027459

Репутация: 29
По умолчанию



Сегодня я постараюсь расказать о том как сделать динамический индикатор выполнения задачи или просто progress bar!
Эта тема не претендует на звание статьи, но то что она девствительно нужна многим PHP программистам - это правда, потому прошу выделить ей отдельный топик.

Статья моя, и все вопросы касающиеся ее прошу задавать сдесь!

Я раскажу о том как сделать progress bar, который будет прослеживать любую задачу скрипта и динамически уведомлять юзера.
Постараюсь пошагово разьяснить все аспекты и помочь Вам в разборе скрипта.

А теперь о progress bar'e:
Цитата:
В некоторых случаях Вам может понадобится визуально представить на экране ситуацию связяную с выполнением скрипта.
В таком случае можно сделать вывод динамического индикатора выполнения задачи, что будет уведомлять пользователя о том, когда загрузится скрипт.

Существуют разные способы добится этого, с использованием лишь PHP, или с помощю JS, CSS, Ajax.
Тут я покажу несколько примеров что обьединяют PHP и CSS.
Начнем!


Progress bar - Легкая версия

Создадим простую, текстовую версию прогресс бара:

Выводим на экран сообщение что предупредит пользователя о загрузке скрипта
Цитата:
<?php
echo "Происходит загрузка скрипта";
ВЫ можете вписать свое сообщение, все на свой вкус..

Теперь реализуем цикл, который будет определять заданую задачу и выводить точку
Цитата:
while (true) {
// Ставим точку и чистим буфер, чтобы убедится, что результат будет выведен на экране
echo '.';
flush();

//Теперь спим 1 секунду и повторяем цикл
sleep(1);
}
?>
Если вы захотите использовать данный прогресс бар, Вам нужно будет заменить цикл while(true) на реальную проверку выполнения конкретной задачи.
Например существования файла или процес загрузки...
Вы можете реализовать нужный цикл с даным условием)

Progress bar - PHP + CSS версия

Создадим более сложную и более красивую версию:

Для начала создадим функцию, что будет создавать исходный вид полосы
Цитата:
<?php
function progressbar() {
// Создадим стиль CSS
echo "
<style>
#text {
position: absolute;
top: 100px;
left: 50%;
margin: 0px 0px 0px -150px;
font-size: 18px;
text-align: center;
width: 300px;
}

#barbox_a {
position: absolute;
top: 130px;
left: 50%;
margin: 0px 0px 0px -160px;
width: 304px;
height: 24px;
background-color: black;
}

.per {
position: absolute;
top: 130px;
left: 50%;
margin: 1px 0px 0px 160px;
font-size: 18px;
background-color: #ffffff;
}

.bar {
position: absolute;
top: 132px;
left: 50%;
width: 0px;
height: 20px;
margin: 0px 0px 0px -158px;
background-color: #0099ff;
}

.blank {
background-color: white;
width: 300px;
}

</style>
";
Теперь выведем начальный XHTML, что будет перезаписан позже
Цитата:
echo "
<div id='text'>Прелоадер</div>
<div id='barbox_a'></div>
<div class='bar blank'></div>
<div class='per'>0%</div>
";
Удостоверимся что результат выводится
Цитата:
flush();
}
Создадим функцию, которой передадим % в виде числа, а она просто будет генерировать правильный div
Цитата:
function update($percent) {
//Сначала обновляем переменную percent новым значением:
echo "<div class='per'>{$percent}%</div>\n";

//Теперь выводим полоску - bar и установим ее ширину в 3 раза больше.
echo "<div class='bar' style='width:",$percent * 3,"px'></div>\n";

//Опять чистим буфер
flush();
}
И закончим скрипт инициализацией функции progressbar() и имитацией деятельности (Обновляя последовательно результат)
Цитата:
progressbar();

//Имитируем деятельность. Команда usleep будет имитировать выполняемые строки кода
usleep(350000);
update(7);
usleep(1550000);
update(28);
usleep(10000000);
update(48);
usleep(3500000);
update(68);
usleep(30000);
update(71);
usleep(5000000);
update(74);
usleep(3500);
update(77);
usleep(350000);
update(100);

//Теперь все готово и вы можете выбрать вариант выводимого текста в финале
echo "мы загрузились...";

?>

Вот и все. Вы можете легко доделать скрипт под себя и свои сайты..

С уважением, MDxaker from Antichat!

Последний раз редактировалось MDxaker; 04.05.2010 в 12:22..
 
Ответить с цитированием