Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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)

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: 50x50

Here 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: 50x50

The ``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();
}