Создание фотоальбома
Спроектируем 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
Комментариев нет:
Отправить комментарий