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

  #4  
Старый 31.05.2009, 22:16
Kuzya
Участник форума
Регистрация: 27.04.2008
Сообщений: 224
Провел на форуме:
140661

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

3.2 Скриншоты.
Отображать скриншоты программы мы будем на отдельной странице. Они будут считываться из директории /images/screenshots (скопируйте туда содержимое соответствующей папки из архива с дополнительными файлами) и выводится в уменьшенном размере на страницу. Директория здесь используется для того что бы не заморачиваться с различными панелями загрузки скриншотов. Закинул картинку в папку - она отобразилась на сайте. Всё просто.
В самом начале мы получим список уже имеющихся в директории изображений. Это действие я решил поместить в модель. Возможно помещение его в контроллере тоже было бы правильным, но мне кажется что раз происходит операция с данными то находится она должна в модели. Создайте пустую модель Screenshots_model и поместите туда единственный метод под именем imagesList.

PHP код:
class Screenshots_Model extends Model {
public function 
imagesList() {

}

С помощью функции scandir мы обработаем папку скриншотов и вернём список существующих картинок.

PHP код:
// Получаем список файлов
$images scandir("./images/screenshots");

// Убираем "." и ".."
for($i 0$i count($images); $i++) {
if(
$images[$i] == "." OR $images[$i] == "..")
unset(
$images[$i]);
}

return 
$images
Теперь передадим эти данные в отображение и выведем пользователю. Конечно, надо написать функцию изменения размера изображений, ведь скриншот может быть большим и весить несколько мегабайт. Мы её опишем в контроллере Screenshots применяя библиотеку для работы с изображениями (http://docs.kohanaphp.com/libraries/image). Назовём эту функцию resize. У неё будет 2 входящих параметра - имя картинки и требуемая ширина.

PHP код:
// Нам нужно только имя файла, а не всякие ../file
$image basename($image);
// Создаём новый объект Image
$image = new Image("./images/screenshots/{$image}");
// Изменяем размер изображения основываясь его на ширине
$image->resize($width200Image::WIDTH);
// Выводим изображение
$image->render(); 
Обратите внимание на то что методу resize, объекта image, третьим параметром мы передаём значение константы Image::WIDTH. Это нужно для того что бы размер изображения изменялся с сохранением пропорции основываясь на ширине. То есть цифра 200 указывающая высоту в нашем случае ничего не значит.

Так как мы собрались передавать массив изображений в шаблон, то нам ничего не стоит вывести код показа изменённого изображения. В самом контроллере нам нужно лишь поработать с отображениями - вывести их и передать результат работы "imagesList"

PHP код:
public function index() {
$view  = new View('screenshots/index');

$view->header        = new View('header');
$view->menu          = new View('menu');
$view->footer          = new View('footer');
$view->screenshots $this->screenshots->imagesList();

$view->render(true);

В шаблоне мы обойдём массив с помощью цикла foreach и отобразим картинки вот с такими источниками:

/screenshots/resize/имя_изображения/300

Так же мы организуем в отображении счётчик и после вывода каждых двух картинок будем создавать новую строку.

PHP код:
<?=$header?>
<body>
<?=$menu?>
<!-- start page -->
<div id="page">
<!-- start content -->
<div id="content">
<div class="post">
<h1 class="title"><a href="/screenshots/">Скриншоты нашей программы</a></h1>
<div class="entry">
<p>
<table width="100%" cellspacing="10" cellpadding="5">
<tr>
<?$i 0;?>
<?
foreach($screenshots as $screenshot):?>
<!--Если остаток от деления на 2 - 0 (число кратно 2) то начинаем новую строку-->
<?if(!fmod($i,2)):?></tr><tr><?endif;?>
<td>
<img src="/screenshots/resize/<?=$screenshot?>/300" onClick="window.open('/screenshots/resize/<?=$screenshot?>/800');"/>
</td>
<?$i++;?>
<?
endforeach;?>
</tr>
</table>
</p>
</div>
</div>
</div>
<!-- end content -->
<div style="clear: both;">&nbsp;</div>
</div>
<!-- end page -->
<?=$footer?>
Сохраните этот шаблон под именем index.php в папке /application/view/screenshots/
В итоге мы должны получить следующее.


И сколько бы мы не клали изображений в директорию скриншотов - страница будет вытягиваться только вниз. Вы могли заметить что в коде шаблона, при отображении картинки, указывается событие onClick. В нём прописан код открытия скриншота шириной 800 пикселей.
 
Ответить с цитированием