суббота, 15 марта 2008 г.

Создание фотоальбома

Создание фотоальбома


Спроектируем 3 таблицы



propel:

photo:

id: ~

file_path: varchar(50)

description: longvarchar

created_at: ~

tag:

photo_id: ~

name: varchar(50)

photocomment:

photo_id: ~

author: varchar(50)

body: varchar(50)

created_at: ~

Построим их


$symfony propel-build-all


Чистим кеш


$symfony clear-cache


Генерируем панель админа


$symfony propel-init-admin frontend photo Photo


смотрим


http://localhost/prod_dev.php/photo.


Редактируем представление


открываем generator.yml из apps/prod/modules/photo/config/ и добавляем следующий код:



generator:

class: sfPropelAdminGenerator

param:

model_class: Photo

theme: default

list:

display: [file_path, description, created_at]

object_actions:

_edit:

name: Edit picture properties


Для создания возможности выбора файла и навигащии по системе, модифицируем generator.yml:



generator:

class: sfPropelAdminGenerator

param:

model_class: Photo

theme: default

list:

display: [file_path, description, created_at]

object_actions:

_edit:

name: Edit picture properties

edit:

display: [file_path, description]

fields:

file_path:

type: admin_input_file_tag


Создаем механизм обработкм для выбранного файла. Вначале модифицируем схему, добавляя колонку _photo:



generator:

class: sfPropelAdminGenerator

param:

model_class: Photo

theme: default

list:

display: [_photo, description, created_at]

object_actions:

_edit:

name: Edit picture properties

edit:

display: [_photo, file_path, description]

fields:

file_path:

type: admin_input_file_tag


Создаем _photo.php в /apps/prod/modules/photo/templates следующего содержания:


<?php echo image_tag('/uploads/'.$photo->getFilePath()) ?>


Модифицируем модель


выполнив команду propel-build-all, мы генерирум два файла вкаталоге lib/model/ - Photo.php и PhotoPeer.php.Содержимое lib/model/Photo.php:


<?php

/**

* Subclass for representing a row from the 'photo' table.

*

*

*

* @package lib.model

*/

class Photo extends BasePhoto

{

}


Нам необходимо иметь возможность добавлять файлы и удалять файлы. Для этого модифицируем Photo class:


// in lib/model/Photo.php

class Photo extends BasePhoto

{

public function getTagsString()

{

$tags = array [9]();

foreach ($this->getTags() as $tag)

{

$tags[] = $tag->__toString();

}

return implode(' ', $tags);

}


public function setTagsString($tagPhrase)

{

// remove old tags

$this->deleteTags();


// set new tags

$tagNames = explode(' ', $tagPhrase);

foreach($tagNames as $tagName)

{

$tag = new Tag();

$tag->setPhoto($this);

$tag->setName($tagName);

$tag->save();

}

}


public function deleteTags()

{

$c = new Criteria();

$c->add(TagPeer::PHOTO_ID, $this->getId());

TagPeer::doDelete($c);

}

}


Здесь мы использовали метод __toString из класса Tag , который следут модифицировать:


// in lib/model/Tag.php

class Tag extends BaseTag

{

public function __toString()

{

return $this->getName();

}

}


Модифицируем модель :


// apps/prod/modules/photo/config/generator.yml

generator:

class: sfPropelAdminGenerator

param:

model_class: Photo

theme: default

list:

display: [_photo, description, tags_string, created_at]

object_actions:

_edit:

name: Edit picture properties

edit:

display: [_photo, file_path, description, tags_string]

fields:

file_path:

type: admin_input_file_tag

tags_string:

name: Tags

type: input_tag


 


Комментариев нет: