[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема в сессии для вывода банеров
ilma55
Добрый день! задача: вывод банеров в последовательно и без повторений

реализация на joomla!!!
я решил сделать так:
1, подсчитываю количество файлов в папке
2, получаю случайно число (это для того чтоб выводить случайный банер из папки)
3, вывожу первый банер и заношу это значение в сесию
4, при обновлении страницы или при переходе на новую страницу я сравниваю полученную переменную случайным образом и переменную из сесии
4,1 если они равны то выводить другой банер
4,2 если не равны, то выводить банер

PS может это не правильный подход, то подскажите пожалуйста правильный. я так понял тут не делают, а обсужждают!


<?php defined( '_JEXEC' ) or die( 'Go Away' ); ?>
<?php

$doroga = $params->get( 'doroga');

$sPath = './images/banners/'.$doroga.'/'; // указываем путь к папке
$dDir = opendir($sPath);
$aFileList=array();
while ($sFileName=readdir($dDir))
{
if ($sFileName!='.' && $sFileName!='..')
{
$aFileList[]=$sFileName;
}
}

closedir ($dDir);
$iNumFiles=count($aFileList); // колич-во файлов в папке

//foreach($aFileList as $value) { echo "$value <br />"; } // вывод списка имен файлов


$i = rand(1,$iNumFiles); // получаю случайное цисло при начале работы скрипта
$j = $i-1;
echo "eto JJJ: ".$j;
echo "<br />";
echo $aFileList[$j];
echo "<br />";

$session =JFactory::getSession(); // стартую сесиию
$temp = $session->get('temp_baner');
if (empty($temp))
{
$temp = $j;
$session->set( 'temp_baner', $temp );
}
else
{
$temp = $session->get('temp_baner');
echo 'eto iz sessii - '.$temp;
if (($temp == 0) or ($temp == -1)) $temp = 1;
if ($temp == 1) $temp = 0;
$session->set( 'temp_baner', $temp );
$j = $temp;
}

?>
<div class="niz banneritem">
<?php // вывод кода для отображения банера
$content = <<<EOD
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" border="0" width="200" height="100">
<param name="movie" value="
$sPath/$aFileList[$j]"/>
<param name="wmode" value="opaque"/>
<embed src="
$sPath/$aFileList[$j]" allowScriptAccess="sameDomain" loop="true" pluginspage="http://www.macromedia.com/go/get/flashplayer" type="application/x-shockwave-flash" width="200" height="100"></embed>
</object>

EOD;
?>
<div class="clr"></div>
</
div>


не понимаю, но не совсем работает... почему то сессия глючит...
я так понимаю, если я загнал переменную в сесию, то она там находится до конца. я ни где не удаляю эту переменную $temp
а на самом деле так происходит что она удаляется



Спустя 54 минуты, 38 секунд (26.10.2010 - 18:38) Stuff_f написал(а):
$SESSION_START();
Попробуй в конце flush() добавить
а вообще утебя в этом коде ощибка
хм как так получается,,??

$session =JFactory::getSession(); // стартую сесиию
$temp = $session->get('temp_baner'); <-----сдесь мы создаем сессию
if (empty($temp)) <---- проверяем сессию на значение
{
$temp = $j;
$session->set( 'temp_baner', $temp ); <--- считываем сессию или echo
}
else
{
$temp = $session->get('temp_baner'); Опять создаем сессию зачем,? она и будет пустая потому что ты создал ее только что
echo 'eto iz sessii - '.$temp; - и тут же ты ее пустую отоброжаешь
if (($temp == 0) or ($temp == -1)) $temp = 1;
if ($temp == 1) $temp = 0;
$session->set( 'temp_baner', $temp );
$j = $temp;
}

брет какой-то((( unsure.gif продумай по другому
flush();
сбрасывай сессии где работа с $this

Спустя 5 часов, 24 минуты, 49 секунд (27.10.2010 - 00:03) ilma55 написал(а):
$temp = $session->get('temp_baner');
кажись этой строкой я не создаю сессию, а получаю переменную из нее!!!

а вот SET устанавливает в сесиию переменную

Спустя 14 минут, 45 секунд (27.10.2010 - 00:17) Stuff_f написал(а):
Цитата (ilma55 @ 26.10.2010 - 21:03)
$temp = $session->get('temp_baner');
кажись этой строкой я не создаю сессию, а получаю переменную из нее!!!

а вот SET устанавливает в сесиию переменную

а userdata что делает??)))) а точнее вот эта что строка делает? $this->session->userdata('temp_baner'); - получение данных из сессии

если ее попробывать в условие вставить?

Спустя 10 часов, 5 минут, 23 секунды (27.10.2010 - 10:23) ilma55 написал(а):
$this->session->userdata('temp_baner');

я не знаю что она делает =(
я даже не в курсе о такой записи!

куда ее вставить? что она делает? проверить не могу сейчас... я на работе... это я дома пишу собственный модуль для joomla, чтоб выводились банера из папки и чтоб они не повторялись

Спустя 10 минут, 23 секунды (27.10.2010 - 10:33) Stuff_f написал(а):
Цитата (ilma55 @ 27.10.2010 - 07:23)
$this->session->userdata('temp_baner');

я не знаю что она делает =(
я даже не в курсе о такой записи!

куда ее вставить? что она делает? проверить не могу сейчас... я на работе... это я дома пишу собственный модуль для joomla, чтоб выводились банера из папки и чтоб они не повторялись

я понял так что ты делаешь типа галереии или превьюшек если да то вот уже есть готовый yoo-gallery-1.5.4 для joomla

if (empty($temp)) <---- проверяем сессию на значение 
{
$temp = $j;
print $session->set( 'temp_baner', $temp ); <--- считываем сессию или echo
}
else
{
$temp = $session->get('temp_baner'); Опять создаем сессию зачем,? она и будет пустая потому что ты создал ее только что
print 'eto iz sessii - '.$temp; - и тут же ты ее пустую отоброжаешь
if (($temp == 0) or ($temp == -1)) $temp = 1;
if ($temp == 1) $temp = 0;
$session->set( 'temp_baner', $temp );
$j = $temp;
}


Отпишишся


от Linker : Пилин, задрался править ваши посты, когда научимся по правилам оформлять свои посты, в частности когда научимся бользоваться bb-кодами?

Спустя 19 минут, 47 секунд (27.10.2010 - 10:53) ilma55 написал(а):
я делаю вывод банеров из папки, НО чтоб вывод банера не повторялся подряд
если выводился банер1 , то при перезагрузки страницы или при переходе на новую страницу нужно чтоб банер1 не выводился снова, а чтоб выводился банер2 или банер3

$session =JFactory::getSession(); // стартую сесиию
$temp = $session->get('temp_baner'); // присваиваю temp значение из сесии
if (empty($temp)) // если в сесии нет такой переменной (то есть temp пустая)
{
$temp = $j;
$session->set( 'temp_baner', $temp ); // то ми создаем в сесии переменную temp_baner
}
else // если же в сесиии есть переменная temp_baner
{
$temp = $session->get('temp_baner'); // то ми получаем ее значение
// и присваиваем новые значения, чтоб картинка не повторялась

if ($temp == 0) $temp = 1;
if ($temp == 1) $temp = 0;
$session->set( 'temp_baner', $temp ); // заносим значения в сессию
$j = $temp; // присваиваю J то значение новой картинки
}

Спустя 47 минут, 29 секунд (27.10.2010 - 11:40) Stuff_f написал(а):
тогда тебе нужно и чифры ьанеров с сессию писать и потом уже сравнивать на повторы

Спустя 3 минуты (27.10.2010 - 11:43) ilma55 написал(а):
проблема тут.
 if ($temp == 0)  $temp = 1;  

if ($temp == 1) $temp = 0;


уже буду копать в этом направлении.

глупо так получилось. проглючило меня.
еcли temp = 0 , то присваиваем 1. и сразу же смотрим еcли temp = 1 то присваиваем 0

конечно оно все по кругу =)

Спустя 24 минуты, 40 секунд (27.10.2010 - 12:08) Stuff_f написал(а):
Ну вот все решилось) а я все всегда усложняю

Спустя 51 секунда (27.10.2010 - 12:09) ilma55 написал(а):
спасибо! +1


_____________
Программист – это не деятельность, это иной образ жизни!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.