Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > сгенерировать уникальную переменную


Автор: supervladislav 30.11.2009, 10:08
у меня есть функция которая выводит фотографии для определённой новости))))
проблема в том как при переходе на другие фотографии в новости 
делать вот эту переменной уникальной imggo и  imggo1 для каждой  новости 
можно приписать ей $cfg2 ,но в таком случае как быть вот с этой строкой кода 
просто присвоить $imggo.$cfg2 
Код

if($imggo>0){$ss=$imggo*3;}else{$ss=$imggo1*3;}


подскажите пожалуйста выход из ситуации может есть другой выход 


Код

function vivodimg($namenews){
global $db,$myfotki,$mygood,$kab,$red,$imggo;

$namenews=mysql_escape_string($namenews);
$cfg2++;

if($imggo>0){$ss=$imggo*3;}else{$ss=$imggo1*3;}
$parse1=$db->sql_query("SELECT * from img WHERE name='$namenews' and gde='blog' limit $ss,3") or die(mysql_error());
$parse=$db->sql_query("SELECT * from img WHERE name='$namenews' and gde='blog'") or die(mysql_error());

echo '<table cellpadding="0" cellspacing="0" border="0" align="center">';

echo '<tr>';
$p=$mygood[0];



if($kab=='редактировать новость' or $kab=='редактировать'){

if($db->sql_numrows($parse)>3 or $cfg2>3){
if($imggo1>0){$cfg2-$imggo1;
}
echo '<td><a href="index.php?imggo1='.$cfg2.'&kab=редактировать новость&namenews='.$p.'&red='.$red.'"><<</a></td>';}
}else{
if($db->sql_numrows($parse)>3 or $cfg2>3){

echo '<td><a href="index.php?imggo1='.$cfg2.'&go=1&kab=0&namenews='.$p.'&red='.$red.'"><<</a></td>';}}
while($datt=$db->sql_fetchrow($parse1)){
if($db->sql_numrows($parse1)>0){
echo '<td align="center">';
echo '&nbsp;<img src="'.$datt['path'].'" width=100px" border="0">&nbsp;';


if($_SESSION["adm"]==3){
echo '<br><input type="checkbox" name="myfotki[]" value="'.$datt['id'].'">';}
echo '</td>';
}else{ echo '<td></td>';}}


if($kab=='редактировать' or $kab=='редактировать новость'){

if($imggo>0){$cfg2+$imggo;}
if($db->sql_numrows($parse)>3 or $cfg2>3){

echo '<td><a href="index.php?imggo='.$cfg2.'&kab=редактировать&red='.$red.'">>></a></td>';}
}else{

if($db->sql_numrows($parse)>3 or $cfg2>3){
echo '<td><a href="index.php?imggo='.$cfg2.'&go=1&kab=0&red='.$red.'">>></a></td>';}}
echo '</tr>';

echo '</table>';
}


Автор: MoLeX 30.11.2009, 11:39
 smile а если написать русским языком?

Автор: supervladislav 30.11.2009, 13:22
Когда появляются ссылки 
у них одна и таже переменная для перехода к след фотографиям ))когда нажимаешь на стрелку следующей фотографий происходит переход как 
в новости в которой относится данная группа фотографий так и всех других ))для ентого нужно генерить надо присоеденить в конец инд номер  ,что бы получилось
imggo1.$cfg2  ))))   
Код

echo 'imggo1'.$cfg2.'';


как проверять потом эту переменную ))))
что-то такое 
Код

if($imggo1.индиф)

как вот эту строчку переделать с условием добавления числа )))скажем $cfg 
Код

if($imggo>0){$ss=$imggo*3;}else{$ss=$imggo1*3;}


Код

echo '<td><a href="index.php?imggo1='.$cfg2.'&go=1&kab=0&namenews='.$p.'&red='.$red.'"><<</a></td>';

Автор: gta4kv 30.11.2009, 13:58
Вы, наверное, единственный человек на этом форуме, чей код с каждым разом становиться все хуже и хуже, а вопросы все не понятнее и не понятнее..

Автор: supervladislav 30.11.2009, 14:09
ну наверное 

Автор: Sanchezzz 1.12.2009, 09:13
Может сделать проше?

Вот держи в помощь унылой жабе=) готовенькое. уже давно использую.

Файл  imgresize.php
Код

/*
$src = путь
$width=73, ширина
$height=63 высота
$rgb цвет фона 
$quality качество 
*/
function img_resize($src, $width=73, $height=63, $rgb=0xFFFFFF, $quality=100){    
  $src = $_SERVER['DOCUMENT_ROOT'].$src; //Путь
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;

  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = "imagecreatefrom" . $format;
  if (!function_exists($icfunc)) return false;

  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];

  $ratio       = min($x_ratio, $y_ratio);
  $use_x_ratio = ($x_ratio == $ratio);

  $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);

  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, $rgb);
  imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, 
    $new_width, $new_height, $size[0], $size[1]);

  imagejpeg($idest /*, $dest, $quality*/);

  imagedestroy($isrc);
  imagedestroy($idest);
  //return true;
}


header("Content-type: image/jpeg");
if (isset($_GET['url']) and $_GET['url']!=''){
    $w = (isset($_GET['w']) && intval($_GET['w'])!='') ? $_GET['w'] : 73;
    $h = (isset($_GET['h']) && intval($_GET['h'])!='') ? $_GET['h'] : 63;
    $c = (isset($_GET['c']) && $_GET['c']!='') ? "0x".$_GET['c'] : 0xFFFFFF;
img_resize($_GET['url'],'', $w ,$h , $c);
}


В чем суть вы храните одну детальную картинку и выводите таким размером каким хотите 

<img src="/imgresize.php&url=/upload/kartinka.jpg&h=150&w=220&t=<?=time()?>">

Метод работает и для аякса...

Пример делаем показ картинки с подгрузкой из аякса... 

Файл ajax.php
Код

<?
    if($_POST['image']!=''){
            if(file_exists($_SERVER['DOCUMENT_ROOT'].$_POST['image']))
                $filepath = $_SERVER['DOCUMENT_ROOT'].$_POST['image'];

                //image_type_to_mime_type()
            //    print 'd';
                $size = getimagesize($filepath);
                $wr = 50; $hr = 50;
                if(!$size===true){print 'немогу загрузить изображение!!!';}else{

                if($size[0] >= 800) $wr= 800; else $wr = $size['0'];
                if($size[1] >= 640) $hr= 640; else $hr = $size['1'];

                //print "<img src=\"/resize_image.php?url=".$_POST['file']."&amp;w=$wr&amp;h=$hr\" width=\"$wr\" height=\"$hr\" />";
                print '<img  style="border:2px solid #525252;" src="'.$_POST['image'].'" width="'.$wr.'" height="'.$hr.'" />';
                    //include 'resize_image.php?url=';
                }
                //width
    }
?>



Css стиль сделать в  файл..

Код

#overlay {
  position: fixed;
  z-index:100000;
  top: 0px;
  left: 0px;
  height:100%;
  width:100%;
  display: none;

  text-align:center;

}

.overlayBG {
  background-color:#000000;
  filter:alpha(opacity=75);
  -moz-opacity: 0.75;
  opacity: 0.75;
}

* html #overlay { /* ie6 hack */
     position: absolute;
     height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
}

#imageconteiner {
display:none;
position:absolute;
position: fixed;
width:100%;
text-align:center;
z-index: 100001;
color:#000000;
display:none;
top:15%;
/*left:25%;*/
}
*html #imageconteiner { /* ie6 hack */
position: absolute;
/*margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');*/
}


HTML код: С JS под фреймворк jquery

Код

<body>
<div id="imageconteiner"></div>
<div id="overlay" class="overlayBG"></div>

<script type="text/javascript">
function endAnim(){
    $('div#imageconteiner').css('display','none').hide(300);
    $('div#overlay').css('display','none');
    $('div#imageconteiner').html('');
}

function startAnim(){
$('div#overlay').css('display','block');
$('div#imageconteiner').css('display','block').show(300);

}

function getImage(file){
$.post("\ajax.php", { image: file },
  function(data){
   $('div#imageconteiner').html(data);
   startAnim();
  }, "html");
}



$('div#overlay').bind('click', function(e){
//e = new Event(e);
endAnim();
//e.stop();
});

$('div#imageconteiner').bind('click', function(e){
//e = new Event(e);
endAnim();
//e.stop();
});
</script>


Это обезательно после боди вставлять.

Код

<div id="imageconteiner"></div>
<div id="overlay" class="overlayBG"></div>


JS код под mootools
Код


<script type="text/javascript">
var myTransition = new Fx.Transition(Fx.Transitions.Elastic, 3);
var fx = new Fx.Tween('imageconteiner', {
    property: 'opacity',
    transition: Fx.Transitions.Quad.easeOut,
    delay:1000, duration:1000,
    wait:false, link: 'chain' 
});


$('overlay').addEvent('click', function(e){
e = new Event(e);
endAnim();
e.stop();
});

function startAnim(){
var vv = $(document.body).getSize();
$('overlay').setStyle('display','block');
$('imageconteiner').setStyle('display','block');
fx.start(0,1);    
}

function endAnim(){
    $('imageconteiner').setStyle('display','none');
    $('overlay').setStyle('display','none');
}

function ajaxPrepare(body){
var param_str="";
    if(typeof(body) == "string"){
        param_str = body.replace(/^\?/, "");
    }else if(typeof(body) == "object"){
        for(var name in body){
            if (!body.hasOwnProperty(name)) continue;
            if (name != '')
                param_str += "&" + name + "=" + body[name];
        }
    }
return param_str;
}

function SendAjax(Parms,reqID){
$(document.body).getSize().y
    var dealogdata = new Request.HTML({
            method: 'post',
            url:'/ajax.php',
            evalScripts:true,
            data:ajaxPrepare(Parms),
            onRequest: function(){
            $(reqID).set('html', '');                
            },    
            onSuccess: function(a,b,c){
            $(reqID).set('html',c);
            },
            onFailure: function() {}   
            }).send();
}

function getImage(url){
SendAjax({image:url},'imageconteiner');
startAnim();
}
</script>


Может что то где то не так со стороны JS, firebug в помощь... Счасливо!

Автор: MoLeX 1.12.2009, 09:47
Sanchezzz, мне жалко сервер который при каждом обращении создает превью для картинки

Автор: Sanchezzz 1.12.2009, 11:47
Это всеголишь пример.. небезательно юзать его да и на малых сайтах в полне нормально использовать. 

Применение одно если вам нужно сохранить оригинал картинки и уменьшить ее до детальной, для привьюшки придется при заполненние БД сжимать и сохранять.

Либо делать все ручками резать сжимать прописывать.

Автор: supervladislav 1.12.2009, 19:10
Енто я могу сделать сам)))
У меня не выходит вот такая вещь)))
чтобы фотография выводилась в новости я использую функцию vivodimg()
 при прокрутке фотографий влево вправо если их больше 3 для этой новости появляются стрелки влево и вправо ))
мне надо эту переменную сделать уникальной  чтобы она для аждой новости была своя ,а потом как-то проверять на наличие числа в ней
 
Код

imggo1'.$cfg2.'

Код

echo '<td><a href="index.php?imggo1'.$cfg2.'='.$cfg2.'&go=1&kab=0&namenews='.$p.'&red='.$red.'"><<</a></td>';


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)