Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marcw/sfdoctrinethumbnailableplugin
Fork of sfDoctrineThumbnailablePlugin (by Geoffrey Bachelet)
https://github.com/marcw/sfdoctrinethumbnailableplugin
Last synced: about 1 month ago
JSON representation
Fork of sfDoctrineThumbnailablePlugin (by Geoffrey Bachelet)
- Host: GitHub
- URL: https://github.com/marcw/sfdoctrinethumbnailableplugin
- Owner: marcw
- Created: 2010-12-03T10:37:23.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2011-01-10T17:20:49.000Z (about 14 years ago)
- Last Synced: 2024-11-11T06:45:36.222Z (3 months ago)
- Language: PHP
- Homepage:
- Size: 113 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.markdown
Awesome Lists containing this project
README
sfDoctrineThumbnailablePlugin
=============================New options format
------------------[yml]
Post:
actAs:
Thumbnailable:
config_key: thumbnailable
thumb_dir: '%s/.thumbnails'
path_method: 'get%sPath'
keep_original: true
on_demand: false
on_save: true
strict: true
default: cover
fields:
cover:
formats:
homepage: 50x50
default: homepage
side:
columns:
cover: { type: string(255) }
side: { type: string(255) }
Overview
--------
sfDoctrineThumbnailablePlugin is a symfony plugin aiming to ease thumbnail
management for your doctrine models. It takes advantage of (and therefore,
depends on) the sfThumbnailPlugin.Configuring your models
-----------------------Let's start with a sample doctrine schema:
[yml]
Media:
columns:
image: { type: string(255) }This model will represent an image, and its ``image`` field shall contain a path (relative to ``sf_root_dir``) to an image. The ``Thumbnailable`` behavior is activated like any other behavior, in the ``actAs`` section:
[yml]
Media:
actAs:
Thumbnailable: ~
columns:
image: { type: string(255) }Now what ? Well, you're quite ready to go. The behavior adds a ``getThumbnail``
method which you can already use:[php]
$media = Doctrine::getTable('Media')->findSomeMedia();
$media->getThumbnail('image', '50x50');This will return the path to a ``50x50`` thumbnail for the ``image`` field.
Now let's define some default formats:
[yml]
Media:
actAs:
Thumbnailable:
fields:
image:
formats:
homepage: 50x50Here we define a format of ``50x50`` for the ``image`` field. As you can see,
you can easily define different formats for different fields. Now you may ask
why you'd have to define formats ? There are two reasons for this. First, they
are to be used with other settings:[yml]
Media:
actAs:
Thumbnailable:
strict: true
on_save: true
fields:
image:
formats:
homepage: 50x50The ``on_save`` setting tells the behavior to create thumbnails each time you
save your object, and the ``strict`` setting forbid you to use any other format
than the ones defined. For example, the following code would throw an
exception:[php]
$media->getThumbnail('image', '150x50');The second reason to define formats is that when you use a same format in
multiple places in your code, when you need to change it, it would be a real
pain to go all through your code to update the ``getThumbnail`` calls. That's
why you can define ``labels`` for your formats. For example, these two lines of
code are equivalent:[php]
$media->getThumbnail('image', '50x50');
$media->getThumbnail('image', 'homepage');To save some time, and since we only have one image field and one format, you
could ommit the arguments to ``getThumbnail``:[php]
$media->getThumbnail(); // equivalent to $media->getThumbnail('image', 'homepage');Now what happens when you have multiple image fields with multiple format ?
Well you can define default fields and default formats:[yml]
Media:
actAs:
Thumbnailable:
strict: true
on_save: true
default: image
fields:
image:
formats:
homepage: 50x50
body: 300x300
default: body
alternate:
formats:
homepage: 50x50
columns:
image: { type: string(255) }
alternate: { type: string(255) }Now the default format for the ``image`` field is ``homepage`` since it is
defined as such, and the default format for ``alternate`` is ``homepage`` since
it is the only one. Also, the default field is ``image`` thanks to the
``default`` field in ``formats``.Examples:
[php]
$media->getThumbnail(); // equivalent to: $media->getThumbnail('image', 'body');
$media->getThumbnail('homepage'); // equivalent to: $media->getThumbnail('image', 'homepage');
$media->getThumbnail('alternate'); // equivalent to: $media->getThumbnail('alternate', 'homepage');Other configuration settings
----------------------------The ``on_demand`` setting allows to forbid (when set to ``false``) on-the-fly
thumbnail building. It basically means that you are restricted to the
thumbnails created at save time (of course, you'd better activate ``on_save``).The ``thumb_dir`` allows you to control where the thumbnails are stored. It
should points to a directory relative to the image's ``dirname``.The ``path_method`` allows you to specify an object method name, which will return the
absolute file path to the picture file.[yml]
Media:
actAs:
Thumbnailable:
strict: true
on_save: true
default: image
path_method: get%sPath
fields:
image:
formats:
homepage: 50x50
body: 300x300
default: body
alternate:
formats:
homepage: 50x50
columns:
image: { type: string(255) }
alternate: { type: string(255) }And in your Media model class:
[php]
public function getImagePath()
{
return sfConfig::get('sf_web_dir').'/uploads/images/'. $this->getImage();
}
public function getAlternatePath()
{
return sfConfig::get('sf_web_dir').'/uploads/alternate/'. $this->getImage();
}