download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

PHP без javascript за нищо не става ???

Автор
Съобщение
anonymous
Вто, 25.12.12, 01:17
Здравейте днес исках да направя едно простички нещо което на друг език би се решил с няколко реда но в PHP ми отне един ден при което използвах 3 езика на програмиране PHP, javascript, HTML...

Задачката беше да визуализирам 10-тина снимки един след друг (слайдшоу но без никакви ефекти) просто снимките един след друг да се покажат.... Но тази задача както разбрах за PHP е доста трудна и най простото решение е това...

===============================================================
<img id="pic" src="" width=90% height=90%/>
<script>
var timerid;
var arr = Array('./image/a1.jpg','./image/a2.jpg','./image/a3.jpg','./image/a4.jpg','./image/a5.jpg','./image/a6.jpg','./image/a7.jpg','./image/a8.jpg','./image/a9.jpg','./image/a10.jpg'); // список всех картинок
var curpos = 0; // начальная картинка
document.getElementById('pic').src=arr[curpos]; // сразу показать первую картинку

timerid = setInterval(next,500); /* запускаем таймер */

function next() // функция будет вызываться при нажатии кнопки
{
  curpos++; // следующая картинка
  if (curpos>=arr.length) document.location.reload(true); // если вышли за пределы массива, то начинаем опять с первой
  document.getElementById('pic').src=arr[curpos]; // подставить адрес очередной картинки
}
</script>
===============================================================

Въпроса ми е аз ли нещо не съм разбрал или наистина толкова сложно се решава такова просто нещо ???

П.С.

Аз си го представях нещо от рода на

//Показване
echo "<img src='./image/a1.jpg' width=90% height=90%>";
//Изчистване (не знам как ??)

//Показване
echo "<img src='./image/a2.jpg' width=90% height=90%>";
//Изчистване (не знам как ??)

.............................................

Но по никакъв начин не можах да изчистя показаното от echo

редактиран от anonymous на 25.12.12 01:18
svilen73
Вто, 25.12.12, 09:58
Това не ти ли върши работа ? Ротация на банери с PHP
insecteater
Вто, 25.12.12, 10:39

PHP без javascript за нищо не става ??? - нормално, концепцията ти е тотално грешна

Да изчистиш показаното echo????? wtf?
Това, което се стремиш да направиш е все едно да напишеш писмо, да го сложиш в плик и да го изпратиш и след като го изпратиш, да се опитваш да промениш съдържанието му.
По принцип можеш да работиш с показаното echo в буфера и да го изтриеш, но само докато е при теб, а не е заминало към браузъра на клиента.
Казано накратко: PHP изобщо не е подходящо за целта ти. Самата смяна на каринки се извършва при клиента - т. е. използваш html и javascript (ако искаш да е в браузър) или flash филмче Чрез php можеш да си нагласиш нещата да са ти по -удобни да реечем по-удобно да задаваш кои точно картинки да се появяват. Но пак да повторя - PHP се изпълнява от страна на сървъра, а не от страна на клиента. В случая е грешно да се опитваш да го вкараш за тази цел. Единственото "истинско" слайдшоу което PHP може да ти спретне само по себе си е да вземе картинки, да ги обедини в един gif или swf файл и да го изплюе накрая.

С jquery според мен би било най-бързо и стилно (стига да си се занимавал с него).

anonymous
Вто, 25.12.12, 10:52
svilen73 трябва да използвам "refresh" за да се появяват но така ще се повтарят а на мен ми трябва един след друг да излязат.....

<?php
$bannernumber = 2; // колко са банерите
$banner = rand(1,$bannernumber); // генерира някаква произволна цифра

echo '<meta http-equiv="refresh" content="1; url=xxx.php">';

if ( $banner == "1" ) {
echo '<img src="http://www.download.bg/img/logos/dbg_prm.gif" width="270" height="60">';
}

if ( $banner == "2" ) {
echo '<img src="http://www.download.bg/img/logos/dbg.gif" width="270" height="60">';
}
?>

insecteater разбирам а аз мислех че по всяко време след показването на текст снимка... може да се промени..... Можеш ли да дадеш пример как от няколко снимки мога да направя gif анимация и да покажа (това го намерих).... Да използвах jquery но ме дразни че повтаря снимките 1 до 10 и те влизат в буфера и започва пак да ги повтаря а снимките са се променили....

редактиран от anonymous на 25.12.12 11:09
редактиран от anonymous на 25.12.12 11:23
insecteater
Вто, 25.12.12, 11:46
rotator.html

Какво имаш предвид с това, че снимките са се променили?

anonymous
Вто, 25.12.12, 12:14
Примерно снимките са

1.jpg (куче)
2.jpg (котка)
3.jpg (мишка)

Скрипта ги показва по ред но преди да свърши с показването аз вече съм ги сменил с други снимки но със същите имена.

1.jpg (пейзаж)
2.jpg (планина)
3.jpg (море)

Но скрипта пак продължава да показва

1.jpg (куче)
2.jpg (котка)
3.jpg (мишка)

без да се усеща че снимките са променени (предполагам защото браузъра вече ги е свалил и използва от буфера)

за това прилагам рефрешване (примерно както е в твоя скрипт)

if (CurrentImage >= $("#container img").length) CurrentImage = 0;

го заменям на

if (CurrentImage >= $("#container img").length) document.location.reload(true);

Едит:

Май намерих решение... Ганчо помагай с вмъкването :(

http://www.ajaymatharu.com/how-to-prevent-image-from-caching-in-javascript/

редактиран от anonymous на 25.12.12 12:46
anonymous
Вто, 25.12.12, 12:54
rotator.html май успях
anonymous
Сря, 26.12.12, 20:55
Весела Коледа,

Много си се задълбал :) Най- лесният вариант е един iframe и той да си има параметър за рефрешване(meta таг върши работа), като си подава и коя снимка е показал. На сървъра PHP то взема стойността на показаната в момента снимка и подава следващата, или първата, ако е достигната последната :) HTML+PHP и готово :)

anonymous
Сря, 26.12.12, 22:54
Здравеййй lotsofsex можеш ли да дадеш пример че аз до никъде не стигнах.....
редактиран от anonymous на 27.12.12 00:35
insecteater
Чет, 27.12.12, 13:12
Защо държиш да можеш да сменяш картинките докато потребителя е отворил страницата? Толкова дълго ли се очаква да седи страницата отворена, без да се зарежда наново? Какъв е проблема потребителя да гледа стари картинки за 4-5 минути докато не посети отново страницата?

Неслучайно хората са измислили кеширането. Според мен при всяко показване на картинка тя да се зарежда наново от сървъра е много неподходящ вариант. Не е ли по-добре просто да си именуваш картинките с различни имена на и НА СЪРВЪРА да се съхраняват с различни имена - ако искаш си долепяй timestamp-а там. По този начин браузъра сам ще се грижи за опресняването на картинките, след като зареди главния документ. Разбира се ако не гониш голяма посещаемост, можеш да правиш каквото си искаш, но при голямо натоварване, такива неоптимизирани варианти могат да ти изядат главата.

anonymous
Чет, 27.12.12, 20:50

RE: PHP без javascript за нищо не става ???

” Здравеййй lotsofsex можеш ли да дадеш пример че аз до никъде не стигнах..... „
Здравей,
Преди всичко обърни внимание на мнението на insecteater. Повярвай, не те е излъгал.

А ето и примера, който искаш:
два файла в една директория: index.html и frame.php както и няколко снимки в същата директория: 1.jpg, 2jpg и 3.jpg.

Разбира се, може да поставяш и организираш всичко както си искаш, само съблюдавай и пътя в кода да е правилен.
И така index.html:
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>slideshow</title>
</head>
 
<body>
    <p>Някакъв твой код</p>
    <iframe src="frame.php" width="330" height="250" scrolling="no" frameborder="0"></iframe>
    <p>Тука още и още код...</p>
</body>
</html>

Нищо особено тука, ако искаш може да е и index.php вместо html, никакви грижи. В него сме поставили
<iframe src="frame.php" width="330" height="250" scrolling="no" frameborder="0"></iframe>

Самия frame.php:
<?php
error_reporting(E_ALL ^E_NOTICE);
 
$picNumber = ((int) $_GET['id']) ? ((int) $_GET['id'] + 1) : '1';
$pic = array(1 => '1.jpg', '2.jpg', '3.jpg');
 
if ($picNumber > sizeof($pic))
	$picNumber = 1;
?>
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="5;URL='frame.php?id=<?php echo $picNumber; ?>&noparam=<?php echo time(); ?>'" />
</head>
 
<body>
	<img src="<?php echo $pic[$picNumber]; ?>" align="top" border="0" width="320" height="240" />
</body>
</html>

Не е кой знае какво. В meta тага казваме да се рефрешва на 5 секунди като подаваме и параметър id. Това id съдържа номера на снимката, която показваме в момента. Номер понеже снимките са ни заредени с масив, като сме прескочили елемент нула от него.
$pic = array(1 => '1.jpg', '2.jpg', '3.jpg');

Може да си добавяш, колкото си искаш снимки и не е задължително да са именовани с цифри, и да са винаги jpg формат.

И така индекса се зарежда вика frame.php. Там веднага проверяваме дали имаме id(номер на елемента от масива с картинките) и ако имаме, го увеличаваме с едно. Ако нямаме, значи или за сефте се зарежда страницата или някой се опитва да прави глупости и му даваме стойност единица. Тая стойност я присвояваме на $picNumber
$picNumber = ((int) $_GET['id']) ? ((int) $_GET['id'] + 1) : '1';

След което си инициализираме масива с картинките, както казахме - първия му елемент ще е единица array (1 => '..... След това правим една проверка дали сумата от номера на елемента, който сме получили чрез id и сме увеличили с единица е по- голям от елементите на масива. Ако е значи потребителя няма да види никаква снимка, а ще види онея грозни очертания за поява на снимка, която я няма. За да избегнем това задаваме на $picNumber отново единица. Тоест, върнахме се отначало на слайда.
if ($picNumber > sizeof($pic))
	$picNumber = 1;

Инициализирали сме всичко. Казваме през 5 секунди да се презарежда тая страница, в нашия случай се презарежда само frame.php, който пък е тикнат в iframe. Значи презарежда се само някаква част от страницата ни(index.html). Подаваме и номера на елемента от масива, който се визуализира като картинка по- нататъка:
<img src="<?php echo $pic[$picNumber]; ?>" align="top" border="0" width="320" height="240" />

Сега, има едно малко разминаване във width и height на картинката и iframe, като iframe е с 10 пиксела повече. Но това е за да не те занимавам и с CSS, който да махне едни излишни пиксели заемани при визуализацията на img.

Поздрави.

anonymous
Съб, 29.12.12, 14:15
Но Ганчо аз няма да го ползвам скрипта за тази цел за която си мислиш...
lotsofsex благодаря ти много работи идеално.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.