Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Модернизация блока новостей - проблемка
 
 автор: denvor   (21.04.2005 в 17:23)   письмо автору
 
 

Решил модернизировать ваш блок размещения новостей: во-первых добавил возможность создания разделов ( и статью теперь можно размещать в нужном разделе)
а во вторых решил добавить функцию автоматического масштабирования картинки co ссылкой на картинку большого размера. Написал скрипт, который получает из скрипта отображения статьи адрес картинки и максимальный размер и выводит изображение - все работает. Но возникла необходимость подключить это в shtml страничку - а там невозможно вызвать скрипт из вставленного через include virtual скрипта вывода статьи. Решил переписать с использованием функции (до этого никогда не использовал) - и на тебе, не работает.
Можете взглянуть, в чем затык? В отдельном файле эта функцция нормально работает :(

// функция отображения картинки
function small_pic ($pic,$size)
  {
         $image = $pic;
         $pic_size = getimagesize ($pic);
         $type = $pic_size[2];
         $width = $pic_size[0];
         $height = $pic_size[1];
         $max_w = $size;
         $max_h = $size;

            if(!empty($image)and !empty($type)and !empty($width)and !empty($height))
             {
                  if(empty($max_w))$max_width = 100;
                  else $max_width = $max_w;

                  if(empty($max_h))$max_height =100;
                  else $max_height = $max_h;

                  $x_ratio = $max_width / $width;
                  $y_ratio = $max_height / $height;
                    if ( ($width <= $max_width) && ($height <= $max_height) )
                     {
                       $tn_width = $width;
                       $tn_height = $height;
                     }
                    else if (($x_ratio * $height) < $max_height)
                     {
                      $tn_height = ceil($x_ratio * $height);
                       $tn_width = $max_width;
                     }
                   else
                   {
                     $tn_width = ceil($y_ratio * $width);
                     $tn_height = $max_height;
                    }


         if($type==1)$src = ImageCreateFromGif($image);
         elseif($type==2)$src = ImageCreateFromJpeg($image);
         elseif($type==3)$src = ImageCreateFromPng($image);

        $dst = ImageCreateTrueColor($tn_width,$tn_height);
        imagecopyresized($dst,$src,
                           0,0,
                           0,0,
                        $tn_width,$tn_height,
                        $width,$height);

           header("Content-type: image/Jpeg");
           ImageJpeg($dst,null,-1);

      ImageDestroy($src);
      ImageDestroy($dst);
     }

 ////////////////////////////////////////////////////////////////////////////

  ...
...
// выводим картинку
echo "<img align='$pic_align' vspace=5 hspace=5 border=0 alt='Увеличить...'
       src=".small_pic($news[url_pict],150).">";

   
 
 автор: ZC   (21.04.2005 в 22:10)   письмо автору
 
   для: denvor   (21.04.2005 в 17:23)
 


<?php
// функция отображения картинки 
function small_pic ($pic,$size
  { 
         
$image $pic
         
$pic_size getimagesize ($pic); 
         
$type $pic_size[2]; 
         
$width $pic_size[0]; 
         
$height $pic_size[1]; 
         
$max_w $size
         
$max_h $size

            if(!empty(
$image)and !empty($type)and !empty($width)and !empty($height)) 
             { 
                  if(empty(
$max_w))$max_width 100
                  else 
$max_width $max_w

                  if(empty(
$max_h))$max_height =100
                  else 
$max_height $max_h

                  
$x_ratio $max_width $width
                  
$y_ratio $max_height $height
                    if ( (
$width <= $max_width) && ($height <= $max_height) ) 
                     { 
                       
$tn_width $width
                       
$tn_height $height
                     } 
                    else if ((
$x_ratio $height) < $max_height
                     { 
                      
$tn_height ceil($x_ratio $height); 
                       
$tn_width $max_width
                     } 
                   else 
                   { 
                     
$tn_width ceil($y_ratio $width); 
                     
$tn_height $max_height
                    } 


         if(
$type==1)$src ImageCreateFromGif($image); 
         elseif(
$type==2)$src ImageCreateFromJpeg($image); 
         elseif(
$type==3)$src ImageCreateFromPng($image); 

        
$dst ImageCreateTrueColor($tn_width,$tn_height); 
        
imagecopyresized($dst,$src
                           
0,0
                           
0,0
                        
$tn_width,$tn_height
                        
$width,$height); 

           
header("Content-type: image/Jpeg"); 
           
ImageJpeg($dst,null,-1); 

      
ImageDestroy($src); 
      
ImageDestroy($dst); 
     } 

//////////////////////////////////////////////////////////////////////////// 

  
... 
... 
// выводим картинку 
echo "<img align='$pic_align' vspace=5 hspace=5 border=0 alt='Увеличить...' 
       src="
.small_pic($news[url_pict],150).">";
?>

Во так удобнее читать =)

   
 
 автор: denvor   (21.04.2005 в 23:44)   письмо автору
 
   для: ZC   (21.04.2005 в 22:10)
 

О, а как это оно так разукрасилось?

   
 
 автор: cheops   (21.04.2005 в 23:46)   письмо автору
 
   для: denvor   (21.04.2005 в 23:44)
 

Оно так разукрашивается, если поместить код в тэги <?php и ?> :)))

   
 
 автор: denvor   (21.04.2005 в 23:48)   письмо автору
 
   для: cheops   (21.04.2005 в 23:46)
 

ответ через 20 секунд - это круто! Я не успеваю задавать вопросы! :)

   
 
 автор: cheops   (21.04.2005 в 22:59)   письмо автору
 
   для: denvor   (21.04.2005 в 17:23)
 

Хм... вы можете воспользоваться готовым кодом для создания уменьшенных копий изображений по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145

   
 
 автор: denvor   (21.04.2005 в 23:47)   письмо автору
 
   для: cheops   (21.04.2005 в 22:59)
 

Спасибо за ссылку! Но хотелось разобраться, что же у меня не работает - ведь код функции в отдельном файле пашет на ура.
Подозреваю, что напутал в последних строчках функции или ее вызове, но что именно - пока не пойму :(

   
 
 автор: glsv (Дизайнер)   (22.04.2005 в 04:14)   письмо автору
 
   для: denvor   (21.04.2005 в 23:47)
 

Вот если бы он запустился, то посмотрев результирующий HTML-код, вы, вероятно, увидели бы нечто похожее

<img vspace=5 hspace=5 border=0 alt='Увеличить...' 
       src=" ? р  о           ? ......> 

Т.е. в параметр src тега <img> у вас подставляется само изображение - как если бы открыть файл JPEG на редактирование, например, в FAR, скопировать все его содержимое и вставить на страницу.
А должно быть вот так:

<img  vspace=5 hspace=5 border=0 alt='Увеличить...' src="img.php">

Т.е. вам нужно вынести функцию в отдельный файл, и имя этого файла подставлять в параметр src. Параметры функции передавать через URL

<?
echo"<img  vspace=5 hspace=5 border=0 alt='Увеличить...' src='img.php?pic=".$news["url_pict"]."&size=150>";
?>

Полную реализацию можете посмотреть по ссылке, которую привел cheops.

   
 
 автор: denvor   (22.04.2005 в 09:43)   письмо автору
 
   для: glsv (Дизайнер)   (22.04.2005 в 04:14)
 

Да, при выносе в отдельный файл все работает, но я хотел сделать все в одном файле через функцию, поскольку предполагал включить файл через include virtual в страницу с SSI, а в этом случае второй вложенный файл не сработает. Так ведь?

Те, как японял, в одном файле сделать это не получится?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования